Verilog Assignment第n次迭代

时间:2013-04-17 18:16:29

标签: verilog

我有以下代码:

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);

我有错误,你能给我一些建议吗?

1 个答案:

答案 0 :(得分:3)

好像你对Verilog中循环的工作方式有误解。在Verilog中,您定义的硬件始终并行运行。 for循环只是表达某些东西的便捷方式。你不应该认为它是迭代的。

你的表达意味着什么:

  
    

abc[i] xyz[i]分配i的所有值,从0到149,在每个时钟周期

  

如果你真的想要迭代,你需要创建一个计数器,它在每个周期递增并使用它而不是for循环。


现在,由于您的一些其他错误,您可能会收到错误消息:

  1. 您不能将$display放在顺序代码块之外。也就是说,它需要位于alwaysforever区块或类似区域内。

  2. 您正在从jkl分配abc[8](32位值),这是一位

  3. 您要在for循环中为abc[0]分配abc[149],但abc只有32位宽