网站大量收购独家精品文档,联系QQ:2885784924

第10章设计的优化案例.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.1 设计的可综合性 用FPGA/CPLD器件实现的设计中,综合就是将Verilog或VHDL语言描述的行为级或功能级电路模型转化为RTL级功能块或门级电路网表的过程 可综合的设计中应注意 不使用初始化语句;不使用带有延时的描述;不使用循环次数不确定的循环语句。 应尽量采用同步方式设计电路。 用always过程块描述组合逻辑,应在敏感信号列表中列出块中出现的所有输入信号。 所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位,用器件的全局时钟端作为系统外部时钟输入端。 在Verilog模块中,任务(task)通常被综合成组合逻辑的形式;每个函数(function)在调用时通常也被综合为一个独立的组合电路模块。 10.2 流水线设计(Pipeline Design)技术 流水线设计是经常用于提高所设计系统运行速度的一种有效的方法。为了保障数据的快速传输,必须使系统运行在尽可能高的频率上,但如果某些复杂逻辑功能的完成需要较长的延时,就会使系统难以运行在高的频率上,在这种情况下,可使用流水线技术,即在长延时的逻辑功能块中插入触发器,使复杂的逻辑操作分步完成,减小每个部分的延时,从而使系统的运行频率得以提高。 流水线设计的代价是增加了寄存器逻辑,增加了芯片资源的耗用。 流水线操作的概念 如某个复杂逻辑功能的实现需较长的延时,可将其分解为几个(如3个)步骤来实现,每一步的延时变小,在各步间加入寄存器,以暂存中间结果,这样可大大提高整个系统的最高工作频率。 非流水线方式实现的8位全加器 两级流水实现的8位加法器 module adder_pipe2(cout,sum,ina,inb,cin,clk); input[7:0] ina,inb; input cin,clk; output[7:0] sum; output cout;reg cout; reg[7:0] sum; reg[3:0] tempa,tempb,firsts; reg firstc; always @(posedge clk) begin {firstc,firsts}=ina[3:0]+inb[3:0]+cin; tempa=ina[7:4]; tempb=inb[7:4];end always @(posedge clk) begin {cout,sum[7:4]}=tempa+tempb+firstc; sum[3:0]=firsts; end endmodule 四级流水线实现的8位加法器 10.6 进程 行为模型的本质是进程。一个进程可以被看作一个独立的运行单元,它可能很简单,也可能很复杂,可以数字系统的行为看作很多有机结合的进程的集合。 在Verilog语言中,描述进程的基本语句是always和initial。always过程反复执行其中的块语句,而initial过程中的语句块只执行一次。 Verilog模块中有如下表示进程的方式。 ◆ always过程块 ◆ initial过程 ◆ assign赋值语句 ◆ 元件调用,如and a1(out,a,b); 在进行数字系统设计的时候应注意 ◆ 将硬件电路的行为以合理的方式映射为一些进程,对每个进程,以最有效的方式进行设计,以最合理的方式描述。 ◆ 将组合逻辑实现的电路和用时序逻辑实现的电路应尽量分配到不同的进程中。 ◆ 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。 ◆ 进程必须由敏感信号的变化来启动,因此必须精心选择进程敏感表达式中的敏感变量。 ◆ 多个进程之间通过信号线进行通信,为达到多个进程协调运行,可设置一些握手信号 10.7 阻塞赋值与非阻塞赋值 在可综合的硬件设计中,使用阻塞和非阻塞赋值语句时,应注意以下原则 (1)当用“always”块来描述组合逻辑时,既可以用阻塞赋值,也可以采用非阻塞赋值,应尽量使用阻塞赋值。 (2)对时序逻辑描述和建模,使用非阻塞赋值方式。 (3)为锁存器(Latch)建模,应尽量使用非阻塞赋值。 (4)若在同一个“always”过程块中既为组合逻辑建模,又为时序逻辑建模,最好使用非阻塞赋值方式。 (5)在一个“always”过程块中,最好不要混合使用阻塞赋值和非阻塞赋值,虽然同时使用这两种赋值方式在综合时并不一定会出错,但对同一个变量不能既进行阻塞赋值,又进行非阻塞赋值,这样在综合时会报错。 (6)不能在两个个或两个以上的“always”过程块中对同一个变量赋值,这样会引发冲突,在综合时会报错。 (7)使用$strobe显示非阻塞赋值的变量。 10.8 FPGA设计中毛刺的消除 信号在FPGA器件内部通过连线和逻辑门时,都有一定的延时。因此多路信号的电平值发生变

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档