我想更新 verilog 中的输入

  • 本文关键字:verilog 更新 verilog
  • 更新时间 :
  • 英文 :


我想在verilog中实现以下算法。有没有办法像 c/c++(例如,a=a+i;)一样更新 verilog 中的输入

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

这里的 a、b、c、d 是 64 位 ASCII 输入。而 lsw(x) 是 32 位中最低有效字。⊕"表示按位XOR,"+"表示字加法,>>>表示右移操作。

我假设您希望代码像在 C 中那样逐行执行。为此,您可以在 always 语句中使用阻塞语句。由于信号的反馈性质,您将需要一个时钟信号。

例如

always@ (posedge clk)
begin
a = a+1;
b = b*a;
c = a+b-c;
end

上面的代码将在时钟的每个正边沿逐行执行。

对于您需要的操作员,

LSW(x) - 假设 x 定义为 [31:0],则 32 位的最低有效字可以用 x[7:0] 表示。

"⊕"位 XOR 可以用 ^ 运算符表示。

"+"和"."可以分别用 |& 表示。

右移可由操作员>>完成。

最新更新