- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PFGA课件第五章数字系统设置与综合(缩)
* 第5章 数字系统的高级设计与综合 本章内容 5.1 Verilog编程风格 5.3 数字系统的同步设计 5.1 Verilog编程风格 由于综合工具只能对可综合的语句产生最终的硬件实现,设计者对语言规则和电路行为的理解不同,使设计描述的编码风格直接影响EDA软件工具的综合结果。好的描述方式就是综合器容易识别并可以综合出所期望的电路,电路的质量取决于工程师使用的描述风格和综合工具的能力。 对于编码风格,列出以下的一些注意要点或需要遵循的准则: 对希望形成组合逻辑的if/else和case语句,要完整地描述其各个分支,避免形成锁存器,可行的办法就是对所有被赋值信号赋一个初始值 。 有大量关于阻塞和非阻塞赋值为综合编码时广泛接受的准则:利用阻塞赋值设计组合逻辑模型;利用非阻塞赋值设计时序逻辑模型。 从不把阻塞和非阻塞赋值混合在一个always 模块中 。 进程的敏感表应该列举完全,否则可能产生综合前后的仿 真结果不同的现象。 在循环中不要放置不随循环变化的表达式。 时序逻辑尽可能采用同步设计 。 …………. VERILOG编程准则 1.分割 一个设计应按功能分割成较小的功能单元,每个功能单元都有一个公共的时钟域,并能独立进行验证。设计层次应能将时钟域分割开,以说明多个时钟之间的相互作用和对同步电路的需求,每个时钟域的逻辑在系统整合之前分别进行验证 。 (1)数据通道与控制 数字系统的许多结构可以分割成数据通道和控制结构的形式。 数据通道一般是一个把数据从设计输入端运送到输出端并对数据执行必要操作的“管 道”。 控制结构通常不对设计数据处理或运送,但是为各种操作配置数据通道。 按照数据通道和控制结构之间的逻辑分割,它可能逻辑地放置数据通道和控制结构在不同的模块,清楚地对各个设计者定义接口。对不同的逻辑设计者这样不仅方便地划分设计活动,而且也优化可能要求的下游活动。 所以,数据通道和控制结构应该分割成不同的模块。 5.1.3 设计组织 (2)时钟与复位结构 好的设计实践表明任何给定的模块只有一个类型的时钟和一个类型的复位。如在许多设计案例中那样,当有多个时钟区域和/或复位结构时,重要的是分割层次使得它们被不同的模块分开。由于混合时钟和程序描述中复位类型会带来设计的风险,但是如果任何给定模块只有一个时钟和复位,这些问题几乎很少出现。 所以,在每个模块中只利用一个时钟和一类复位是好的设计实践 。 5.1.3 设计组织 5.1.3 设计组织 2.参数化 在FPGA设计的范围内,参数是一个模块的特性,它可以在全局的意义上或者逐个例示的基础上改变,同时保持模块的基本功能。这节描述参数的形式,它们如何可以加强综合的有效编码。 (1)定义 定义一般利用来规定横跨所有模块恒定的全局数值,或者为相容和不相容的部分代码提供编译时间的伪指令。在Verilog中,定义使用’define语句,编译时间控制用一系列的’ifdef语句。全局定义的例子可能定义全部设计的常数,如: ‘define CHIPID 8’hC9 // global chip ID ‘define onems 90000 //approximately 1ms with an 11ns clock ‘define ulimit16 65535 //upper limit of an unsigned 16-bit word 5.1.3 设计组织 全局定义的另一个用途是为代码选择规定编译时间伪指令。一个十分通常的应用是FPGA中ASIC样机的使用。ASIC和FPGA之间的不同常常会对设计有细微的修改(特别在I/O和全局结构),例如,考虑在定义文件中以下的行: ‘define FPGA // ‘define ASIC 在顶层模块中,可能有这样的输入: ‘ifdef ASIC input TESTMODE; output TESTOUT; ‘endif ‘ifdef FPGA output DEBUGOUT; ‘endif 全局定义允许设计者用行中包含的变化保持单个代码载体。所以,ifdef伪指令应该为全局定义使用。 (2)参数 不像全局定义,参数一般位于专门的模块,可以从例示到例示改变,一个十分通常的参数是尺寸或总线宽度。 module paramreg (parameter WIDTH = 8) ( output reg [WIDTH –
文档评论(0)