我想更新verilog中的输入

时间:2017-11-09 06:08:25

标签: verilog

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

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而“+”表示逐字加法。>>>表示右移操作。

1 个答案:

答案 0 :(得分:0)

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

例如,

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

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

对于您需要的运营商,

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

"⊕"比特XOR可以由 ^ 运算符表示。

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

右移可以通过>> 运算符来完成。