我将给出一小段我的意思:
input [31:0] for_terminate;
for(i = 0; i < for_terminate; i = i + 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位宽,我认为您应该对此加以限制。