2014-09-03 17 views
-1
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“迭代更多。这是什么意思,我该怎么做才能摆脱它?循环中的迭代错误是什么?

+0

用一个很好的答案类似的问题:http://stackoverflow.com/questions/21430204/vhdl-program-to-count-upto-10-in-4-bit-up-counter – mbschenkel 2014-09-04 06:51:41

回答

0

无界循环通常不会在生成常量之外合成。错误是告诉你循环已经迭代超过了预防无限循环的预设限制。增加限制并不能解决任何问题,因为你所描述的并不是自然地用当前合成工具合成映射到硬件。

您需要重构您的逻辑,以禁止在计数器达到其终端值而不是使用循环时禁用的使能的代码块。

0

可合成结构不能像这样编译时无界循环,它们只能在测试平台代码中使用。原因是当他们扩展到硬件时,像这样的东西需要无限的资源(你没有)。你似乎试图把它写成一个软件。当使用HDL时,您需要考虑它是如何转化为硬件的(假设您打算合成)。相反,您可能会考虑使用一个过程,其中所有活动都发生在“if rising_edge(clock)”内部,并使用信号明确使用触发器,而不是以任何方式使用变量。对于我来说,如果您正在尝试计算您的fcounter超过40次(您目前执行的操作)或当您的计数器超过0111111 40个时钟周期时,您还不完全清楚,但是您可以使用一个信号指示状态而不是退出语句,以及该信号的if/elsif语句,以便在不想进行流程计数时执行其他操作。抱歉格式不佳,时间不够。