0

我有以下代码:

always @ (clk) begin 
  for (1=0,i<150, i++) begin
    abc[i] = xyz[i];
  end
end

问题:如果我想获得abc[8](使用分配语句的第 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);

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

4

1 回答 1

3

似乎您误解了 for 循环在 Verilog 中的工作方式。在 Verilog 中,您正在定义始终并行运行的硬件。for 循环只是表达某些东西的便捷方式。您不应该将其视为迭代。

你的表达的意思是这样的:

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

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


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

  1. 您不能将 a$display放在顺序代码块之外。也就是说,它需要在alwaysorforever块或类似的内部。

  2. 您正在分配jkl(一个 32 位值),abc[8]其中一个位

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

于 2013-04-17T18:56:10.293 回答