集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3608|回复: 9

什么叫可综合

[复制链接]
tim 发表于 2010-6-27 23:47:44 | 显示全部楼层 |阅读模式
什么叫可综合
老有人说什么,这个任务是可综合的,那个是不可综合的,问下到底什么意思
CTT 发表于 2010-6-27 23:50:34 | 显示全部楼层
我觉得是关于由行为级描述的电路可不可以转换为门级电路描述的问题.
 楼主| tim 发表于 2010-6-28 01:30:10 | 显示全部楼层
以下内容来自文章摘录,和楼主共同学习<br>
<br>
一,HDL代码的可综合性<br>
<br>
任何符合HDL语法标准的代码都是对硬件行为的一种描述,但不一定是可直接对应成电路的设计信息。行为描述可以基于不同的层次,如系统级,算法级,寄存器传输级(RTL)、门级等等。以目前大部分EDA软件的综合能力来说,只有RTL或更低层次的行为描述才能保证是可综合的。而众多初学者试图做的,却是想让软件去综合算法级或者更加抽象的硬件行为描述。<br>
<br>
比如说,要想实现两个变量相除的运算,若在代码中写下C=A/B,你将会发现只有一些模拟软件在前仿真中能正确执行这句代码,但几乎任何软件都不能将其综合成硬件。不要怪软件太笨。试想一下,如果我们自己笔算除法是怎么做的?从高位到低位逐次试除、求余、移位。试除和求余需要减法器,商数和余数的中间结果必须有寄存器存储;而此运算显然不能在一个时钟周期里完成,还需要一个状态机来控制时序。一句简单的C=A/B同所有这些相比显得太抽象,对于只能接受RTL或更低层次描述的EDA软件来说确实太难实现。而如果代码是类似于(Verilog)<br>
<br>
<br>
always @(posedge clk)<br>
<br>
<br>
c&lt;=A/B;<br>
<br>
这样的,要求除法在一个时钟延上完成,那更是不可能实现的。(注:有些FPGA的配套软件提供乘除法的运算模块,但也只能支持直接调用,不支持把形如C=A/B的语句综合成除法模块。)<br>
<br>
又比如,一个很多初学者常见的问题是试图让HDL进行循环运算,形同(Verilog):<br>
<br>
for (i=0; i<br>
parity = parity xor data;<br>
<br>
一些功能比较简单的综合软件会完全拒绝综合循环语句;而一些功能较强的软件仅当wordlength是常数的时候能综合;当wordlength为变量时,任何软件都不能综合上面的语句。这是因为硬件规模必须是有限的、固定的。当综合软件遇到循环语句时,总是将其展开成若干条顺序执行的语句,然后再综合成电路。若wordlength是常数,则展开的语句数是确定的,具有可综合性;而若它是变量时,展开的语句数不确定,对应的硬件电路数量也不能确定,无法被综合。或许有人说用计数器就能实现变量循环,但这情形又和上面的除法运算相同。那需要额外的硬件,用来存储中间结果和进行时序控制,象上面那样的循环语句对此描述得太抽象,软件接受不了。<br>
<br>
二,如何判断自己写的代码是可综合的?<br>
<br>
<br>
用一句简单的话概括:电脑永远没有你聪明。具体来说,通常EDA软件对HDL代码的综合能力总是比人差。对于一段代码,如果你不能想象出一个较直观的硬件实现方法,那EDA软件肯定也不行。比如说,加法器、多路选择器是大家都很熟悉的电路,所以类似A+B-C,(A&gt;B)?C这样的运算一定可以综合。而除法、开根、对数等等较复杂的运算,必须通过一定的算法实现,没有直观简单的实现方法,则可以判断那些计算式是不能综合的,必须按它们的算法写出更具体的代码才能实现。此外,硬件无法支持的行为描述,当然也不能被综合(比如想在FPGA上实现DDR内存那样的双延触发逻辑,代码很容易写,但却不能实现)。<br>
<br>
不过,这样的判断标准非常主观模糊,遇到具体情况还得按设计人员自己的经验来判断。如果要一个相对客观的标准,一般来说:在RTL级的描述中,所有逻辑运算和加减法运算、以及他们的有限次组合,基本上是可综合的,否则就有无法综合的可能性。当然,这样的标准仍然有缺陷,更况且EDA的技术也在不断发展,过去无法综合的代码或许将来行,某些软件不支持的代码换个软件或许行。比如固定次数的循环,含一个常数参数的乘法运算等等,有些EDA软件支持对它们的综合,而有些软件不行。<br>
<br>
<br>
所以,正确的判断仍然要靠实践来积累经验。当你可以较准确判断代码的可综合性的时候,你对HDL的掌握就算完全入门了<br>
<br>
[ 本帖最后由 tingwhere 于 2006-12-6 16:55 编辑 ]
ATA 发表于 2010-6-28 03:24:33 | 显示全部楼层
我比较浅薄的理解释是可综合就是可以把hdl语言转化成具体的电路网表(好像就是电路图吧。。。。)。
ups 发表于 2010-6-28 04:57:57 | 显示全部楼层
呵呵,谢谢,大概知道了
usb 发表于 2010-6-28 06:14:07 | 显示全部楼层
可综合就是可以把hdl语言转化成具体的电路网表<br>
俺也理解到这点程度,呵呵
ngtim 发表于 2010-6-28 06:24:41 | 显示全部楼层
我也还是没有什么明确的概念,来学习下
longtim 发表于 2010-6-28 07:35:17 | 显示全部楼层
shayaha
inter 发表于 2010-6-28 08:29:23 | 显示全部楼层
延时描述(after,wait for语句)等被忽略,不要在要综合模块里使用这些语句。不用于时钟沿的wait信号。<br>
不支持或有限支持的数据类型:实型,文件类型,多维数组,记录等。<br>
物理类型。<br>
不要使用初始值,在综合时忽略。<br>
不支持的运算符:/, ** ,abs,mod,rem等。<br>
循环次数不确定的循环语句。<br>
Report,仲裁函数。
 楼主| tim 发表于 2010-6-28 10:10:01 | 显示全部楼层
把行为级描述转变成电路网表吧
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 11:25 , Processed in 0.078668 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表