Single-cycle (bottom-up, top down)
ISA definerer hvilke maskinvareoperasjoner er tilgjengelig for software
Grunnleggende om register
- Boks
- Symbolsk navn
- Verdi som kun forsvinner når den er overskreven
li t3, 41
li t4, 1
add t5, t3, t4
her er t3, t4, og t5 symbolske navn til registre
To registre t3, t4, -> Summeringselektronikk(ALU?, full adder?) -> lagret i register t5
Addisjon i binær ligner veldig OR operatoren
t3: $10.1001_2 = 41_{10}$
t4: $00.0001_2 = 1_{10}$
: $10.100^10_2$
t5: $10.1010_2 = 42_{10}$\
Divide and conquer
Hvordan utføre add t5, t3, t4
?
- Hent instruksjonen fra minnet
- “Decode” intstruksjonen (finn ut hva ressurer trengs)
- Les ut registre
- load t3
- load t4
- Utfør instruksjonen
- t3 + t4 = ?
- Skriv tilbake registre
- write t5
- Oppdater programteller
- PC++
- JMP 1
- fetch - decode - execute -
Data path
MIC 1
Gange med 2 = shift to right $$010_2 * 2_{10} = 100_2$$
Data path | control path
Grunnleggende om minne
0x6 = 0b0110 -> adresse[0:3]
0b1 -> read
0b0 -> write
-> data inn -> data ut[31:0](DET ER GRUNN FOR DET) $\not \to$
for en multibuss $\not \to [x
]$ er x MSB(leftmost bit)hva skjer om du prøver å accesse en ugyldig registreaddresse
SEGFAULT
data ut bussen (ledninger) = antall registre
RISC V
- single
- cycle
- datapath
Instruction
10101010 | 10101 | 01010 | 101 | 01010 | 101010 |
---|---|---|---|---|---|
[31:25] | [24:20] | [19:15] | [14:12] | [11:7] | [6:0] |
Datasti i en mikroarkitektur
^Kan bli abstrahert til fetch-decode-execute
Black = data path Cyan = control path
On cycles
Tenk på cycle som en metronom
Det er en metronom som synkroniserer datamaskinen
Propageringstid = tiden fra PC++ og kalkulasjonen er utført
med tanke på propageringstid, hvorfor gir det mening å dele opp datastien?
Klokkesignal
- Tikker og tokker på oppoversvingninger
Rando shit
function shiftRight(a:0|1[]): b:0|1[] {
let currentBit;
if (nextBit === 0 ||currentBit === lastBit) {
return 0;
}
return 1
}
func shiftRight::