描述
该答复记录将描述为什么可以推断出锁存器。
注意:本答复记录是Xilinx XST解决方案中心(Xilinx答复38927)的一部分 。
Xilinx XST解决方案中心可用于解决与XST相关的所有问题。
无论是开始新设计还是解决问题,请使用XST解决方案中心来指导您获取正确的信息。
解
Xilinx通常不建议在设计中推断锁存器。
如果逻辑意图是组合逻辑,则尤其如此。
锁存器将破坏同步路径,使Xilinx定时引擎难以适当地分析路径。
始终建议查看XST报告的HDL综合部分,以查看是否有推断的锁存器。
您可以通过查看XST综合报告中的“原始和黑盒使用情况”部分来查看此信息。
原始和黑盒用法:
——————————
#BELS:2
#GND:1
#LUT3:1
#FlipFlops / Latches:3
#FD:1
#FDC:1
#LD:1
#Clock Buffers:2
#BUFG:1
#BUFGP:1
#IO Buffers:3
#IBUF:2
#OBUF:1
大多数情况下,如果推断出锁存,则会发出此警告:
警告:Xst:737 – 找到信号的1位锁存器
如果发现此警告,请分析创建锁存器的逻辑并确保这是预期的。
如果不是这样,有几件事要检查:
- 确保if-else语句将net分配给所有条件下的值。
- 确保case语句在所有条件下为所有信号分配值。
- 如果您打算推断寄存器,请确保在进程中包含时钟或始终阻止。
在某些情况下,已经根据控制信号(例如,复位信号)推断出锁存器,但未发出“警告:Xst:737”。
如果您看到在综合报告中推断出锁存器但是没有警告显示它们被推断出的信号,您可以在PlanAhead中打开技术Schematic或Schematic并检查锁存器的连接以查看锁存器的推断位置码。
以下是两个示例,其中在复位信号上推断出锁存器:
- 寄存器复位值与端口/信号声明中指定的初始值不匹配。
解决方案是使重置值与初始值相同。 - 状态机的状态信号使用整数类型。
解决方案是切换到枚举值或标准逻辑(std_logic / std_logic_vector)。
有关可能推断锁存器的原因的更多信息,请参阅(Xilinx答复38931)以获取XST文档。
没有回复内容