Ich bin nicht sicher, ob mehr als 1 Zyklus benötigt wird, und ob ich eine Verschiebung berücksichtigen muss, die mehr als 1 Zyklus dauert, um abzuschließen. Und wenn es möglich ist, mehr als 1 Bit auf einmal zu verschieben, dauert die Verschiebung um 1 Bit die gleiche Verzögerung/Gate-Zeit wie das Verschieben mehrerer Bits?Ist es möglich, mehr als 1 Bit pro Zyklus in Verilog zu verschieben?
Antwort
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.
- 1. Ist es möglich, Eingangsport als Array in Verilog zu nehmen?
- 2. mehr als 1 Abfrage pro PHP Dokument
- 3. Ist es möglich, ein Icon zu verschieben?
- 4. Ist es möglich, mehr als eine Animation gleichzeitig zu haben?
- 5. vb.net: Ist es möglich, mehr als 1 Codezeile gleichzeitig zu kommentieren?
- 6. Ist es möglich, viele Pipelines für 1 Runspace zu haben
- 7. Ist es möglich, mehr als eine Persistenzeinheit in einer Transaktion zu verwenden, ohne dass es XA ist?
- 8. Ist es möglich, Farbe pro Zeile in NSTextField zu ändern?
- 9. Ist Retain-Zyklus in berechneten Eigenschaften möglich?
- 10. Ist es möglich, die Berechtigungen pro Prozedur zu begrenzen?
- 11. mehr als 1 Fremdschlüssel
- 12. Wie verschiebe ich Bit um mehr als 32 Bit?
- 13. Effiziente Synthese einer 4-zu-1-Funktion in Verilog
- 14. Netlogo - mehr als eine Schildkröte pro Patch
- 15. Ist es möglich, eine einzige Testversion pro Gerät zu haben?
- 16. Ist es möglich VisualStudio pro Stunde zu mieten?
- 17. Ist es möglich, Skripte und Stile pro Seite zu bündeln
- 18. Ist es möglich, mehr als einen GhC zu installieren und den Binärnamen jeder Installation zu ändern?
- 19. Ist es möglich, mehr tr-Befehle zu kombinieren?
- 20. Ist es in ibatis möglich, mehr als eine selectKey-Klausel in derselben Einfügeabfrage zu haben?
- 21. Verilog 4-Bit-Komparator = funktioniert nicht richtig
- 22. Ist es möglich, einen Zyklus in einer unveränderbaren verknüpften Liste zu machen?
- 23. Ist es möglich, mehr als 65536 Zeilen in Excel 2007 zu sehen?
- 24. Ist es möglich, mehr als eine main() -Methode in einem C# -Programm zu haben?
- 25. Wie können Daten einen Zyklus später in Verilog überprüft werden?
- 26. file_put_contents (mehr als 1 Datei)
- 27. Hinzufügen von mehr als 1 Balken zu einem Splittercontainer
- 28. Warum Anzahl der Threads ist mehr als 1 in C#
- 29. Ist es möglich, die Ausgabe über mehr Pipes zu färben?
- 30. CUDA Shared Memory mehr als 1 Block funktioniert nicht mehr
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? –
@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. –
@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? –