问题描述
XST在“if else”块中仅分配总线的某些位时挂起。
示例代码:
================================================== ==========
进程(rst_i,clk_i)
开始
如果rst_i =’1’那么
general_error <=(others =>’0’);
elsif clk_i =’1’和clk_i’event然后
对于f在0到31循环中
如果hw_int_error(f)=’1’那么
general_error(0)<=’1′;
elsif sw_int_error(f)=’1’然后
general_error(1)<=’1′;
elsif cpc_int_error(f)=’1’然后
general_error(2)<=’1′;
万一;
结束循环;
万一;
结束过程;
==================================================
上面的代码导致XST挂起。
解决/修复方法
当有可以推断寄存器的构造时,XST会挂起。
上面的示例代码将导致锁存器,因为并非所有的总线位都被分配。
要解决此问题,您可以在“if else”块中分配总线的所有位,它将正常工作。
更正示例代码:
==============================================
进程(rst_i,clk_i)
开始
如果rst_i =’1’那么
general_error <=(others =>’0’);
elsif clk_i =’1’和clk_i’event然后
对于f在0到31循环中
如果hw_int_error(f)=’1’那么
general_error <= x“0000_0001”;
elsif sw_int_error(f)=’1’然后
general_error <= x“0000_0002”;
elsif cpc_int_error(f)=’1’然后
general_error <= x“0000_0004”;
万一;
结束循环;
万一;
结束过程;
===========================================
Xilinx目前正在调查XST中针对此问题的修复方法。目前没有安排修复程序。
没有回复内容