收藏 分享(赏)

北大数字集成电路课件--8_verilog的延时模型.ppt

上传人:j35w19 文档编号:4571814 上传时间:2019-01-02 格式:PPT 页数:31 大小:242KB
下载 相关 举报
北大数字集成电路课件--8_verilog的延时模型.ppt_第1页
第1页 / 共31页
北大数字集成电路课件--8_verilog的延时模型.ppt_第2页
第2页 / 共31页
北大数字集成电路课件--8_verilog的延时模型.ppt_第3页
第3页 / 共31页
北大数字集成电路课件--8_verilog的延时模型.ppt_第4页
第4页 / 共31页
北大数字集成电路课件--8_verilog的延时模型.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、数字集成电路设计入门 -从HDL到版图于敦山北大微电子学系,第8章 延时模型,学习内容: 如何说明块延时 如何说明分布延时 如何说明路径延时 怎样在模块中说明时序检查 标准延时格式SDF(Standard Delay Format),术语及定义,模块路径(module path): 穿过模块,连接模块输入(input端口或inout端口)到模块输出(output端口或inout端口)的路径。 路径延时(path delay):与特定路径相关的延时 PLI:编程语言接口,提供 Verilog数据结构的过程访问。 时序检查(timing check):监视两个输入信号的关系并检查的系统任务,以保证

2、电路能正确工作。 时序驱动设计(timing driven design):从前端到后端的完整设计流程中,用时序信息连接不同的设计阶段,延时模型类型(Delay Modeling Types),延时有三种描述模型:,将全部延时集中到最后一个门,延时分布在每一个门上,分布延时,块延时,路径延时,块延时(Lumped Delay),块延时方法是将全部延时集中到最后一个门上。这种模型简单但不够精确,只适用于简单电路。因为当到输出端有多个路径时不能描述不同路径的不同延时。 可以用这种方法描述器件的传输延时,并且使用最坏情况下的延时(最大延时)。,timescale 1ns/ 1ns module no

3、ror( Out, A, B, C);output Out;input A, B, C;nor n1 (net1, A, B);or #3 o1 (Out, C, net1); endmodule,用块延时描述时,不同路径的延时完全相同,左边例中各路径延时为:A - Out is 3 nsB - Out is 3 nsC - Out is 3 ns,分布延时(Distributed Delays),分布延时方法是将延时分散到每一个门。在相同的输出端上,不同的路径有不同的延时。分布延时有两个缺点: 在结构描述中随规模的增大而变得异常复杂。 仍然不能描述基本单元(primitive)中不同引脚上的

4、不同延时。,timescale 1ns/ 1ns module noror( Out, A, B, C);output Out;input A, B, C;nor #2 n1 (net1, A, B);or #1 o1 (Out, C, net1); endmodule,这种描述方法描述的不同路径的延时。例中各路径延时为:A - Out is 3 nsB - Out is 3 nsC - Out is 1 ns,模块路径延时(Module Path Delays),module noror( O, A, B, C);output O;input A, B, C;nor n1 (net1, A,

5、 B);or o1 (O, C, net1);specify(A = O) = 2;(B = O) = 3;(C = O) = 1endspecify endmodule,例中各路径延时为:A - Out is 2 nsB - Out is 3 nsC - Out is 1 ns,在专用的specify块描述模块从输入端到输出端的路径延时。 精确性:所有路径延时都能精确说明。 模块性:时序与功能分开说明,路径必须括 在圆括号内,结构描述的零延时反馈(Loop),当事件队列中所有事件结束时仿真前进一个时片。在某种零延时反馈情况下,新事件在同一时片不断的加入,致使仿真停滞在那个时片。 若在结构描述

6、中出现从输出到输入的零反馈情况,多数仿真器会检测到这个反馈并产生错误信息。Verilog的lint checker对这种情况会提出警告。 解决这个问题的方法是在电路中加入分布延时。路径延时不能解决零延时振荡问题,因为输出信号在反馈前不会离开模块。,精确延时控制,在Verilog中,可以: 说明门和模块路径的上升(rise)、下降(fall)和关断(turn-off)延时and #(2,3) (out, in1, in2, in3); / rise, fallbufif0 #( 3,3,7) (out, in, ctrl); / rise, fall, turn- off(in = out) =

7、 (1, 2); / rise, fall(a = b) = (5, 4, 7); / rise, fall, turn- off 在路径延时中可以说明六个延时值(0 1, 1 0, 0 Z, Z 1, 1 Z, Z 0)(C = Q) = (5, 12, 17, 10, 6, 22); 在路径延时中说明所有12个延时值(0 1, 1 0, 0 Z, Z 1, 1 Z, Z 0, 0 X, X 1, 1 X, X 0, X Z, Z X)(C = Q) = (5, 12, 17, 10, 6, 22, 11, 8, 9, 17, 12, 16); 上面所说明的每一个延时还可细分为最好、典型、最

8、坏延时。or #( 3.2:4.0:6.3) o1( out, in1, in2); / min: typ: maxnot #( 1:2:3, 2:3:5) (o, in); / min: typ: max for rise, falluser_module #(1:2:3, 2:3:4) ( );在Cadence Verilog中还不支持(b = y) = (2: 3: 4, 3: 4: 6, 4: 5: 8); / min: typ: max for rise, fall, and turnoff,精确延时控制(续),上升延时是输出转换为1时的延时 下降延时是输出转换为0时的延时 关断延时

9、输出转换为三态时的延时 到X的转换延时是最小延时,而从X到其它值的转换使用最坏延时 如果说明了上升、下降和关断延时,则1-X的转换延时使用上升和关断延时的最小值。X-0的延时为下降延时;X-Z的转换为关断延时。 如果只说明了上升和下降延时,则1-X和X-0使用下降延时,X-Z使用上升和下降延时的最小延时 如果只说明了一个延时,则所有转换使用这个延时。 如果说明了六个延时,则1-X使用1-X和1-Z中最小延时;X-0使用1-0和X-0的最大延时;X-Z使用1-Z和0-Z中的最大延时。,延时说明定义的是门或模块的固有延时。输入上的任何变化要经过说明的延时才能在输出端反映出来。如果没有延时说明,则基

10、本单元的延时为0。分布关断延时只对三态基本单元有效。,Specify块,specify块定义了模块的时序部分 时序信息和功能在不同的块中描述,这样功能验证独立于时序验证。specify块在不同的抽象级中保持不变。 设计的功能描述中的延时,如#delay在综合时不起作用 specify块由specify开始, 到endspecify结束,并且在模块内部 使用关键字specparam在specify中进行参数声明。不要同模块参数(由parameter说明)混淆。specparam只能在specify块内声明参数并使用;而parameter也只能在specify外声明参数并使用。 specify块可

11、以: 描述穿过模块的路径及其延时 描述时序检查以保证器件的时序约束能够得到满足 定义特定模块或特定模块路径的时钟过滤限制,模块路径的并行连接和全连接(specify续),*表示全连接,也就是所有输入连接到所有输出 =表示并行连接,也就是信号对之间的连接,(a, b = q, qb) = 15; 等价于:(a = q) = 15;(b = qb) = 15;,(a, b * q, qb) = 15; 等价于: (a = q) = 15; (b = q) = 15; (a = qb) = 15; (b = qb) = 15;,模块路径的并行连接和全连接(specify续),这里有一些路径延时说明的

12、例子:,/ 从 a 到 out 和从 b 到 out的路径延时说明(a, b = out) = 2.2;/ 从 r 到 o1 和 o2 的上升、下降延时说明(r * o1, o2) = (1, 2);/ 从 a1 到 b1 和 从 a0 到 b0 的路径延时说明(a 1: 0 = b 1: 0) = 3; / 并行连接/ 从 a 到 o 的全路径延时说明(a7: 0 * o7: 0) = 6.3; / full connection,specify块参数,specify块中的参数由关键字specparam说明。specparam参数和模块中parameter定义的参数作用范围不同,并且spec

13、param定义的参数不能重载。下面总结了两种参数的差别:,specify参数 关键字为specparam声明 必须在specify块内声明 只能在specify块内使用 不能使用defparam重载 模块参数 使用关键字parameter声明 必须在specify块外声明 只能在specify块外使用 可以用defparam重载 占用存储器,因为在每个模块实例中复制,module noror (O, A, B, C);output O;input A, B, C;nor n1 (net1, A, B);or o1 (O, C, net1);specifyspecparam ao = 2, bo

14、 = 3, co = 1;(A = O) = ao;(B = O) = bo;(C = O) = co;endspecify endmodule,使用specparam定义参数的例子:,状态依赖路径延时SDPD,状态依赖路径延时在说明的条件成立时赋予路径一个延时。,module XOR2 (x, a, b);input a, b;output x;xor (x, a, b);specifyif (a) (b= x) = (5: 6: 7);if (!a) (b= x) = (5: 7: 8);if (b) (a= x) = (4: 5: 7);if (!b) (a= x) = (5: 7: 9

15、);endspecify endmodule,有时路径延时可能依赖于其它输入的逻辑值。SDPD就是用于说明这种情况。在例子中,a到out的延时依赖于b的状态。SDPD说明语法:if 路径延时说明; SDPD说明不使用else子句。条件值为X或Z则认为条件成立。当一个路径中有多个条件成立时使用最小值。 所有输入状态都应说明。若没有说明则使用分布延时(若说明了分布延时),否则使用零延时。 条件有一些限制,但许多仿真器并不遵循IEEE标准的限制。,惯性(inertial)和传输(transport)延时模型,对于惯性延迟,若路径延时小于门的固有延时,信号会被淹没。 对于传输延迟,输入上每个变化都会反

16、映到输出上。惯性延迟与传输延时的比较,固有延时2ns,小于2ns固有延时的脉冲在输出上没有反映,输入的任何变化反映到输出,1ns宽度的脉冲,仿真器使用缺省的延迟模型,有的可以用命令行选项,有的用仿真器专用的编译指导指定延迟模型。,路径脉冲控制,使用specparam参数PATHPULSE$控制模块路径对脉冲的处理。 语法:PATHPULSE$ = (, ?)PATHPULSE$ =(, ?),specify(en = q) = 12;(data = q) = 10;(clr, pre * q) = 4; specparamPATHPULSE$ = 3,PATHPULSE$en$q = ( 2,

17、 9 ) ,PATHPULSE$clr$q = 1 ; endspecify,en输入波形,输出q带倾斜波形 硬件可能产生的波形,例子,路径脉冲控制,可以用PATHPULSE$声明的 specparam参数覆盖全局脉冲控制 PATHPULSE$声明的 specparam参数缩小了指定模块或模块内特定路径的模块路径延时的范围。 只声明一个值时,error_value和reject_value相同,如PATHPULSE$ = 3; 等价于 PATHPULSE$ = (3, 3); 脉冲宽度小于reject_value的信号将被滤掉,而小于error_value的值会使输出产生不定状态。 由上面带斜

18、率的波形可以看出,模块中en信号在时间t发生变化并开始影响q;若en脉冲在时间t+2结束,则q没有被完全驱动,q将恢复原值,如点波形所示。若en脉冲在时间t+9结束,q则可能完成驱动,也可能没有,处于未知状态。如果en到t+9一直有效,q将输出新值。,Verilog时序检查,使用时序检查以验证设计的时序 时序检查完成下列工作: 确定两个指定事件之间的时差 比较时差与指定的时限 如果时差超过指定时限则产生时序不能满足的报告。这个报告只是一个警告信息,不影响模块的输出 Verilog支持的时序检查有: setup(建立时间) hold(保持时间) pulse width(脉冲宽度) clock p

19、eriod(时钟周期) skew(倾斜) recovery(覆盖),Verilog时序检查(续),系统任务$setup在数据变化到时钟沿的时差小于时限则报告一个violation,如$setup( data, posedge clk, 4); 系统任务$hold在时钟沿到数据变化的时差小于时限则报告一个violation,如$hold( posedge clk, data, 3); $setuphold是$setup和$hold的联合。$setuphold( posedge clk, data, 4, 3);,Verilog时序检查(续),建立时间:$setup( data_event, cl

20、k_event, limit, notifier); 保持时间:$hold( clk_event, data_event, limit, notifier); 建立/保持时间: $setuphold( clk_event, data_event, s_limit, h_limit, notifier); 覆盖:$recovery(reference_event, data_event, limit, notifier); $removal( ctrl_event1, ctrl_event2, limit, notifier); $recrem( reference_event, data_ev

21、ent, rec_limit, rem_limit, notifier); $width( ctrl_event, limit, threshold, notifier); $period( ctrl_event, limit, notifier); $skew( ctrl_event1, ctrl_event2, limit, notifier);,时序检查中的通知(notifier)(续),可以说明并使用一个notifier来显示时序不满足(violation)$setuphold( ref_event, data_event, s_limit, h_limit, NOTIFY); not

22、ifier是可选的 notifier是一个1位的寄存器 时序检查产生violation时,Verilog报告信息并使notifier翻转 当时序violation产生时,可以用notifier使输出变为未定义值。 有两种方法使notifier影响输出值 将notifier作为UDP的一个输入端口 在高级行为模块中,不需要为notifier声明一个端口也可以对其进行操作。,notifier举例,timescale 1ns/ 1ns module dff_notifier (q, ck, d, rst);input ck, d, rst;output q;reg FLAG; / 1-bit not

23、ifier / dff netlist goes herespecify(ck = q) = (2: 3: 4);$setup( d, posedge ck , 2, FLAG);endspecify endmodulemodule test;reg ck, d, rst;dff_notifier (q, ck, d, rst); / stimulus and response checking goes herealways ( notifier) beginrst = 1; #10 rst = 0; end endmodule,notifier初始值为X;第一个产生时序violation时

24、,其值变为1。其后每次产生时序violation,其值翻转。,时序检查 条件时序检查,module dff (data, clk, rst, q, qb);input data, clk, rst;output q, qb; / instantiate the primitives for the basic flip-flopudp_dff( q_int, data, clk, rst);buf b1( q, q_int);not n1( qb, q_int); / create timing checksspecify$setup( data, posedge clk endspecify

25、 endmodule,在条件时序检查中,是否进行时序检查取决于条件表达式的计算值,专用操作符&在时序检查中设置条件。 只当条件表达式为真时才进行时序检查,当rst为高时进行setup和hold检查,width检查与rst无关,时序检查 条件时序检查,条件表达式中条件只能是一个标量信号,这个信号可以:用位反操作符()取反。用等于操作符(= =或!=)与一个标量常量进行比较用相同操作符(=或!=)与一个标量常量进行比较若条件表达式计算值为1、x或z则认为条件成立。 由于条件时序检查的条件表达式中只能有一个信号,因此需要多个信号产生条件时必须使用哑逻辑使将它们表达为一个内部信号表示才能用于条件时序检

26、查。,SDF(Stand Delay Format)文件,增量或绝对延时,如模块路径,器件、内部连接和端口(包括输入端口延时) 时序检查,如setup, hold, recovery, skew, width period 时序约束,如path 条件或无条件模块路径延时 设计、实例、类型或库的专用数据 比例、环境、工艺及用户定义基本单元,标准延时格式(SDF)是一种标准的,与工具无关的表示时序数据的文本格式。SDF文件通常用于Verilog仿真。教程不对SDF做详细介绍。应注意的是,Verilog仿真器必须能够将SDF文件中的数据标注用于仿真。这些数据包括:,SDF允许不同工具共享延时数据。可

27、以将关键路径信息由综合器传递给布局布线工具,也可将内部连接线延时信息由布局布线工具反传给仿真器。,内部连接延时,内部连接延时是对器件之间连接线延时的估算。例如:,(INSTANCE ) (DELAY(ABSOLUTE(INTERCONNECT u1. u2. u3. o1 u1. u4. i3 (5: 6: 7) (5.5: 6: 6.5) ) ),内部连接延时,上面的例子中的内部连接延时说明了一个input到output连接的线延时。 延时分上升、下降和关断延时,每种延时又有最好、典型和最坏值。限定于敏感边沿的iopath,时钟到输出;用上升、下降的最好、典型、最坏值说明。条件iopath,

28、input到output;用上升、下降和关断的最好、典型、最坏值说明,IOPATH延时,IOPATH延时是器件从输入端口到输出端口的一个合法路径上的延时。 例如:,(INSTANCE test.u1.u2)(DELAY (ABSOLUTE( IOPATH in o1 (1:2:3) (1:3:4)( IOPATH(posedge ck) o1 (2:3:4) (4:5:6)( COND en (IOPATH in o2(2:4:5) (4:5:6) (4:5:7) ) ),IOPATH延时,端口IOPATH,从输入到输出;用最好、典型和最坏值说明上升和下降延时。 限定敏感边沿的IOPATH,从

29、时钟到输出,用最好、典型和最坏值描述其上升和下降延时。 条件IOPATH,从输入到输出;用最好、典型和最坏值描述其上升、下降和关断延时。,在上面IOPATH延时的例子中包括:,在上面IOPATH延时的例子中,实例test.u1.u2 需要一个如下面所示的specify块用于反标注。 specify( in = o1) = (1: 2: 3, 1: 3: 4);( ck = o1) = (2: 3: 4, 4: 5: 6);if ( en ) ( in = o2) = (2: 4: 5, 4: 5: 6, 4: 5: 7); endspecify,SDF文件中的时序信息覆盖specify块中的时

30、序信息,注意:,复习,问题: 哪一种延时说明是最精确的? 怎样防止一个结构化零延时反馈? 为什么不能在specify块中使用模块参数(parameter)? Verilog仿真时在哪里说明一个线延时? Verilog仿真时在哪里说明时序检查?,解答: 在specify块中说明的延时信息是最精确的。因为可以说明pin-to-pin的路径延时 在门加上一个#延时来防止零延时组合逻辑反馈。 模块延时在每次实例化时都复制一份。而低层元件必须大量应用参数,并且其实例化次数也非常多。因此使用specparam节省了大量存储器。在SDF文件中。在编译或仿真时标注这些延时 在specify块中描述,可以由SDF文件中的时序检修改或代替。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信信息 > 电子设计

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报