Gast
#914882
Hallo, ich bin Anfänger in Sachen Verilog: Ich habe ein reg [20:0) x und ein reg [10:0] y . Ich will, dass Bit 11, 12, ...,21 in das reg y gepeichert werden. Wie geht das am einfachsten? Danke, Jonas
|
Anzeige
|
Verilog Bits umkopieren
Gast
#914882
Hallo, ich bin Anfänger in Sachen Verilog: Ich habe ein reg [20:0) x und ein reg [10:0] y . Ich will, dass Bit 11, 12, ...,21 in das reg y gepeichert werden. Wie geht das am einfachsten? Danke, Jonas
Gast
#914896
> Ich will, dass Bit 11, 12, ...,21 in das reg y gepeichert werden.
Du hast x so deklariert, dass dessen Bits nur von 0 bis 20 gehen. Was
soll Bit 21 sein?
Ich geh daher mal davon aus, dass du eigentlich die elf bits 10 bis 20
meintest. Das geht so:
assign y = x[10:20];
oder auch:
always @(posedge bla)
y <= x[10:20];
always@posedge clock
y[10:0] <= {x[11],x[12],undsoweiter}
mit geschweiften Klammern
wenn die Reihenfolge wirklich umgekehrt werden soll, sonst einfach
y[10:0] <= x[21:11]
oder kann man auch zum Umdrehen x[11:21] schreiben, das weiß ich nicht ?
Gast
#914927
Ja, stimmt. Danke. Ich habe noch eine Frage: Angenommen ich habe ein MOdul, das zwei andere Module instanziert und ich möchte die Ausgabe des einen Moduls als EIngabe des anderen Moduls verwenden. Als was muss ich dann die Variable deklarieren? Als reg oder als wire? Jonas Mit Variable meinst du die Verbindung der beiden Instanzen? Das soll ein wire sein, da ja die Signaltreiber irgendwo in den Modulen sind.
Gast
#915010
Ich habe den folgenden Code geschrieben. Mein Compiler gibt den Fehler "Bounds of part-select into 'x' are reversed." aus. Es wäre sehr nett, wenn ihr mir sagen könntet wo der Fehler liegen könnte. Danke, Jonas input [10:0] x; reg [5:0] y; @always(posedge clock) begin y<=x[6:10]; end Beim definieren ist msb > lsb (10 > 0): input [10:0] x; Dann aber beim Zugriff msb < lsb (6 < 10): y<=x[6:10]; Ich glaube das geht nicht. Wenn es dir zu viel Arbeit ist die einzelnen bits in einen Verkettung zu schreiben, kannst du auch eine for-Schleife dazu nehmen. Also so etwa: integer i; for(i=6; i<=10; i=i+1) y[10-i] <= x[i]; Beim sythesieren wir das dann aufgerollt und es stehen die einzelnen Zuweisungen da. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|