Verilog Bits umkopieren

Gast #914896
Lesenswert?

> 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];
Gast #914927
Lesenswert?

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
Gast #915010
Lesenswert?

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
#915065
Lesenswert?

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 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