我有以下代码:
always @ (clk) begin
for (1=0,i<150, i++) begin
abc[i] = xyz[i];
end
end
问题:如果我想获得abc[8]
的值(使用assign语句设置第8次迭代),我该怎么做?
我确实喜欢以下内容:
reg [31:0] abc;
wire [31:0] jkl;
always @ (clk) begin
for (1=0,i<150, i++) begin
abc[i] = xyz[i];
end
end
assign jkl = abc[8];
$display ("value is 0x%x\n", jkl);
我有错误,你能给我一些建议吗?
答案 0 :(得分:3)
好像你对Verilog中循环的工作方式有误解。在Verilog中,您定义的硬件始终并行运行。 for循环只是表达某些东西的便捷方式。你不应该认为它是迭代的。
你的表达意味着什么:
从
abc[i]
xyz[i]
分配i
的所有值,从0到149,在每个时钟周期
如果你真的想要迭代,你需要创建一个计数器,它在每个周期递增并使用它而不是for循环。
现在,由于您的一些其他错误,您可能会收到错误消息:
您不能将$display
放在顺序代码块之外。也就是说,它需要位于always
或forever
区块或类似区域内。
您正在从jkl
分配abc[8]
(32位值),这是一位
您要在for循环中为abc[0]
分配abc[149]
,但abc
只有32位宽