循环中的迭代错误是什么?

时间:2014-09-03 12:29:10

标签: loops vhdl fpga

loop
                if rising_edge (CLOCK) then   
                fcounter := fcounter+1;         
                end if;

                A<=fcounter(6);           --fa=fclock/2^6

                if rising_edge (A) then  
                counter_A:= counter_A+1;              
                end if;

                CIKIS<=A; --40 consecutive "1" consignment to DIN for STARTUP RESET 
                exit when counter_A=101000; --40
end loop;

ISE给出“错误:Xst:1312 - 循环迭代64次。使用”set -loop_iteration_limit XX“迭代更多。”这意味着什么,我该怎么做才能摆脱它?

2 个答案:

答案 0 :(得分:0)

可合成构造不能像这样编译时无界循环,它们只能在testbench代码中使用。原因是当它们扩展到硬件时,这样的东西需要无限的资源(你不会拥有)。你似乎试图把它写成一个软件。使用HDL时,您需要考虑如何将其转换为硬件(假设您计划合成)。相反,您可能会考虑使用一个过程,其中所有活动都发生在&#34;如果rising_edge(时钟)&#34;,并使用信号明确使用触发器而不是可能采用任何一种方式的变量。如果您在fcounter超过40次(您当前所做的事情)或当您的fcounter超过0111111达40个时钟周期时尝试计算时,我并不完全清楚,但您可以使用信号指示任何一种情况而不是退出声明的状态,以及当你不想进行进程计数时,该信号上的if / elsif语句要做其他事情。抱歉格式不佳,时间不够。

答案 1 :(得分:0)

无界循环通常不能在生成常量之外进行合成。错误告诉您循环已经超出了防止无限循环的预设限制。增加限制将无法解决任何问题,因为您所描述的内容并未使用当前的综合工具自然地映射到硬件。

您需要重构逻辑以禁用该代码块,并在计数器达到其终值时取消激活,而不是使用循环。