2017-11-09 2 views
0

Ich möchte den folgenden Algorithmus in Verilog implementieren. Gibt es eine Möglichkeit Eingang in Verilog zu aktualisieren wie C/C++ (zB a = a + i;)Ich möchte Eingänge in Verilog aktualisieren

a←a + b + 2 · lsw(a) · lsw(b) 
d←(d ⊕ a) >>> 32 
c←c + d + 2 · lsw(c) · lsw(d) 
b←(b ⊕ c) >>> 24 
a←a + b + 2 · lsw(a) · lsw(b) 
d←(d ⊕ a) >>> 16 
c←c + d + 2 · lsw(c) · lsw(d) 
d←(b ⊕ c) >>> 63 

hier a, b, c, d sind 64-Bit-ASCII-Eingänge. Und lsw (x) ist das niedrigstwertige Wort von 32 Bit. "⊕" bezeichnet ein bitweises XOR und "+" bezeichnet eine wortweise Addition, und >>> bezeichnet eine Rechtsschiebeoperation.

Antwort

0

Ich gehe davon aus, dass der Code Zeile für Zeile wie in C ausgeführt werden soll. Dafür können Sie blockierende Anweisungen innerhalb einer Anweisung immer verwenden. Sie benötigen ein Clock-Signal, aufgrund der Rückmeldung Ihrer Signale.

Zum Beispiel

[email protected] (posedge clk) 
begin 
a = a+1; 
b = b*a; 
c = a+b-c; 
end 

Der obige Code wird Zeile für Zeile ausgeführt werden, bei jeder positiven Flanke des Takts. [7: 0] vorausgesetzt x ist definiert als [31: 0] -

Und für die Operatoren, die Sie benötigen,

LSW (x) das niedrigstwertige Wort von 32 Bit kann durch x dargestellt werden.

"⊕" bitweise XOR kann durch ^ Operator dargestellt werden.

"+" und "." kann durch | dargestellt werden und & bzw..

Rechtsverschiebung kann durch >> Operator vorgenommen werden.

+0

Können Sie mir helfen, den Code zu schreiben? @ vipin –

+0

Der Fehler, mit dem ich beim Implementieren des Codes konfrontiert bin, ist, wenn ich a, b, c, d als reg deklariere, wie würde ich ihnen Werte zuweisen? –

+0

Ich möchte 64 Bit Ascii Valuse zu a, b, c und d zuweisen und sie aktualisieren. –

Verwandte Themen