xinu2009的个人空间 https://blog.eetop.cn/482824 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

硬件描述语言Verilog代码风格对可综合性的影响

已有 3528 次阅读| 2010-4-6 22:06

1.硬件描述语言中的综合技术
以硬件描述语言为核心的EDA技术中,综合问题在设计中起着关键作用。综合就是逻辑综合器根据约束条件把Verilog(或VHDL)描述的RTL(Register Transfer Level,寄存器传输级)设计,转换为可与FPGA/CPLD的门阵列基本结构相映射的网表文件。
网表文件包含使用工艺库的标准逻辑单元构建系统的硬件电路的信息,决定了系统的功能、性能、时序特性等。而Verilog代码风格和综合器的性能将对逻辑综合的生成的网表结果产生重要的影响。

2.HDL代码的可综合性
现在回到最初的问题上。为什么诸如除法、循环之类的HDL代码总是会出错?

由上一部分可知,任何符合HDL语法标准的代码都是对硬件行为的一种描述,但不一定是可直接对应成电路的设计信息。行为描述可以基于不同的层次,如系统级,算法级,寄存器传输级(RTL)、门级等等。以目前大部分EDA软件的综合能力来说,只有RTL或更低层次的行为描述才能保证是可综合的。而众多初学者试图做的,却是想让软件去综合算法级或者更加抽象的硬件行为描述。

比如说,要想实现两个变量相除的运算,若在代码中写下C=A/B,你将会发现只有一些模拟软件在前仿真中能正确执行这句代码,但几乎任何软件都不能将其综合成硬件。不要怪软件太笨。试想一下,如果我们自己笔算除法是怎么做的?从高位到低位逐次试除、求余、移位。试除和求余需要减法器,商数和余数的中间结果必须有寄存器存储;而此运算显然不能在一个时钟周期里完成,还需要一个状态机来控制时序。一句简单的C=A/B同所有这些相比显得太抽象,对于只能接受RTL或更低层次描述的EDA软件来说确实太难实现。而如果代码是类似于(Verilog):

always @(posedge clk)
c<=A/B;
这样的,要求除法在一个时钟延上完成,那更是不可能实现的。(注:有些FPGA的配套软件提供乘除法的运算模块,但也只能支持直接调用,不支持把形如C=A/B的语句综合成除法模块。)

又比如,一个很多初学者常见的问题是试图让HDL进行循环运算,形同(Verilog):
for (i=0; iparity = parity xor data[i];

一些功能比较简单的综合软件会完全拒绝综合循环语句;而一些功能较强的软件仅当wordlength是常数的时候能综合;当wordlength为变量时,任何软件都不能综合上面的语句。这是因为硬件规模必须是有限的、固定的。当综合软件遇到循环语句时,总是将其展开成若干条顺序执行的语句,然后再综合成电路。若wordlength是常数,则展开的语句数是确定的,具有可综合性;而若它是变量时,展开的语句数不确定,对应的硬件电路数量也不能确定,无法被综合。或许有人说用计数器就能实现变量循环,但这情形又和上面的除法运算相同。那需要额外的硬件,用来存储中间结果和进行时序控制,象上面那样的循环语句对此描述得太抽象,软件接受不了。

3. Verilog代码风格对逻辑综合的影响
3.1 设计思想对逻辑综合的影响
设计思想是整个FPGA设计的灵魂,它决定了系统设计中Verilog代码编写策略和逻辑综合后获得的硬件架构,直接影响系统性能。对系统时钟设计而言,有同步设计与异步设计;而对工程实现而言,常采用的设计思想有:层次化设计、串行设计、并行设计和流水线设计。

    一个规范的FPGA设计尽可能使用同步设计。同步设计具有时序分析方便、可靠性好的优点,现代EDA软件是以同步设计为基准做分析的。但同步设计中最长的组合逻辑延迟,即关键路径(Critical Path)将影响整个系统的运行速度。而基于锁存器的异步设计比触发器占据更小的面积,没有时钟树的耗电问题,但现代EDA工具几乎无法对复杂的异步电路模型做出有效的分析。

层次化设计使得用户可以采用自上而下(Top-down)及自下而上(bottom-up)相结合的混合设计,在进行系统级和模块级设计的同时进行底层关键模块的划分和设计。对输入的处理是分步进行,且后一步骤依赖于前一步骤的结果的功能模块使用串行设计,并在串行模块之问加入FIFO(先进先出队列)缓冲;对几个可同时处理流程的功能模块使用并行设计,注意同步并行输出的结果。若系统要求高性能的处理效率,可在系统的关键路径加人流水线设计。

3.2 Verilog代码与锁存器(latch)
多数EDA工具都是基于同步电路模型进行分析的。在FPGA设计时,Verilog代码的综合由EDA工具自动完成。在使用Verilog语言设计控制代码时,常因Verilog代码风格缺陷导致综合时产生非预期的锁存器,产生异步电路,使EDA工具无法对系统进行时序分析与验证。产生非预期的锁存器常见情况有:嵌套if语句;使用不完整的敏感列表(Sensitivity List);条件不完备的case语句。锁存器产生原因往往是在Verilog代码设计时没有为所有输出指定输出状态,综合工具就会使用锁存器保存该输出原来的状态,从而影响系统的可靠性。此时,设计者必须要修改代码,消除锁存器。

3.3 代码风格与综合的RTL电路的时延
3.3.1 If语句与Case语句
在FPGA控制电路设计中,常常使用if与case语句来进行逻辑条件的判断和信号的选择。在多if结构的语句中,选择信号的判断是有优先级的,综合出的电路的输入输出路径也有区别,这意味着信号的时延随着优先级而不同,设计中注意合理处理较大时延的信号路径。
采用单if和case语句中,各输入信号到最终的结果输出所经过的路径长度是相同的,时延也基本相同。图2~图4描述了if与case语句与RTL电路结构的对应关系。两个语句都能完成4选1多路选择器的功能,但其时延是不一样的。图3中,输入a具有最低优先级,其输出延时最长,图4采用无优先级信号判断的case语句,输入a,b,e,d到输出的延时是基本相同的。在设计时要根据系统的时序和功能要求,合理选择if与case语句风格。
多if与case语句代码:

……
z=0:
if(sel[0]) z=a; 
if(sel[1]) z=b; 
if(sel[2]) z=c; 
if(sel[3]) z=d; 
end 
……
……
case x(se1)
4b1xxx z=d;
4bx1xx z=c;
4bxx1x z=b;
4bxxx1 z=a;
default z=1b0;
endcase
……

多if语句的RTL电路:


case语句的RTL电路


3.3.2 代码风格与综合的RTL电路的串/并行结构
组合逻辑RTL代码尽量采用并行结构,降低寄存器问组合路径的延迟是提高系统工作频率最主要的手段,因此在完成相同功能的前提下应该尽量使用并行逻辑。而代码风格与综合所获得的RTL结构有着密切的关系,并行结构的选择可有效改善耗时较多的运算模块,对比图5与图6的RTL电路,同是消耗3个加法器资源的情况下,不同代码风格产生的电路结构与时序性能有着很大的差别。

表达式z=(a+b)+(c+d)的RTL电路
 
表达式z=a+b+c+d的RTL电路


3.4 代码风格与综合后RTL电路占用的资源
由于运算单元需要占用比较大的逻辑资源,特别是复杂的运算单元,设计时需要考虑消耗的逻辑资源成本。此时,寻求资源共享就变得很重要。资源共享的主要思想是通过数据缓冲器或多路选择器的方法来共享数据通路中的工作单元。对于非并发的两个运算单元,可采用资源共享策略。逻辑共享与代码风格有着密切的关系,如图7、图8所示,在保证时序性能相同的基础上,采用不同的代码风格,可实现资源的共享,节省逻辑资源。

表达式z=(cond)?(a+b):(c+d)的RTL电路

表达式if(cond)z=a+b;else z=c+d的RTL电路


4. 结论
通过研究代码风格对综合结果的影响以及DC综合器的综合约束条件模型,设计者不仅可通过选择合理的Verilog语言风格来优化综合结果,还可以借助优异的综合工具(如DC等)对综合结果进行优化设计.对于复杂的设计,DC综合器对逻辑资源的优化率町达到30%.综合器可根据代码描述的系统功能要求和综合约束,尽最大可能地输出符合用户设计要求的功能、时序、功耗的结果,并输出多种性能报告和网表,从而缩短产品的研发周期.

转载:
www.dzkf.cn/html/EDAjishu/2007/0801/2450.html
www.dzkf.cn/html/EDAjishu/2006/0720/9.html

-----
1.综合就是逻辑综合器根据约束条件把硬件描述语言,转换为可与FPGA/CPLD的门阵列基本结构相映射的网表文件。
2.代码风格对综合效果有影响:可综合性,延时,复杂度等方面。
3.代码风格缺陷会导致综合时加入非预期的锁存器,产生异步电路。

注:本篇文章来自http://hi.baidu.com/gilbertjuly/blog/item/91ed601a071a2cdfac6e7589.html个人空间


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 0

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 1504

    访问数

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-16 15:57 , Processed in 0.024197 second(s), 13 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部