在Verilog中,“ for循环”的大小可以可变吗?

时间:2019-08-11 02:28:37

标签: verilog

我将给出一小段我的意思:

input [31:0] for_terminate;
for(i = 0; i < for_terminate; i = i + 1)
....

很显然,这只是一小段代码,但是我认为它说明了我的想法。这可能吗?

1 个答案:

答案 0 :(得分:4)

我想您实际上是在问:这可以综合吗?答案是不。

一个for循环在编译时展开。 (另请参见here)因此,在编译时必须知道起始值,增量值和结束值。这也意味着最好限制您的for循环范围。以下代码是合法的,可以合成,但不适用于您的FPGA或ASIC:

for (i=0; i<4294967296; i=i+1)
begin
  // Make some logic
  ...

您可以使用if来等效:

for (i=0; i<MAXIMUM_LOOP; i=i+1)
begin
   if (i<for_terminate)
   begin
      ...

将生成所有MAXIMUM_LOOP情况的逻辑,但是每种情况都有检查for_terminate值的条件。看到您的for_terminate为32位宽,我认为您应该对此加以限制。