zusätzliche Register im Shifter

montana
Erstie
Erstie
Beiträge: 22
Registriert: 8. Nov 2016 18:58

zusätzliche Register im Shifter

Beitrag von montana » 18. Feb 2017 13:26

Hi,

ich verstehe nicht, wieso bei diesem (nachfolgenden) Code auf der Folie 81, die Register rg_y1 und rg_y2 benötigt werden.
Dienen diese nur zur Übersicht oder warum sind diese vorhanden?
Im Code wird ja immer der n-te Bit ausgelesen, für einen eventuellen Shift. Erst wird der 0-te Bit aus y0 gelesen und dann wird y0 dem Register rg_y1 zugewiesen. Hinterher wird dann der 1-te Bit aus rg_y1 gelesen.. Dann wird rg_y1 dem Register rg_y2 zugewiesen und der 2-te Bit aus rg_y2 gelesen..
Wieso nehmen wir nicht einfach immer wieder y0 und sparen uns dann die anderen Register?

Code: Alles auswählen

module mkShifter (Shifter_Ifc);
…
Reg #(Maybe #(Bit #(8))) rg_x1 <- mkReg (tagged Invalid);
Reg #(Bit #(3)) rg_y1 <- mkRegU;
Reg #(Maybe #(Bit #(8))) rg_x2 <- mkReg (tagged Invalid);
Reg #(Bit #(3)) rg_y2 <- mkRegU;
rule rl_all_together;
// Stage 0
Bit #(3) y0 = ?;
if (fifo_in_x.notEmpty) begin
let x0 = fifo_in_x.first; fifo_in_x.deq;
y0 = fifo_in_y.first; fifo_in_y.deq;
rg_x1 <= tagged Valid ((y0 [0] == 0) ? x0 : (x0 << 1));
end else
rg_x1 <= tagged Invalid;
rg_y1 <= y0;
// Stage 1
if (rg_x1 matches tagged Valid .x1)
rg_x2 <= tagged Valid ((rg_y1 [1] == 0) ? x1 : (x1 << 2));
else
rg_x2 <= tagged Invalid;
rg_y2 <= rg_y1;
// Stage 2
if (rg_x2 matches tagged Valid .x2)
fifo_out_z.enq (((rg_y2 [2] == 0) ? x2 : (x2 << 4)));
endrule
…
endmodule
LG

Fabian Czappa
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 10. Mai 2015 11:45

Re: zusätzliche Register im Shifter

Beitrag von Fabian Czappa » 18. Feb 2017 15:06

Hay,

so wie ich das sehe, verdeutlicht das nur, in welcher Pipelinestufe der Wert grade ist.

Viele Grüße
Fabian

Antworten

Zurück zu „Archiv“