Verilog:超出循环次数限制。条件永远不会错误

时间:2017-04-13 09:21:59

标签: verilog

enter image description here

这里的任何人都可以帮我删除循环限制超出的错误吗? Databits在" constant.v"中的另一个模块中定义。 Databits的长度是64.我上传了一张图片以供参考1。它有pLayer"置换层"在香农混淆和扩散理论下用于密码。

基本上,我需要更改密码输入状态的每个位的位置,由64位组成。所以,如果位' 0'或者' 1'在第一位置输出位置应为16,第二位应重新定位到第32位,同样如此。代码也在同一个链接中。

1 个答案:

答案 0 :(得分:1)

我在您的代码中看到至少两个问题:

1)你有reg k;并且正在用作循环计数器。这只是一个位,因此它不会计数到63.这意味着它总是< = 63并且循环是无限的。您可以将其定义为整数或reg [6:0]。确保你没有使它成为6位寄存器,因为那将只是63,并且循环将再次无限。

2)第二个问题是你计算每个比特的结果,然后你覆盖所有以前的结果并再次循环。您需要为每个位构建结果。一种与您的代码类似的方法是:

temp = 0;
for(k=0; k<=63;k=k+1) begin
  position = (4*k) % 63;
  if (k == 63) position = 63;
  else temp |= ((statein>>k) & 1'b1) << position;
end
stateout = temp;

或者你可以在else中使用索引:

temp[position] = statein[k];
相关问题