我是新来的Verilog,所以我有一些问题,如果for循环中的Verilog
基本上我有一个5位数的工作,并且想拆它,所以我可以有2位小数。这样做我有这样的一段代码
reg [4:0] position, aux;
reg [3:0] display1, display2;
reg [2:0] secondDigit;
always @(negedge iKEY[1] or negedge iKEY[2]) begin
aux = position;
for(secondDigit = 2'b0; aux >= 5'b01010; secondDigit = secondDigit + 2'b01)
aux = aux - 5'b01010;
assign display1 = aux[3:0];
assign display2 = {2'b0, secondDigit};
end
问题是我得到的
loop with non-constant loop condition must terminate within 250 iterations
这个消息我也尝试代替for循环这一段时间,但继续得到同样错误
aux = position;
secondDigit = 2'b0;
while(aux > 5'b01010) begin
aux = aux - 5'b01010;
secondDigit = secondDigit + 2'b01;
end
有人能帮助我吗? 谢谢
我需要知道iKEY [1]或iKEY [2]中的哪一个已经改变了它的状态(它们是板上的按钮),所以我认为我需要将这些ifs放在总是阻止 – Jorgel
@ J0rge的位置,在块内使用'iKEY','enable'只允许合成器将其用作时钟参考。我假设你没有实际的时钟运行,并且你希望输出来自翻牌。否则,你应该设计一个闩锁。除非清楚哪一个是同步的,哪些是异步的,否则合成器在看到多个边沿敏感信号时不知道该怎么做。 – Greg
谢谢你,我用一种更简单的方式解决了我最大的问题(将数字分开),但是你的建议帮助我理解了更多的硬件逻辑 – Jorgel