描述
关键字:VHDL、综合、综合、逻辑、错误、错误
紧迫性:标准
一般描述:
当以下面的方式实现VHDL计数器时,计数器不能正确工作;即使在加载的值不等于1,或者是“0”时,它仍然将“1”加到和中。这个问题在下面的VHDL代码中说明:
(注意:这个问题在4.1i软件版本中是固定的)。
库IEEE;
使用IEEE.STDYLogiCy1164.ALL;
使用IEEE.STDLogLogic;
使用IEEE.STDLogLogic UNSIGNED;
实体累加器20是
端口(
重置:在STDYLogic中;
CLK:在STDYLogic中;
AddiooIn in:在StdLogLogic向量(19下降到0);
AcCube负载:在STDYLogic中;
ADDIGEN:在STDYLogic中;
AudioOx Outja:输出STDLogLogic向量(19下降到0);
AudioOxOutJub:OUT StdLogLogic向量(19下降到0)
;
末端累加器20;
累加器20的建筑蓄能器20拱
信号AudioOxOutIn A:STdLogLogic向量(19下降到0);
开始
AudioOx Outua A& lt;
进程(CLK,复位)
开始
如果重置=“1”,那么
AudioOxOut-ItnA A& lt=(其他=& gt;‘0’);
然后,ELSIF RISIGIN EDGE(CLK)
如果AcCuyLoad=“1”,那么
AudioOxOutoIntA& lt;
然后,埃尔西夫阿德根恩=“1”
AudioOxOutoIntA& lt;
如果结束;
如果结束;
结束过程;
架构结束;
解决方案
此问题发生是因为XST对计数器声明有困难:
AudioOxOutoIntA& lt;
这一行代码在计数器的LSB上实现一个反相器,从而使计数器增加1。
解决方案是使用中间信号来执行这个操作,如下所示:
库IEEE;
使用IEEE.STDYLogiCy1164.ALL;
使用IEEE.STDLogLogic;
使用IEEE.STDLogLogic UNSIGNED;
实体累加器20是
端口(
重置:在STDYLogic中;
CLK:在STDYLogic中;
AddiooIn in:在StdLogLogic向量(19下降到0);
AcCube负载:在STDYLogic中;
ADDIGEN:在STDYLogic中;
AudioOx Outja:输出STDLogLogic向量(19下降到0);
AudioOxOutJub:OUT StdLogLogic向量(19下降到0)
;
末端累加器20;
累加器20的建筑蓄能器20拱
信号AudioOxOutIn A:STdLogLogic向量(19下降到0);
信号AudioOxOutIn b:STdLogLogic向量(19下降到0);
信号添加:STdLogLogic向量(19下降到0);
开始
AudioOx Outub B& lt;
Add & lt;= AdiooIII+ AudioOxOut-InthB;
进程(CLK,复位)
开始
如果重置=“1”,那么
AudioOxOutIn Itb & lt=(其他=& gt;‘0’);
然后,ELSIF RISIGIN EDGE(CLK)
如果AcCuyLoad=“1”,那么
AudioOx OutthIn B & lt;
然后,埃尔西夫阿德根恩=“1”
AudioOxOutUnthInb & lt;
如果结束;
如果结束;
结束过程;
架构结束;
没有回复内容