- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chap10_EDA设计优化1.ppt
HDL综合工具根据程序设计风格来实现真实的逻辑电路。在进行程序设计时,需要注意的是:HDL是一种硬件描述语言,设计者必须在实际硬件性能和设计仿真速度上做合理的选择。 10.1.1 提高硬件描述效率 1. 综合和仿真分析 VHDL是一种硬件描述和仿真语言,它最初的制订目的并不是为了综合,因此,许多硬件描述的仿真结构在综合器中中不被支持。另外,不同的综合器支持不同的VHDL子集。VHDL定义的语义如果不含有仿真则是高效率的。综合工具只有支持这些语义,才能保证综合前后的仿真相同。 2.尽量不使用wait for xx ns语句 在VHDL程序代码中避免使用wait for xx ns语句,xx ns指明执行下个操作前需要等待的时间,这种语句不会被综合成一种元件。在包含这种语句的设计中,仿真产生的功能和综合之后产生的功能不完全相同。 3.尽量不使用after xx ns语句 在VHDL程序代码中避免使用after xx ns语句,xx ns指明执行下个操作前需要等待的时间。在综合工具进行综合的时候,会忽略after语句。在这种情况下,仿真产生的功能和综合之后产生的功能不完全相同。 4.使用case 语句和if else语句 设计者可以使用case 语句、if else语句或其他条件语句来设计状态机或者其他控制逻辑。这些语句实现的功能各不相同,但是仿真的结果相一致。 if else语句描述的是带有优先级编码的逻辑,case语句描述一种对称平衡的行为。 5.对算术功能进行排序和重组 对算术功能进行排序和重组可以改变设计性能。例如,下面的两个VHDL语言并不等价。 OUT=A+B+C+D; (1) OUT=(A+B)+(C+D); (2) 第1个表达式将会连续叠放3个加法器(((A+B)+C)+D);第2个表达式A+B和C+D是两个并行的加法器,同时进行加法运算,运算的结果通过另一个加法器进行组合。虽然对于上面的两个表达式,RTL仿真结果相同,但是,第2个表达式的综合可能会新城一个速度更快的电路。 6.避免使用初始化intial语句 不要在信号和变量声明时,赋予初值。例如: variable s:integer:=0;因为大部分综合工具将忽略初始化语句。如果使用初始化语句,那么综合的结果和仿真的结果将会产生差异。 7.选择统一的编程风格 由于大型、复杂的设计通常由设计团体共同完成,因此整个设计团队的编码风格应该在项目开始时进行统一,并且贯穿整个设计始终。遵循统一的编码规则将会使得阅读、理解代码变得简单,同时,当设计被重用到以后的设计过程中,将大大提高设计效率。要注意,低效的编码规则不仅不利于理解设计内容,还可能对仿真和综合产生影响,使得设计的性能大大降低。 通常需要遵循的编程设计规则如下: (1)选择使用大小写字母的规则 关键字和自定义名称分别采用不同的大小写风格,如关键字全部采用大写字母,自定义名称全部采用小写字母组成。 (2)使用和实体名称相匹配的文件名称 VHDL文件名称应该和设计文件中的实体名称相匹配。如果设计中包含多个实体,那么每个实体应该存在一个独立的文件中,保证文件名和实体名相匹配。 (3)使用标号 使用标号给逻辑分组。给进程、函数、过程以如下方式标号: async_ff: process(clk,rst) (4) 对代码流进行标号、注释 可以使用任意标号给代码流进行标号、注释,以提高代码的可读性。 (5)不要使用变量替代常量 在设计中给常量定义一个数值,不要使用变量替代常量。遵循这种规则可以提高优化的效果。 (6)使用名称和位置关联 对函数和过程进行调用时,尽量使用名称关联。使用名称关联可以防止产生不正确的端口连接和元件声明,不要在同一语句中同时使用名称和位置关联。 如下语句: c1:bufgs port map(i=clock_in,clock_out);--不正确 c2:bufgs port map(i=clock_in,o=clock_out);--正确 8.编写可读性高的代码 为了提高代码的可读性。需要遵循下列规则:使用代码缩进;合理使用空行;合理使用空格;不要使用长表达式;增加注释。 10.1.2 数据类型与端口定义 1.使用std_logic数据类型 推荐使用std_logic数据类型对硬件进行描述,其原因是: (1)它有9种不同的取值情况,可以表示数字电
文档评论(0)