2016-03-18 3 views

Antwort

1

Wenn Sie eine kombinatorische Verschiebung meinen, dann braucht eine feste Verschiebung überhaupt keine Logik: es ist nur eine Änderung in der Verdrahtung. Wenn Sie eine variable Verschiebung wünschen, können Sie diese Verilog-Operatoren verwenden: << (logische Verschiebung nach links), >> (logische Verschiebung nach rechts) oder >>> (arithmetische Verschiebung nach rechts). Ihr Synthesizer sollte eine kombinatorische Schaltung für diese Operatoren synthetisieren. Die Größe und damit die Verzögerung hängen von der maximal erforderlichen Verschiebung und der Länge des zu verschiebenden Wortes ab. Ob diese Verzögerung mehr als einen Taktzyklus beträgt, hängt von der Frequenz Ihrer Uhr ab. Wenn Sie nicht einen sehr schnellen Takt oder eine sehr lange maximale Verschiebung haben, wird die Verzögerung wahrscheinlich weniger als ein Taktzyklus sein.

Hier ist ein kombinatorischer Linksschieber in Verilog:

module ones_shift #(log2_width=2) (input [(2**log2_width)-1:0] A, input [log2_width:0] SHIFT, output [(2**log2_width)-1:0] As); 

    assign As = A << SHIFT; 

endmodule 

http://www.edaplayground.com/x/24P8

Der Schieber verschiebt die A Eingabe durch die Zahl der Plätze durch die Eingabe SHIFT dargestellt, den As Ausgang zu geben.

Wenn Sie ein Schieberegister (ist eine sequentielle Schaltung) bedeuten, dann erhalten Sie eine Verschiebung pro Taktzyklus.

ist hier ein Schieberegister in Verilog:

module SHIFT_REG #(SIZE = 16) (input LOAD, SHIFT, CLOCK, RESET, [SIZE-1:0] A, output reg [SIZE-1:0] As); 

    always @(posedge CLOCK or posedge RESET) 
    if (RESET) 
     As <= {SIZE{1'b0}}; 
    else 
     if (LOAD) 
     As <= A; 
     else 
     if (SHIFT) 
      As <= {As[SIZE-2:0],1'b0}; 

endmodule 

http://www.edaplayground.com/x/2bAW

Wenn der LOAD Eingang hoch ist, wird die A Eingabe in das Schieberegister geladen. Wenn der Eingang SHIFT hoch ist, dann verschiebt sich das Register nach links (ein Bit pro Zyklus CLOCK). Der Ausgang As ist der parallele Ausgang des Schieberegisters. Der Eingang RESET ist aktiv-hoch.

+0

Sagen Sie, ich sollte eine 5er-Verschiebung (<< 5) in einem Register machen. Würde dies 5 Zyklen oder 1 Zyklus dauern? Würde der Synthesizer es als ein Schieberegister behandeln oder würde es einen Trick machen, der es nur einen Zyklus dauern würde? –

+0

@Brian Crafton Der Synthesizer wird keine solche Entscheidung treffen; Sie müssen. Wenn Sie mit einem HDL entwerfen, entwerfen Sie auf einer höheren Abstraktionsebene, aber nicht so hoch. Ich könnte jetzt in Verilog Beispiele für eine kombinatorische Verschiebung und ein Schieberegister geben. –

+0

@Brian Crafton Ich habe einige Beispiele hinzugefügt. Wenn das nicht hilft, könnten Sie vielleicht etwas mehr Details zu Ihrer Frage angeben. Was verlagerst du? Warum? –

Verwandte Themen