|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
教你如何判断自己写的代码是可综合的?
3 r6 V1 q' I5 v) q# |
( O" t' z5 U% ?) |5 o 用一句简单的话概括:电脑永远没有你聪明。具体来说,通常EDA软件对HDL代码的综合能力总是比人差。对于一段代码,如果你不能想象出一个较直观的硬件实现方法,那EDA软件肯定也不行。比如说,加法器、多路选择器是大家都很熟悉的电路,所以类似A+B-C,(A>B)?C 这样的运算一定可以综合。而除法、开根、对数等等较复杂的运算,必须通过一定的算法实现,没有直观简单的实现方法,则可以判断那些计算式是不能综合的,必须按它们的算法写出更具体的代码才能实现。此外,硬件无法支持的行为描述,当然也不能被综合(比如想在FPGA上实现DDR内存那样的双延触发逻辑,代码很容易写,但却不能实现)。" k: ], [8 E& H4 R/ Y
, S) t- S6 T: o0 R$ K9 o
: X& f7 j a( ^( Z2 ^, }3 s+ B- d 不过,这样的判断标准非常主观模糊,遇到具体情况还得按设计人员自己的经验来判断。如果要一个相对客观的标准,一般来说:在RTL级的描述中,所有逻辑运算和加减法运算、以及他们的有限次组合,基本上是可综合的,否则就有无法综合的可能性。当然,这样的标准仍然有缺陷,更况且EDA的技术也在不断发展,过去无法综合的代码或许将来行,某些软件不支持的代码换个软件或许行。比如固定次数的循环,含一个常数参数的乘法运算等等,有些EDA软件支持对它们的综合,而有些软件不行。
, ^' [- J4 A4 N+ u2 K6 S
W+ r9 W z# ~2 X. ?9 s# G* k
; y- K5 P3 N9 v9 }: P1 y$ K所以,正确的判断仍然要靠实践来积累经验。当你可以较准确判断代码的可综合性的时候,你对HDL的掌握就算完全入门了。
, D5 R6 k* K% }# i
) }6 g. x! L+ L1 C |
|