Single Cycle - Mikrocomputer

Gast #4746550
Lesenswert?

Hey Folks,

ich bin gerade am Lernen für eine Prüfung und habe folgenden 
Programmausschnitt vorliegen :

       addi $t1, $zero,-4
marker beq $t1, $zero, out
       addi $t1, $t1, 1
       j marker
out    jr $ra

Was das Programm einigermaßen leistet ist mir klar. Doch wie kann ich 
bestimmen wieviele Takte die Ausführung in einem Single Cycle benötigt?

Vielen Dank für jegliche Hilfe. :)
Gast #4746552
Lesenswert?

Karl M. schrieb:
> Ins Datenblatt der CPU schauen, so würde ich das machen..

wozu, was willst du doch rauslesen.

"Single Cycle" bedeutet doch vermutlich, jeder OpCode eine Takt.

> Doch wie kann ich
> bestimmen wieviele Takte die Ausführung in einem Single Cycle benötigt?
einfach zusammenzählen.
Gast #4746557
Lesenswert?

Indem Du das Programm im Kopf durchspielst und zählst, weiviele 
Programmzeilen Du durchlaufen hast.

Eventuell musst Du schauen, ob ein Branch 2 Cylen bedeuted, dann bitte 
für jeden Branch noch einen dazuzählen.
(Firma: fritzler-avr.de) #4746774
Lesenswert?

@Fitzebutze
Wer keine Ahnung hat sollte die Klappe halten!
MIPS ist Pipelined.

Daher sieht die execution Time aus wie Single Cycle, da meist jeden Takt 
ein Befehl fertig wird.

Im AVR Datenblatt steht nämlich auch was von "Most Single-clock Cycle 
Execution" und unter der CPU Core Beschreibung sieht man dann, dass die 
Kiste Pipelined ist.

Wenn eine CPU Single Cycle ist dann ist auch immer nur ein Befehl auf 
der CPU.
#4746834
Lesenswert?

Matze schrieb:
> das sind anscheinend 15 takte.. habe nen kollegen nach der lösung
> gefragt.. aber wie kommt man darauf?
1
Befehl                          Aktion          Takt
2
----------------------------------------------------
3
       addi $t1, $zero,-4       $t1:=-4         1
4
marker beq $t1, $zero, out      -4!=0           2
5
       addi $t1, $t1, 1         $t1:=-3         3
6
       j marker                                 4
7
marker beq $t1, $zero, out      -3!=0           5
8
       addi $t1, $t1, 1         $t1:=-2         6
9
       j marker                                 7
10
marker beq $t1, $zero, out      -2!=0           8
11
       addi $t1, $t1, 1         $t1:=-1         9
12
       j marker                                 10
13
marker beq $t1, $zero, out      -1!=0           11
14
       addi $t1, $t1, 1         $t1:=0          12
15
       j marker                                 13
16
marker beq $t1, $zero, out      0==0            14
17
out    jr $ra                                   15

einfach im Kopf durchsteppen.
Wobei dieser Code in der Realität nie laufen würde, weil MIPS nach jedem 
Sprung noch einen Delay Slot hat. Wenn hinter jeden Sprung (beq, j, jr) 
noch ein nop kommt, würde es funktionieren. Dabei kommen natürlich noch 
Zyklen dazu.

fchk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren