使用HDL代码进行设计的时候,需要注意所选取的综合工具是哪一种,无论是FPGA开发套件自带的综合工具(synthesis tools)还是第三方的综合工具,它们对同一段HDL语言综合结果都有可能不同,综合工具有可能违背设计者的最初设计想法,优化掉某些设计。所以在实际设计过程中,需要对所使用的综合工具有比较清楚的了解。但是在实际使用综合工具的时候,设计者是很难清楚地知道综合工具是怎样对HDL语句进行综合。那么折中的方法是参考每一家FPGA厂商所提供的HDL coding guidelines。尽可能地使用基于综合工具所提供的HDL模板。以使综合器在综合(synthesis)和实现(implement)以达到最佳的性能。
即使每种综合器的算法不同导致综合结果有差异,但还是有一些常见的比较通用的设计技术,使设计者在设计的过程中做到规范设计。
下面就介绍一些设计中需要规避的设计方法。
1.避免在设计中出现组合环路
我们知道,同步设计是数字设计中最推荐最安全的设计方法。同步设计中,所有反馈回路都应该包含寄存器(同步设计)。但如果在反馈回路中,没有使用寄存器而是直接使用组合逻辑构成环路,这种组合环路就违背了同步设计原理。组合环路对设计是一种冒险,在遇见组合环路时,有些综合器会报错(ERROR),提示这是不可综合的;但有些综合器只会给出警告(WARNING),这点在设计的时候需要注意查看相关log。
在同步设计中我们使用always语句和阻塞语句来实现同步环路,这是没有问题的。但如果某些设计初学者,把其中的always和阻塞语句换成了always和非阻塞语句,这样就形成了组合环路。具体参考下面的HDL代码描述:
al