PROGETTO DI UN SISTEMA BASATO SU mP
PROBLEMA REALE
SVILUPPO HARDWARE
SVILUPPO SOFTWARE
INTEGRAZIONE
DEL SISTEMA
Università di Pavia - corso di Calcolatori Elettronici
1
SVILUPPO HARDWARE
SPECIFICHE
PROGETTO DEL CIRCUITO
SCHEDA DI PROVA
REALIZZ. PROTOTIPO
DEBUG HARDWARE
Università di Pavia - corso di Calcolatori Elettronici
2
SVILUPPO SOFTWARE
SPECIFICHE
FLOW CHART
STESURA SORGENTE
ASSEMBLATORE/COMPILATORE
LINKER
DEBUG SW (SIMULAZIONE)
Università di Pavia - corso di Calcolatori Elettronici
3
INTEGRAZIONE HW/SW
HW
INTEGRAZIONE
SW
RICERCA ERRORI
(EMULAZIONE REAL TIME)
ROM PROGRAM
COSTRUZIONE
Università di Pavia - corso di Calcolatori Elettronici
4
EMULAZIONE IN TEMPO REALE
SISTEMA DI SVILUPPO
PROTOTIPO
ICE: In Circuit
Emulator
MEMORIA DI
EMULAZIONE
CPU
MEMORIA DEL
PROTOTIPO
Università di Pavia - corso di Calcolatori Elettronici
5
CREAZIONE DI UN ESEGUIBILE
•
•
•
Source
file
Assembler
Object
file
Source
file
Assembler
Object
file
Linker
Source
file
Assembler
Object
file
Program
library
Executable
file
Utilizzo di linguaggio assemblativo quando occupazione di memoria e
velocità sono critici (sistemi embedded e applicazioni real time)
Approccio ibrido con parti scritte in linguaggio ad alto livello e parti
critiche scritte in linguaggio assemblativo
Svantaggi: lunghezza, leggibilità, portabilità
High-level language program
Program
Compiler
Assembler
Linker
Computer
Assembly language program
Università di Pavia - corso di Calcolatori Elettronici
6
MEMORIA
7fffffffhex
Suddivisione in 3 segmenti:
• testo: istruzioni di programma a
partire da 0x400000
• dati a partire da 0x10000000
(statici e dinamici)
• stack: a partire da 0x7fffffff (si
espande in senso opposto all’area
dati)
Stack segment
Dynamic data
Static data
Data segment
10000000hex
Text segment
400000hex
Reserved
Università di Pavia - corso di Calcolatori Elettronici
7
xspim
PC
Status
SPIM
•Interfaccia
Windows/Unix
•Display dei registri
BadVaddr
= 00000000
= 00000000
= 00000000
R0
R1
R2
R3
R4
R5
R6
R7
(r0)
(at)
(v0)
(v1)
(a0)
(a1)
(a2)
(a3)
=
=
=
=
=
=
=
=
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
R8
R9
R10
R11
R12
R13
R14
R15
=
=
=
=
0.000000
0.000000
0.000000
0.000000
FP8
FP10
FP12
FP14
(t0)
(t1)
(t2)
(t3)
(t4)
(t5)
(t6)
(t7)
=
=
=
=
=
=
=
=
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
R16
R17
R18
R19
R20
R21
R22
R23
(s0)
(s1)
(s2)
(s3)
(s4)
(s5)
(s6)
(s7)
=
=
=
=
=
=
=
=
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
R24
R25
R26
R27
R28
R29
R30
R31
0.000000
0.000000
0.000000
0.000000
FP24
FP26
FP28
FP30
(t8)
(s9)
(k0)
(k1)
(gp)
(sp)
(s8)
(ra)
=
=
=
=
=
=
=
=
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
=
=
=
=
0.000000
0.000000
0.000000
0.000000
Double floating-point registers
FP0
FP2
FP4
FP6
=
=
=
=
0.000000
0.000000
0.000000
0.000000
FP16
FP18
FP20
FP22
=
=
=
=
Single floating-point registers
Control
buttons
quit
load
run
step
clear
print
breakpt
help
terminal
mode
set value
Text segments
Text
segments
•Pulsanti di controllo
(Unix)
•Segmento testo:
istruzioni
Cause
LO
= 00000000
= 00000000
General registers
•Simulatore: software che
esegue programmi scritti Register
display
in linguaggio
assemblativo MIPS
(debugging)
•Pseudoistruzioni che
vengono tradotte in
sequenze di istruzioni
MIPS
EPC
HI
= 00000000
= 00000000
[0x00400000]
[0x00400004]
[0x00400008]
[0x0040000c]
[0x00400010]
[0x00400014]
[0x00400018]
[0x0040001c]
0x8fa40000
0x27a50004
0x24a60004
0x00041080
0x00c23021
0x0c000000
0x3402000a
0x0000000c
lw $4, 0($29)
addiu $5, $29, 4
addiu $6, $5, 4
sll $2, $4, 2
addu $6, $6, $2
jal 0x00000000 [main]
ori $2, $0, 10
syscall
;
;
;
;
;
;
;
;
89:
90:
91:
92:
93:
94:
95:
96:
lw $a0, 0($sp)
addiu $al, $sp, 4
addiu $a2, $al, 4
sll $v0, $a0, 2
addu $a2, $a2, $v0
jal main
li $v0 10
syscall
Data segments
Data and
stack
segments
•Segmenti dati e Stack
•Messaggi
SPIM
messages
[0x10000000] ... [0x10010000] 0x00000000
[0x10010004]
0x74706563
0x206e6f69
[0x10010010]
0x72727563
0x61206465
[0x10010020]
0x000a6465
0x495b2020
[0x10010030]
0x0000205d
0x20200000
[0x10010040]
0x61206465
0x65726464
[0x10010050]
0x642f7473
0x20617461
[0x10010060]
0x555b2020
0x696c616e
[0x10010070]
0x73736572
0x206e6920
0x636f2000
0x6920646e
0x7265746e
0x616e555b
0x69207373
0x63746566
0x64656e67
0x726f7473
SPIM Version 5.9 of January 17, 1997
Copyright (c) 1990– 1997 by James R. Larus ([email protected])
All Rights Reserved.
See the file README for a full copyright notice.
0x726f6e67
0x74707572
0x6e67696c
0x6e69206e
0x00205d68
0x64646120
0x00205d65
SPIM: versione per Windows
Università di Pavia - corso di Calcolatori Elettronici
9
Principali Direttive per l’assemblatore MIPS
.ascii
stringa
.asciiz
stringa
.byte
b1, … , bn
.data
<indirizzo>
.float
f1, … , fn
.double
d1 , … , dn
.globl
simbolo
.text
<indirizzo>
.word
w1 , … , wn
.space
n
Università di Pavia - corso di Calcolatori Elettronici
10
SYSCALL
PROGRAMMA
UTENTE
SPIM
PREPARAZIONE
CHIAMATA
CHIAMATA
ESPLETAMENTO
SERVIZIO
RITORNO
RISULTATI
SPIM fornisce tramite System Call (Syscall) servizi analoghi a quelli del sistema operativo.
Syscall vista come l’invocazione di una subroutine.
Passaggio parametri alla syscall attraverso $a0-$a3, se interi, o $f12, se in virgola mobile;
codice della chiamata attraverso $v0. Risultati restituiti in $v0, o $f0, se in virgola mobile.
Se ci sono più parametri si usa la memoria.
Università di Pavia - corso di Calcolatori Elettronici
11
Syscall - Esempio
Per stampare sulla console “risposta =5”:
.data
#segmento dati
str:
COMANDO
CODICE
Input
CHIAMATA
Output
Print_int
1
$a0
Print_float
2
$f12
Print_double
3
$f12
Print_string
4
Sa0
Read_int
5
$v0
Read_float
6
$f0
Read_double
7
$f0
Read_string
8
.asciiz “risposta =“
.text
#segmento testo
li $v0, 4
#chiamata print_string
la $a0, str
#stringa da stampare
syscall
li $v0, 1
#chiamata print_int
li $a0, 5
#intero da stampare
syscall
$a0=buffer
$a1=lungh.
Università di Pavia - corso di Calcolatori Elettronici
12
Scarica

Nuove_Danese_Simulatore