第5章——数字系统的高级设计与综合1_第1页
第5章——数字系统的高级设计与综合1_第2页
第5章——数字系统的高级设计与综合1_第3页
第5章——数字系统的高级设计与综合1_第4页
第5章——数字系统的高级设计与综合1_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12 本章内容本章内容v5.1 Verilog编程风格 v5.2 综合优化 v5.3 数字系统的同步设计 v5.4 数字系统的综合 35.1 Verilog编程风格 由于综合工具只能对可综合的语句产生最终的硬件实现,设计者对语言规则和电路行为的理解不同,使设计描述的编码风格直接影响EDA软件工具的综合结果。好的描述方式就是综合器容易识别并可以综合出所期望的电路,电路的质量取决于工程师使用的描述风格和综合工具的能力。45.1.1 5.1.1 逻辑推理逻辑推理v1.if/else和case结构-特权与并行性module test(in,sel,clk,out);input 3:0 in,sel;i

2、nput clk;output out;reg out;always (posedge clk) if(sel0) out = in0; else if (sel1) out = in1; else if (sel2) out = in2; else if (sel3) out = in3;endmodule5vIf语句综合后的电路图6vIf语言优化后电路图7module test_case(in,sel,clk,out);input 3:0 in,sel;input clk;output out;reg out;always (posedge clk) case(sel) 4b0001: o

3、ut = in0; 4b0010: out = in1; 4b0100: out = in2; 4b1000: out = in3;default: out = in0; endcaseendmodule8vCase语句综合后电路图9vCase语言布局布线优化后电路图10v2 完全条件 module regwrite(output reg rout, input 3:0 in, input clk, input 3:0 sel);always (posedge clk) case (sel) 4b0001 : rout = in0; 4b0010 : rout = in1; 4b0100 :

4、rout = in2; 4b1000 : rout = in3; default : rout = 1b0;endcaseendmodule module regwrite1(output reg rout, input 3:0 in, input clk, input 3:0 sel);always (posedge clk)begin rout =1b0; case (sel) 4b0001 : rout = in0; 4b0010 : rout = in1; 4b0100 : rout = in2; 4b1000 : rout = in3;endcaseendendmodule 11v多

5、控制分支module separated(output reg oDat,input iclk,input iDat1,iDat2,iCtrl1,iCtrl2);always (posedge iclk)beginif(iCtrl1) oDat=iDat2;if(iCtrl2) oDat=iDat1;endendmodulemodule separated(output reg oDat,input iclk,input iDat1,iDat2,iCtrl1,iCtrl2);always (posedge iclk)beginif(iCtrl2) oDat=iDat1;if(iCtrl1) o

6、Dat=iDat2;endendmodule125.1.2 5.1.2 陷阱陷阱v1 阻塞与非阻塞module block(out,clk,in1,in2,in3);input clk;input in1,in2,in3;output out;reg out;reg logicfun;always (posedge clk)begin logicfun = in1 & in2; out = logicfun | in3;end endmodule1314Bad coding styleBad coding stylemodule block_1(out,clk,in1,in2,in3);inp

7、ut clk;input in1,in2,in3;output out;reg out;reg logicfun;always (posedge clk)begin logicfun = in1 & in2; out = logicfun | in3;end endmodule 1516ForFor循环循环例5-13.例5-14例5-15 例5-16例5-17例5-18例5-19 例5-2017对于编码风格,列出以下的一些注意要点或需要遵循的准则: l对希望形成组合逻辑的if/else和case语句,要完整地描述其各个分支,避免形成锁存器,可行的办法就是对所有被赋值信号赋一个初始值 。l有大量

8、关于阻塞和非阻塞赋值为综合编码时广泛接受的准则: 利用阻塞赋值设计组合逻辑模型; 利用非阻塞赋值设计时序逻辑模型。l从不把阻塞和非阻塞赋值混合在一个always 模块中 。l进程的敏感表应该列举完全,否则可能产生综合前后的仿 真结果不同的现象。l在循环中不要放置不随循环变化的表达式。l时序逻辑尽可能采用同步设计 。 .VERILOG编程准则18 1.分割 一个设计应按功能分割成较小的功能单元,每个功能单元都有一个公共的时钟域,并能独立进行验证。设计层次应能将时钟域分割开,以说明多个时钟之间的相互作用和对同步电路的需求,每个时钟域的逻辑在系统整合之前分别进行验证 。(1)数据通道与控制 数字系统

9、的许多结构可以分割成数据通道和控制结构的形式。 数据通道一般是一个把数据从设计输入端运送到输出端并对数据执行必要操作的“管 道”。 控制结构通常不对设计数据处理或运送,但是为各种操作配置数据通道。 按照数据通道和控制结构之间的逻辑分割,它可能逻辑地放置数据通道和控制结构在不同的模块,清楚地对各个设计者定义接口。对不同的逻辑设计者这样不仅方便地划分设计活动,而且也优化可能要求的下游活动。 所以,数据通道和控制结构应该分割成不同的模块。5.1.3 设计组织19(2)时钟与复位结构 好的设计实践表明任何给定的模块只有一个类型的时钟和一个类型的复位。如在许多设计案例中那样,当有多个时钟区域和/或复位结

10、构时,重要的是分割层次使得它们被不同的模块分开。由于混合时钟和程序描述中复位类型会带来设计的风险,但是如果任何给定模块只有一个时钟和复位,这些问题几乎很少出现。 所以,在每个模块中只利用一个时钟和一类复位是好的设计实践 。5.1.3 设计组织205.1.3 设计组织 2.参数化 在FPGA设计的范围内,参数是一个模块的特性,它可以在全局的意义上或者逐个例示的基础上改变,同时保持模块的基本功能。这节描述参数的形式,它们如何可以加强综合的有效编码。(1)定义定义一般利用来规定横跨所有模块恒定的全局数值,或者为相容和不相容的部分代码提供编译时间的伪指令。在Verilog中,定义使用define语句,

11、编译时间控制用一系列的ifdef语句。全局定义的例子可能定义全部设计的常数,如: define CHIPID 8hC9 / global chip IDdefine onems 90000/approximately 1ms with an 11ns clockdefine ulimit1665535/upper limit of an unsigned 16-bit word215.1.3 设计组织设计组织 全局定义的另一个用途是为代码选择规定编译时间伪指令。一个十分通常的应用是FPGA中ASIC样机的使用。ASIC和FPGA之间的不同常常会对设计有细微的修改(特别在I/O和全局结构),例如

12、,考虑在定义文件中以下的行: define FPGA/ define ASIC 在顶层模块中,可能有这样的输入: ifdef ASICinput TESTMODE;output TESTOUT;endififdef FPGAoutput DEBUGOUT;endif 全局定义允许设计者用行中包含的变化保持单个代码载体。所以,ifdef伪指令应该为全局定义使用。 22(2)参数不像全局定义,参数一般位于专门的模块,可以从例示到例示改变,一个十分通常的参数是尺寸或总线宽度。module paramreg (parameter WIDTH = 8) (outputreg WIDTH 1:0 rout

13、,inputclk,input WIDTH 1:0 rst);always (posedge clk)if (!rst) rout = 0;else rout = rin;endmodule 说明一个带可变宽度的简单参数化的寄存器。虽然参数的缺省值是8,单个的例示可以只为这个例示修改宽度。 5.1.3 设计组织235.2 综合优化优化设置与时序分优化设置与时序分析析24速度与面积优化速度与面积优化(一) 设计代码优化25(二) 软件设置选择速度与面积优化速度与面积优化26 资源优化资源优化-资源共享资源共享 在编码风格上,只有在同一个条件语句(if/else和case)不同的分支中的算术操作才

14、能共享。结构性资源共享可以采用不同功能模块的部分设计通过调整逻辑被重用。 module addshare (output oDat,inputiDat1, iDat2, iDat3,inputisel); assign oDat = isel ? iDat1 + iDat2; iDat1 + iDat3;endmodule 27上面例子直接实现:利用综合提供的资源共享选项实现: 资源优化资源优化-资源共享资源共享28 资源优化资源优化-资源共享资源共享if(sel = 0) Result = A0 * B; else Result = A1 * B;乘法器0乘法器1选择器01ResultSel

15、A0BA1B29 资源优化资源优化-资源共享资源共享if(sel = 0) temp = A0; else temp = A1;result = temp * B;选择器01乘法器A0SelA1Result30 资源优化资源优化-逻辑优化逻辑优化 always (posedge clk) begin if(clk) begin ta = ma; tb = 12b100110111001; mc = ta * tb; end end;使用优化过的逻辑进行设计,可以明显的减少资源占用。31 资源优化资源优化-逻辑优化逻辑优化 parameter tb = 12b100110111001;alway

16、s (posedge clk) begin if(clk) begin ta=ma; mc=ta * tb; end ;end32 资源优化资源优化-串行化串行化yout= a0 b0 + a1 b1 + a2 b2 + a3 b3 always (posedge clk) begin if(clk) yout T2 T2 Q Q Q Q Q Q 最大工作频率取决于T1,及最大的延时模块,从而导致整体性能受限。37寄存器配平的结构寄存器配平的结构 延时块(组合逻辑1)QQSETCLRD触发器QQSETCLRD触发器clkQQSETCLRD触发器延时块(组合逻辑2)t1t2t1t2 t1 t1t

17、2 t2 Q Q Q Q Q Q 将“组合逻辑1”的部分逻辑转移到“组合逻辑2”中,减少延时T1速度优化速度优化-寄存器配平寄存器配平 38复位对寄存器平衡的影响复位对寄存器平衡的影响 : 当有许多其它的优化时,复位可能直接影响综合工具利用当有许多其它的优化时,复位可能直接影响综合工具利用寄存器平衡的能力。明确地,如果要求两个触发器组合来平衡寄存器平衡的能力。明确地,如果要求两个触发器组合来平衡逻辑负载,这两个触发器必须有相同的复位状态。例如,一个逻辑负载,这两个触发器必须有相同的复位状态。例如,一个有同步复位,另一个有异步复位(一般是差的设计实践),或有同步复位,另一个有异步复位(一般是差的

18、设计实践),或者一个有置位,另一个有复位,二者是不能组合的,寄存器平者一个有置位,另一个有复位,二者是不能组合的,寄存器平衡不会有效果。衡不会有效果。 速度优化速度优化-寄存器配平寄存器配平 39延时块Td2延时最长Td1延时块Td3输入输出关键路径 延时最长 Td1 延时块 Td2 延时块 Td3 速度优化速度优化-关键路径法关键路径法 关键路径示意关键路径示意 关键路径:设计输入到输出经过的延时最长的逻辑逻路径。405.2.4 有限状态机编译 有限状态机(FSM)编译指的是在RTL级自动识别有限状态机,并需要为速度/面积约束重新编码。这意味着只要利用标准的状态机结构,在RTL级的准确编码是

19、不重要的。由于用标准方式编码的状态机的规则结构,综合工具可以方便地提取状态传输和输出关系,并变换状态机使给定的设计和一组约束更加优化 。 二进制和顺序编码将与状态表示中的所有触发器有关,因此状态解码是必须的。 对每个状态设置一个唯一的位可实现一个有效(one-hot)编码。采用这个编码,没有状态译码,状态机通常运行更快。缺点是一个有效(one-hot)编码一般要求更多的寄存器。 41状态编码状态编码 状状 态态顺序编码顺序编码一位热码编码一位热码编码STATE0000100000STATE1001010000STATE2010001000STATE3011000100STATE41000000

20、10STATE5101000001编码方式编码方式 42状态编码状态编码 parameter idle = 8b00000000,a = 8b00000001,b = 8b00000010,c = 8b00000100,d = 8b00001000,e = 8b00010000,f = 8b00100000,g = 8b01000000,h = 8b10000000; . 435.3 数字系统的同步设计数字系统的输入时钟是周期信号,它控制同步器件中全部时序特性。正时钟脉冲的脉冲上升沿形成由0到1的瞬时转换,而负时钟脉冲的瞬时转换是由1到0的下降沿。 445.3.1 同步设计基本原理 由统一的时

21、钟控制一系列的逻辑门和寄存器等实现对数字系统的操作,称为同步逻辑 。 为了保证时钟信号到达每个寄存器的延时一致,分配时钟信号必须考虑到几点: (1)从参考时钟到存储元件只允许一个路径存在; (2)不主张利用时钟分频器; (3)不允许时钟信号的任何逻辑组合; (4)只有在无竞争冒险的方式下选通时钟信号 。 455.3.2建立和保持时间 时序分析的基本参数,除去前面提到的触发器输出相对于时钟沿的延时时间 之外,还有输入建立时间 和输入保持时间 ,如下图所示。 (1)输入建立时间 是时钟沿到来前数据信号在输入端达到稳定需要的最小时间; (2)输入保持时间 是时钟沿到达后数据信号在输入端保持稳定需要的

22、最小时间。COtsutHtsutHt465.3.2建立和保持时间 在同步设计中,稳定可靠的数据采样必须遵循两个基本的原则:在同步设计中,稳定可靠的数据采样必须遵循两个基本的原则: 1)建立时间原则:有效时钟沿到达前数据输入至少已稳定有采样)建立时间原则:有效时钟沿到达前数据输入至少已稳定有采样寄存器建立时间之久;寄存器建立时间之久; 2)保持时间原则:有效时钟沿到达后数据输入至少还稳定有采样)保持时间原则:有效时钟沿到达后数据输入至少还稳定有采样寄存器保持时间之久;寄存器保持时间之久; CLOCKCODATADELAYSUCOSUtttttBtmax1CLOCKft47内容大纲内容大纲v同步电

23、路设计v全异步电路设计v异步信号与同步电路交互的问题及其解决方法vSoC设计中的时钟规划策略同步电路设计及其与异步信号交互的问题48同步电路的定义同步电路的定义v同步电路,即电路中的所有受时钟控制的单元,如触发器(Flip Flop)或寄存器(Register),全部由一个统一的全局时钟控制49同步电路的时序收敛同步电路的时序收敛触发器的建立时间和保持时间触发器的建立时间和保持时间50同步电路设计的优点同步电路设计的优点v在同步设计中,EDA工具可以保证电路系统的时序收敛,有效避免了电路设计中竞争冒险现象v由于触发器只有在时钟边缘才改变取值,很大限度地减少了整个电路受毛刺和噪声影响的可能51同

24、步电路设计的缺点同步电路设计的缺点v 时钟偏斜(Clock Skew)v 时钟树综合,需要加入大量的延迟单元,使得电路的面积和功耗大大增加v 时钟抖动(Clock Jitter)时钟偏斜时钟偏斜52全异步电路的定义全异步电路的定义v全异步设计跟同步设计最大的不同就是它的电路中的数据传输可以在任何时候发生,电路中没有一个全局的或局部的控制时钟。53异步电路设计的基本原理异步电路设计的基本原理v自定时方法自定时的流水线数据通路自定时的流水线数据通路54异步电路设计的基本原理异步电路设计的基本原理v握手协议握手协议原理握手协议原理55异步电路设计的优点异步电路设计的优点v模块化特性突出v对信号的延迟

25、不敏感v没有时钟偏斜问题v有潜在的高性能特性v好的电磁兼容性v具有低功耗的特性56异步电路设计的缺点异步电路设计的缺点v设计复杂v缺少相应的EDA工具的支持v在大规模集成电路设计中应避免采用异步电路设计57内容大纲内容大纲v同步电路设计v全异步电路设计v异步信号与同步电路交互的问题及其解决方法vSoC设计中的时钟规划策略58亚稳态现象亚稳态现象亚稳态示意图亚稳态示意图59亚稳态现象亚稳态现象亚稳态信号的传播亚稳态信号的传播60亚稳态问题的解决及其亚稳态问题的解决及其RTLRTL实现实现亚稳态现象的解决方法亚稳态现象的解决方法61亚稳态问题的解决及其亚稳态问题的解决及其RTLRTL实现实现mod

26、ule synchronizer ( bclk, /目的时钟,与aclk异步的时钟 reset_b, /全局异步复位信号 adat, /异步输入信号,工作在aclk bdat, /同步器输出 );input bclk;input reset_b;input adapt;output bdat;wire bdat;reg bdat1;reg bdat2;always (posedge bclk or negedge reset_b)if (reset_b) bdat2,bdat1 = 2 b0;else bdat2,bdat1 = bdat1,adat;assign bdat = bdat2;e

27、ndmodule62快时钟同步慢时钟域下的异步控制信快时钟同步慢时钟域下的异步控制信号号快时钟同步慢时钟信号示意图快时钟同步慢时钟信号示意图63快时钟同步慢时钟域下的异步控制信号快时钟同步慢时钟域下的异步控制信号module synchronizer ( clk_fst, reset_b, rd_en, rd_en_s2f ); input clk_fst, reset_b, rd_en output rd_en_s2f; wire rd_en_s2f; reg rd_en_s2f1, rd_en_s2f2, rd_en_s2f3always (posedge clk_fst or neged

28、ge reset_b) if (!reset_b) rd_en_s2f3,rd_en_s2f2,rd_en_s2f1 = 3b111; else rd_en_s2f3,rd_en_s2f2,rd_en_s2f1=rd_en_s2f2,rd_en_s2f1,rd_en;always (rd_en_s2f3 or rd_en_s2f2) case (rd_en_s2f3,rd_en_s2f2) 2b01: rd_en_s2f = 1b1; default: rd_en_s2f = 1b0; endcase64慢时钟同步快时钟域下的异步控制信慢时钟同步快时钟域下的异步控制信号号慢时钟同步快时钟信号示

29、意图慢时钟同步快时钟信号示意图65解决办法解决办法握手机制实现方法一握手机制实现方法一66解决办法解决办法握手机制实现方法一握手机制实现方法一module adapt_gen ( aclk, /快时钟 reset_b, /系统复位信号 adat, /原始控制信号 abdat2, /从慢时钟域反馈回来的同步控制信号 adat1 /经过保持后的信号输出 ); input aclk, reset_b, adat, abdat2; output adat1; reg adat1; always (posedge aclk or negedge reset_b) if (!reset_b) adat1

30、= 1b0; else if (abdat2) adat1 = 1b0; else if (adat) adat1 = 1b1;endmoudule 67解决办法解决办法握手机制实现方法二握手机制实现方法二68解决办法解决办法握手机制实现方法二握手机制实现方法二69解决办法解决办法握手机制实现方法二握手机制实现方法二module stall_logic ( rd_en, rd_en_ ack_s2f, stall_b );inputrd_en;input rd_en_ack_s2f;output stall_b; wire stall_b; always (rd_en or rd_en_ack_s2f)if (rd_en_ack_s2f) stall_b = 1b1;else if (rd_en) stall_b = 1b0; else stall_b = 1b1;endmodule70异步时钟域的数据同步及其异步时钟域的数据同步及其RTLRTL实现实现v握手机制v先入先出队列(FIFO)71握手协议握手协议握手同步异步数据握手同步异步数据72FIFOFIFO的结构与原理的结构与原理FIFO结构图结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论