Forum: FPGA, VHDL & Co. VERILOG: Wertzuweisung über nichtsynchrones Register


von Kermit (Gast)


Lesenswert?

Hallo,

ich habe ein nicht synchrones Register als Index und wollte nun einem 
weiteren Register, in Abhängigkeit von diesem Index, Werte zuweisen:
1
case(index)
2
  0: sum[0:0+3] <= (a+b);
3
  2: sum[2:2+3] <= (a+b);
4
  4: sum[4:4+3] <= (a+b);
5
  6: sum[6:6+3] <= (a+b);
6
7
...
8
9
endcase

Gibt es eine elegantere Lösung?


Danke.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Würde mich nicht wundern, wenn es so ginge:
 sum[index:index+3] <= (a+b);

von Kermit (Gast)


Lesenswert?

Nein leider nicht. Du kannst kein nicht synchrones Register für diese 
Operation benutzen.

von auch hans (Gast)


Lesenswert?

Lothar Miller schrieb:
> Würde mich nicht wundern, wenn es so ginge:
>  sum[index:index+3] <= (a+b);

Fast. Aber so könnte es was werden
1
   sum[index+:3] = (a+b);

Was meinsst du denn mit "nicht synchrones Register"

von Kermit (Gast)


Lesenswert?

> Was meinsst du denn mit "nicht synchrones Register"

Damit meine ich die Zuweisung der Werte durch "=" und nicht durch die 
getaktete Zuweisung "<=".
Der Index kann sich mehrfach in einem Takt ändern und ich kann dort 
leider nicht auf den nächsten Takt bis zur Zuweisung warten. Ansonsten 
hätte ich so ein case Konstrukt natürlich vermieden.

von Kermit (Gast)


Lesenswert?

auch hans schrieb:
> Fast. Aber so könnte es was werden
>
1
>    sum[index+:3] = (a+b);
2
>

Das sollte funktionieren. Das ist die neue Notation für Vektoren mit 
variablen Index, Verilog-2001.


Danke!

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Kermit schrieb:
> Das ist die neue Notation [...] Verilog-2001.

^_^

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

1
    sum[index+:3] = (a+b);
> Das sollte funktionieren.
Ich glaube fast, ich fang auch noch an mit Verilog. Diese Sprache ist so 
kryptisch, dad könnte man als "selbstverschlüsselnd" bezeichnen. Schon 
der Fragezeichen-Operator ist in dieser Richtung Gold wert...  ;-)

von Kermit (Gast)


Lesenswert?

Kleine Korrektur:

sum[index+:4] = (a+b);

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.