版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第9 9章章 设计校验设计校验EDA设计技术设计技术设计校验设计校验针对不同的校验对象和校验级别,采用合适的校验策略和校验方法,验证系统设计的功能和时序是否满足设计要求的过程。魁北克大桥于1907年8月29日倒塌未进行设计校验招致的严重后果未进行设计校验招致的严重后果魁北克大桥在设计过程中未执行设计校验,于1907年8月29日倒塌。为什么进行设计校验?为什么进行设计校验?系统设计的行为级描述和RTL级描述阶段,由于设计实践、不同硬件描述代码风格的差异等原因,导致综合的门级网表和设计模块之间与设计规定的功能不匹配。利用门级网表进行优化、布置、布线的过程中,需要结合所使用的逻辑器件,按照系统设计
2、技术条件要求制定的时序约束条件,对系统模块和布线延时模型进行时序检查。设计校验设计校验分类分类功能校验以等价验证为评估标准,利用硬件描述语言(也包括来自外部的数据文件或其他语言程序),遵循相应的设计规范、标准,设计测试平台,向目标系统创建预先确定的输入,获得目标系统的响应,以比较目标系统的功能是否满足设计要求。借助仿真工具实施各功能校验环节,又称之为前仿真或功能仿真。时序校验将时序指令置入指定的系统模块中,校验设计系统在给定的时间限制范围内,关键事件的发生是否满足时序要求。时序约束条件验证过程一般安排在布线后对门级仿真平台上进行,称为时序校验或后仿真。校验标准校验标准校验标准是校验设计必须满足
3、的规定的集合,包括标准规定、标准解释、校验起点、校验二次收敛点,要求在校验域内,自校验起点开始,经RTL代码(对于功能校验)或门级延时模型路径(对于时序校验)至二次收敛点、校验路径构成的闭域,校验结果必须是收敛的。校验校验方式方式有很多方式实现设计校验的二次收敛:手动、自动、Poka-Yoka式防呆看板、冗余等。对于硬件设计来说,常采用自动方式与手动方式相结合的校验方式。不同起点和二次收敛点决定不同的校验方法:形式验证、模块检查、功能与时序校验、测试平台,其中,构建测试平台,以功能验证和时序验证为目的,以形式验证的等价验证为评估标准,是设计验证最常用的主要方法和实施标准。等价验证等价验证等价验
4、证是形式验证过程之一,其验证起点和验证输出在逻辑上是等价的,验证过程中发生的RTL网表变换,不改变网表的功能和时序。与门级仿真相比,等价验证更快速地发现RTL级抽象的问题所在。模块检查模块检查按设计要求生成的解释,结合RTL网表的模块检查结果,获得系统设计的断言,断言直接输出RTL代码的系统设计结果:被接受或者被否决,校验过程获得的被接受或者被否决集合称为模块检查校验标准。模块检查还不能实施并证明高级断言,仅适用于确定的、低级的寄存器级断言。校验重用校验重用校验重用以信任同级别的设计结果为基础,向他方提供可配置、可编程、可重用的校验设计,以利于他方在完全可能的配置环境和完全可能的应用环境下进行
5、设计校验,所有的可重用设计资源都满足可重用条款要求,而且完全可以向用户演示和再生。校验方法校验方法校验方法可分为三类:黑箱校验白箱校验灰箱校验黑箱校验方法是在没有任何系统结构知识、无法通过接口直接访问系统的内部状态条件下对校验模型的校验方法。常用于与系统设计实施规定无关的场合。校验方法校验方法白箱校验的对象是完全可观测、可控的,可直接访问系统的内部结构并实施各校验环节,可快速建立系统的状态方程,隔离系统的特定功能,可以方便地观察校验过程的输出和结果,并即时报告与期望行为的差异。灰箱校验的模型介于黑箱和白箱之间,对系统设计的观测和控制全部集中在系统的顶层接口。功能校验结构功能校验结构利用硬件描述
6、语言设计测试平台,与设计模块连接,向设计模块发送激励信号,接收设计模块的响应,报告功能不匹配情况。测试平台测试平台是一个按行为抽象进行代码封装的模块,其层次结构、语法规则、数据流及设计方法等方面,与系统各级抽象的建模方法相同,其目的是向设计模块输出激励信号,接收并处理设计模块的响应。例:全加器与功能校验测试平台测试平台测试平台/测试平台/ /设计模块/ timescale 1ns/1ns module Adder(sum,cout,a,b,cin); module test_bench; input a,b,cin; reg a,b,cin; output sum,cout; wire sum
7、,cout; assign sum = abcin; Adder dut1 (sum,cout,a,b,cin); assign cout = (a&b)|(a&cin)|(b&cin); initial endmodule begin a,b,cin=3b000; #10 a,b,cin=3b010; #10 a,b,cin=3b100; #10 a,b,cin=3b110; #10 a,b,cin=3b001; #10 a,b,cin=3b011; #10 a,b,cin=3b101; #10 a,b,cin=3b111; end /测试平台以文本形式输出功能校验信
8、息 initial begin $display( stime a b cin sum cout); $monitor($stime, a, b, cin,sum,cout); end endmodule测试平台的功能校验以文本形式输出结果如下,stime为仿真时间:# stime a b cin sum cout# 0 0 0 0 0 0# 10 0 1 0 1 0# 20 1 0 0 1 0# 30 1 1 0 0 1# 40 0 0 1 1 0# 50 0 1 1 0 1# 60 1 0 1 0 1# 70 1 1 1 1 1代码封装代码封装封装是结构化设计原则的应用隐藏对象的属性,仅公
9、开接口使用户在访问模块的过程中不必了解模块内部的结构和细节,仅通过接口和特定的访问权限即可访问模块。代码封装代码封装例: integer i; always begin for(i=0;i0;i=i-1)begin /(2) end end代码封装代码封装例: always begin : Block1 interger i; /(1) for(i=0;i0;i=i-1)begin end end数据抽象数据抽象(1)宏定义define符号定义数据。define K 4.016(2)参数定义parameterparameter K=4.016(3)实数变换系统任务$realtobits和$bi
10、tstoreal数据抽象数据抽象module Transmitter (T_buffer); output T_buffer; real Internal_bus; wire 63:0 T_buffer = $realtobits(Internal_bus);endmodulemodule Receiver (R_buffer); input R_buffer; wire 64:1R _buffer; real Internal_bus; initial assign Internal_bus = $bitstoreal(R_buffer);endmodule数据抽象数据抽象记录模块创建一个R
11、M记录模块:module RM; reg 7:0 x; reg 15:0 y; reg 2:0 z; reg u; reg 15:0 v; reg 7:0 w 0:47;endmodule数据抽象数据抽象在测试平台模块中引用记录模块:module testbench; RM(); /引用记录 initial begin: test_procedure integer i; cell.x = 0; /(1),模块多级访问 for (i = 0; i 48; i = i + 1) begin cell.wi = 8hFF; end endendmodule数据抽象数据抽象记录文件创建一个testb
12、ench.h记录文件: timescale 1ns/1nsreg a,b,cin; wire sum,cout;parameter K=1.45;define UART_Buffer 31:0define SPI_Buffer 1023:0define R 7:0define G 7:0define B 7:0数据抽象数据抽象在测试平台模块中,直接引用testbench.h记录文件:module test_bench;include testbench.hreg UART_Buffer UART1_Buffer; /(1)reg UART_Buffer UART2_Buffer; /(2)in
13、itial begin if(UART1_Buffer != UART2_Buffer) . end.endmodule语句(1)和(2)分别等价于: reg 31:0 UART1_Buffer; reg 31:0 UART2_Buffer;数据抽象数据抽象系统任务$readmemb和$readmemh$readmemb ( file_name , memory_name , start_addr , finish_addr ) ;$readmemh ( file_name , memory_name , start_addr , finish_addr ) ;例: reg 7:0 mem0:
14、255; initial $readmemb(mem.data, mem); initial $readmemh(mem.data, mem, 16); initial $readmemh(mem.data, mem, 128, 1); 竞争竞争是一个状态变化输入导致两个或多个不可预测的状态变化输出的过程,须避免或消除竞争条件,以消除竞争。两种竞争:读写竞争和初始化竞争。读写竞争读写竞争是指模块内两个或两个以上的initial语句块或always语句块同时对一个变量进行读写操作;竞争条件中,语句块之间的关系是并行执行,因此输出无法预知的结果。读写竞争读写竞争例:module RW_race(c
15、lk); input clk; integer count; always (posedge clk) begin count = count + 1; /(1) end always (posedge clk) begin $write(Count is equal to %0dn, count); /(2) endendmodulemodule RW _race(clk); input clk; integer count; always (posedge clk) begin count = count + 1; end always (posedge clk) begin $write
16、(Count is equal to %0dn, count); endendmodule读写竞争读写竞争在同一时刻对非阻塞式赋值语句的变量赋不同的逻辑值,将产生竞争条件。例:module events; reg strobe; always (strobe) begin $write(Stobe is %bn, strobe); end initial begin strobe = 1b0; strobe = #10 1b1; /(1) strobe Z) = 7; (B = Z) = 7; (C = Z) = 6; (D = Z) = 6; endspecify and G1(w1,A,B
17、); /例化门级原语 and G2(w2,C,D); xor G3(Z,w1,w2); endmodule 指定块的模块路径延时由两部分组成:模块路径描述和路径延时赋值。 模块路径分为简单路径、边沿敏感路径、状态相关路径,路径源端必须是连接到模块的输入端口或双向端口的网络类型端口,路径目的端必须是连接到模块输出端口或双向端口的网络型或变量型端口,而且在一个模块内,路径目的端只有一个驱动源。例如,上述模块SBM中,路径源端为A、B、C、D,路径目的端是Z,共有四条简单路径:A至Z路径、B至Z路径、C至Z路径、D至Z路径。简单路径延时简单路径延时简单路径申明有全连接描述和并行连接描述两种形式,描述
18、路径源端和路径目的端之间的连接关系: 全连接描述: 路径源端 * 路径目的端 并行连接描述:路径源端 = 路径目的端简单路径延时简单路径延时例:利用简单路径的并行连接形式指定模块路径延时specify specparam t_rise = 150, t_fall = 200; specparam t_setup = 70; (clk = q) = (t_rise, t_fall); /模块路径描述和路径延时赋值 $setup(d, posedge clk, t_setup);endspecify边沿敏感路径延时边沿敏感路径延时是指路径源端是边沿敏感传输的模块路径,用于指定路径源端在边沿信号事件
19、到来时,输入至输出端口之间的延时时间。采用全连接符号“*”或并行连接符号“=”,结合关键词posedge或negedge指定正极性边沿或负极性边沿,描述模块路径。还包括路径传输数据表达式和输出端极性指定;数据流表达式与数据和事件在模块路径中的传输无关;输出端极性以“+”或“-”指定数据在传输路径上是否允许可逆传输。边沿敏感路径延时边沿敏感路径延时例: (posedge clk = (out + : in) = (10,8); (negedge clk = (out - : in) = (10,8); (clk = (out : in) = (10,8); 状态相关路径延时状态相关路径延时状态相
20、关路径延时指满足条表达式的条件下,指定路径源端信号和路径目的端信号在传输路径的延时。例:module Half_adder(Z,A,B); input A,B; output Z; xor M1(Z,A,B); specify specparam t_rise_noninvert = 1, t_fall_noninvert =2; specparam t_rise_invert = 2, t_fall_invert = 3; if(A=1) (B =Z) = (t_rise_invert, t_fall_invert); if(B=1) (A =Z) = (t_rise_invert, t_f
21、all_invert); if(A!=1) (B =Z) = (t_rise_noninvert, t_fall_noninvert); if(B1=1) (A =Z) = (t_rise_noninvert, t_fall_noninvert); endspecifyendmodule状态相关路径延时状态相关路径延时Verilog HDL 规定19种可用于条件表达式的操作符操作符操作描述操作符操作描述位非运算&规约与运算&位与运算|规约或运算|位或运算规约异或运算位异或运算&规约与非运算位同或运算|规约或非运算=逻辑相等规约同或运算!=逻辑不等连接&与逻辑复制
22、|或逻辑?:条件!非逻辑状态相关路径延时状态相关路径延时例:1)if(A=1) (B =Z) = (t_rise_invert, t_fall_invert); if(C,D!=2b10) (C,D * Z)=11; (A,B,C * Z1,Z2) = 5; 2)specify ( posedge clk = ( q0 : data ) ) = (10, 5); ( negedge clk = ( q0 : data ) ) = (20, 12); if (reset=1) ( posedge clk = ( q0 : data ) ) = (15, 8); if (!reset &
23、cntrl) ( posedge clk = ( q0 : data ) ) = (6, 2); endspecify状态相关路径延时状态相关路径延时当条件表达式的所有条件为假,则采用ifnone表达相关路径延时的默认条件,但不能与条件表达式的任意条件有交集。例:if (a) (b = out) = (2,2); if (b) (a = out) = (2,2); ifnone (a = out) = (1,1); (a = out) = (1,1); 语句(1)的条件集合与语句(2)条件的条件集合有交集,需按照设计需要删除其一。模块路径的极性模块路径的极性模块路径的极性指是否允许信号从传输路
24、径源端至目的端的反向传输,极性描述与数据和事件的实际传输方向无关(由模块的内部逻辑决定),分为三种极性:未知极性、正极性和负极性。模块路径的极性模块路径的极性默认情况下,模块路径为未知极性:传输路径源端的上升沿传输可能在目的端获得上升沿、下降沿或无传输结果;传输路径源端的下降沿传输可能在目的端获得上升沿、下降沿或无传输结果。指定为全连接或并行连接的简单路径,无极性操作符“+”或“-”的情况下,模块路径的极性默认为未知极性。例:(X = Q) = t_s_to_d ; (A = Q) = t_d_to_s ;模块路径的极性模块路径的极性模块路径指定为正极性时,传输路径源端的上升沿传输可能在目的端
25、获得上升沿或无传输结果;传输路径源端的下降沿传输可能在目的端获得下降沿或无传输结果。指定为全连接或并行连接的简单路径,正极性操作符“+”或“-”置于路径类型申明的之前。例:(X += Q) = t_s_to_d ; (A + = Q) = t_d_to_s ;模块路径的极性模块路径的极性模块路径指定为负极性时,传输路径源端的上升沿传输可能在目的端获得下降沿或无传输结果;传输路径源端的下降沿传输可能在目的端获得上升沿或无传输结果。指定为全连接或并行连接的简单路径,正极性操作符“+”或“-”置于路径类型申明的之前。例:(X -= Q) = t_s_to_d ; (A - = Q) = t_d_to
26、_s ;时序检查时序检查时序检查利用指定块内的时序检查任务,检查系统设计的关键事件的时序是否满足约束条件。时序检查任务分为两组,一组按照固定时间窗口条件检查时序:$setup $hold $setuphold $recovery $removal $recrem另一组按照两个事件的时间差检查时钟和控制信号:$skew $timeskew $fullskew $width $period $nochange固定时间窗口检查固定时间窗口检查固定时间窗口检查任务有两个信号:参考事件信号和数据事件信号,以一个信号定义时间窗口,检查并报告时间窗口内另一个信号的传输时间。建立时间检查$setup用于检查以
27、边沿触发原语的信号在时钟沿到来之前、数据必须处于稳态的最小时间;保持时间检查$hold用于检查以边沿触发原语的信号在时钟沿到来之后、数据必须保持稳态的最小时间。固定时间窗口检查固定时间窗口检查建立时间检查有四个参数,基本形式如下: $setup(reference_event,data_event,limit,notifier);若参考事件时间T reference_event与数据事件时间T data_event之差小于冲突限制,即: (T reference_event - Tdata_event) limit则由可选参数notifier输出冲突报告信息。notifier是模块中申明的寄存
28、器类型的形式参数,当时序冲突发生时,notifier的值发生跳变。冲突发生之前notifier的值冲突发生之后notifier的值x00110zz固定时间窗口检查固定时间窗口检查例:设数据事件为数据信号data,参考事件为上升沿时钟信号clk,建立时间检查任务$setup,设定时间限制范围为10个时间单位,时序冲突报告寄存器notify_reg保存冲突信息: specify $setup (data, posedge clk, 10, notify_reg); endspecify固定时间窗口检查固定时间窗口检查保持时间检查任务$hold的limit定义为: (T data_event - T
29、 reference_event) limit则报告冲突。$skew(reference_event,data_event,limit,notifier);参考事件申明为边沿触发类型(图中A点,以上升沿触发为例),数据事件也设置为边沿触发类型(图中C点,以下降沿触发为例),A与B之间是偏斜限制时间窗。在时间窗内数据事件的C点,$skew不发出冲突报告,而D、E、F点的数据事件都不满足时间窗限制范围,因此在D、E、F点$skew发出时间偏斜冲突报告信息。时钟和控制信号时序检查时钟和控制信号时序检查例:设参考事件为上升沿时钟CLK,数据事件为下降沿信号Data,偏斜限制为50个时间单位,检查报告为
30、skew_notifier: specify $skew(posedge CLK, negedge Data, 50, skew_notifier); endspecify时钟和控制信号时序检查时钟和控制信号时序检查$timeskew是$skew任务的扩展,其形式如下: $timeskew(reference_event,data_event,limit,notifier,event_based_flag, remain_active_flag);$timeskew在$skew的基础上增加事件标志控制参数event_based_flag和事件标志保留参数remain_active_flag,时
31、间偏移检查结果与参数设置密切相关。时钟和控制信号时序检查时钟和控制信号时序检查禁止事件标志event_based_flag,禁止保留标志remain_active_flag; 此时, $timeskew在B点输出时间偏移冲突报告。B点之后不再报告冲突信息。使能事件标志event_based_flag,禁止保留标志remain_active_flag; 事件标志的作用域延伸至G点,C点在limit范围内,不发出冲突报告;D点超出limit范围,发出冲突报告;E、F点对应的区间没有激活参考事件,$timeskew处于休眠状态,因此也不发出冲突报告。禁止事件标志event_based_flag,使能
32、保留标志remain_active_flag; 在此条件下$timeskew被禁止。使能事件标志event_based_flag,使能保留标志remain_active_flag; 事件标志的作用域覆盖时间偏移检查区间,C点在limit范围内,不发出冲突报告;D点超出limit范围,发出冲突报告;E、F点对应的区间被保留标志设为激活区,再次激活参考事件AB,但超出limit范围,发出冲突报告。G点之后$timeskew一直处于激活状态,相当于$skew。时钟和控制信号时序检查时钟和控制信号时序检查例:设参考事件为上升沿时钟CLK,数据事件为下降沿信号Data,偏斜限制为50个时间单位,检查报告
33、为timeskew_notifier,事件标志为EFlag,激活标志为AFlag: specify $timeskew(posedge CLK, negedge Data, 50, timeskew_notifier, EFlag,AFlag); endspecify也可以利用协作操作符“&”将事件标志与参考事件协同表达: specify $timeskew(posedge CLK & EFlag, negedge Data, 50, timeskew_notifier,AFlag); endspecify时钟和控制信号时序检查时钟和控制信号时序检查$fullskew与$tim
34、eskew的用法类似,不同之处在于$fullskew将时间窗分为初始时间窗和激活时间窗,初始时间窗与$timeskew的AB段时间窗限制等价,之后以激活时间窗代替时间窗限制,按激活条件检查偏移时间。其形式如下: $fullskew(reference_event,data_event,limit1,limit2, notifier,event_based_flag,remain_active_flag);时钟和控制信号时序检查时钟和控制信号时序检查事件标志控制参数event_based_flag和事件标志保留参数remain_active_flag的组合产生三种检查方式:(1)禁止事件标志ev
35、ent_based_flag,禁止保留标志remain_active_flag。(2)使能事件标志event_based_flag,禁止保留标志remain_active_flag。(3)使能事件标志event_based_flag,使能保留标志remain_active_flag。时钟和控制信号时序检查时钟和控制信号时序检查例:设参考事件为上升沿时钟CLK,数据事件为下降沿信号Data,偏斜限制初始时间窗limit1为50个时间单位,激活时间窗limit2为70个时间单位,检查报告为fullskew_notifier,事件标志为EFlag,激活标志为AFlag: specify $fulls
36、kew(posedge CLK & EFlag, negedge Data, 50,70, fullskew_notifier,AFlag); endspecify时钟和控制信号时序检查时钟和控制信号时序检查脉冲宽度检查$width和周期检查$period分别检查信号的脉冲宽度和周期是否超出时间限制,若超出,则报告冲突信息。形式如下: $width(reference_event ,limit,threshold,notifier); $period (reference_event ,limit ,notifier);例:指定CLK信号的脉冲宽度限制limit_width为20个时间
37、单位,阀值门限limit_threshold设为4,周期限制limit_period为50个时间单位: specify specparam limit_width = 20; specparam limit_threshold= 4; specparam limit_period = 50; $width(posedge CLK, limit_width, limit_threshold,width_notifer); $period(posedge CLK, limit_period,period_notifier); endspecify时钟和控制信号时序检查时钟和控制信号时序检查数据变化
38、检查$nochange是以上升沿或下降沿的参考事件检查数据事件的数据变化是否超过起始点start_edge_offset和结束点end_edge_offset区间的限制范围,若超出限制,则报告冲突信息。其形式如下: $ nochange (reference_event ,data_event,start_edge_offset, end_ edge_ offset ,notifier);例:设参考事件clk的上升沿起点偏移时间为0,结束点偏移时间为0,考察数据事件Data的数据变化检查: $nochange( posedge clk, Data, 0, 0) ;边沿控制方式指定边沿控制方式指
39、定边沿控制方式指定是针对时序检查过程中,用于事件控制的逻辑0、1和x进行边沿传输方式的定义。其形式由关键词edge、方括号和边沿描述组成: edgeedge_descriptor边沿描述是0、1和x的六种组合,z当作x对待: 01 /从0至1的传输 0 x /从0至x的传输 10 /从1至0的传输 1x /从1至x的传输 x0 /从x至0的传输 x1 /从x至1的传输关键词posedge和negedge可用于某种边沿控制指定符,例:posedge rst与edge01,0 x,x1 rst等价 negedge rst与edge10, x0, 1x rst等价时序检查冲突报告的处理时序检查冲突报
40、告的处理不同层次的模块中,时序检查冲突报告以寄存器类型申明,按照设计流以x值输出冲突描述信息。例:带置位和清零端D触发器用户定义原语的时序检查和冲突报告处理。定义D触发器用户定义原语,指定时序检查参数和模块路径延时,分别检查D端的建立时间、保持时间,置位端SD和复位端RD的脉冲宽度、恢复时间,时钟端CLK的周期,将冲突报告notifier的输出纳入UDP的输入,在状态表中描述notifier的状态,当时序检查冲突发生、notifier跳变时,在UDP的状态表中Q输出端输出x值。module DFF(Q, Qn, CLK, D, SD, RD); output Q, Qn; input CLK,
41、 D, SD, RD; reg notifier; and (En, SD, RD); not (Qn, Z); buf (Q, Z); DFF_udp (Z, CLK, D, SD, RD, notifier); specify / 定义时序检查的指定参数 specparam t_setup = 10, t_hold = 1, t_period = 25, t_width_pulse = 10, t_recovery = 5;时序检查冲突报告的处理时序检查冲突报告的处理/ 定义模块路径延时参数的min:typ:max值 r 1 1 1 ? : ? : 1 ; specparam t_rise
42、 = 4:6:9 , t_fall = 5:8:11; p 1 ? 1 ? : 1 : 1 ; specparam t_rise_SR = 3:5:6 , t_fall_SR = 4:7:9; p 0 1 ? ? : 0 : 0 ; / 指定模块路径延时 n ? ? ? ? : ? : - ; (CLK * Q,Qn) = (t_rise, t_fall); ? * ? ? ? : ? : - ; (SD,RD * Q,Qn) = (t_rise_SR, t_fall_SR); ? ? 0 1 ? : ? : 1 ; / D端建立时间检查 ? ? * 1 ? : 1 : 1 ; $setup(
43、D, posedge CLK & En, t_setup, notifier); ? ? 1 0 ? : ? : 0 ; /D端保持时间检查 ? ? 1 * ? : 0 : 0 ; $hold(posedge CLK, D & En, t_hold, notifier); ? ? ? ? * : ? : x ; / CLK时钟周期检查 / 冲突报告notifier跳变,输出x值 $period(posedge CLK, t_period, notifier); endtable / SD和RD脉冲宽度检查 endprimitive $width(negedge SD, t_wi
44、dth_pulse, 0, notifier); $width(negedge RD, t_width_pulse, 0, notifier); / RD和SD恢复时间检查 $recovery(posedge SD, posedge CLK, t_recovery, notifier); $recovery(posedge RD, posedge CLK, t_recovery, notifier); endspecifyendmodule primitive DFF_udp(Q, CLK, D, SD, RD, notifier); /D触发器用户定义原语 output Q; reg Q;
45、input CLK, D, SD, RD, notifier; table /CLK D SD RD notifier : Qn : Qn+1 r 0 1 1 ? : ? : 0 ;标准延时格式文件与反向标注标准延时格式文件与反向标注标准延时格式文件(Standard Delay File,SDF)是一种标准格式文件,用于指定路径延时、指定参数、时序检查约束、互连延时的时序取值,也可以包含与时序仿真无关的附加信息和结构信息。反向标注反向标注EDA设计软件中的SDF反向标注工具将SDF文件的结构与Verilog时序仿真文件中相应的申明进行匹配;若匹配一致,则将SDF文件中匹配的时序值映射到Ver
46、ilog时序仿真文件中相应的指定路径延时、指定参数、时序约束值和互连延时,报告无法进行反向标注的警告信息,忽略与Verilog时序仿真文件无关的结构,该过程称为反向标注过程。反向标注反向标注SDF结构结构SDF时序取值以延时结构的形式出现,由一个或多个延时DELAY、时序检查TIMINGCHECK和标签项LABEL三种结构组成。DELAY包含指定路径的传输延时和互连延时,TIMINGCHECK包含时序检查约束取值,LABEL包含指定参数值。当反向标注延时结构没有指定互连延时,SDF反向标注工具搜索指定路径的端口名和匹配条件;当指定反向标注TIMINGCHECK结构时,SDF反向标注工具搜索相同
47、类型的端口名和匹配条件。SDF结构可反向标注的Verilog申明(IOPATH条件指定与无条件指定路径延时/脉冲范围(IOPATH(RETAIN条件指定与无条件指定路径延时/脉冲范围,可忽略保留项RETAIN(COND(IOPATH.条件指定路径延时/脉冲范围(COND(IOPATH(RETAIN.条件指定路径延时/脉冲范围,可忽略保留项RETAIN(CONDELSE(IOPATH(RETAIN.默认状态路径延时(DEVICE.默认状态路径延时,可忽略保留项RETAIN(DEVICEport_instance.若port_instance是模块例化,所有的指定路径映射到模块输出端;若未指定路径
48、,将所有原语的映射到模块输出端;若port_instance是模块例化输出,所有的指定路径映射到模块输出端。反向标注反向标注SDF结构结构例:设SDF文件的路径源端信号sel匹配Verilog的路径源端信号sel,SDF文件的路径目的端信号Z匹配Verilog的路径目的端信号Z,则SDF文件中1.3个时间单位的上升时间和1.7个时间单位的下降时间被映射到Verilog指定路径:SDF文件:(IOPATH sel Z (1.3) (1.7)Verilog指定路径:(sel = Z) = 0;对于SDF文件中两个端口的条件IOPATH延时,仅标注Verilog指定路径中相同条件的对应端口,例:SD
49、F文件中1.3个时间单位的上升时间和1.7个时间单位的下降时间的延时结构:SDF文件:(COND mode (IOPATH sel Z (1.3) (1.7)Verilog指定路径:if (!mode) (sel = Z) = 0; /(1)if (mode) (sel = Z) = 0; /(2)反向标注反向标注SDF结构结构SDF时序检查结构与Verilog时序检查标注的映射关系。其中v1和v2分别表示时序检查的第一个值和第二个值,x表示不标注。SDF时序检查结构可标注的Verilog时序检查结构(SETUPv1.$setup(v1),$setuphold(v1,x)(HOLDv1.$ho
50、ld(v1),$setuphold(x,v1)(SETUPHOLDv1v2.$setup(v1),$hold(v2),$setuphold(v1,v2)(RECOVERYv1.$recovery(v1),$recrem(v1,x)(REMOVALv1.$removal(v1),$recrem(x,v1)(RECREMv1v2.$recovery(v1),$removal(v2),$recrem(v1,v2)(SKEWv1.$skew(v1)(TIMESKEWv1.$timeskew(v1)(FULLSKEWv1v2.$fullskew(v1,v2)(WIDTHv1.$width(v1,x)(P
51、ERIODv1.$period(v1)(NOCHANGEv1v2.$nochange(v1,v2)反向标注反向标注SDF结构结构时序检查的参考信号和数据信号可使用逻辑条件表达式或指定边沿敏感类型,未指定逻辑条件表达式或边沿敏感类型的SDF时序检查将匹配所有Verilog时序检查的响应信号,与匹配条件是否满足无关。例:下列SDF结构仅指定clk信号的条件表达式,Verilog时序检查结构中与指定clk信号之外的信号都将被屏蔽:SDF文件: (SETUPHOLD data clk (3) (4)Verilog时序检查结构: $setuphold (posedge clk & mode, d
52、ata, 1, 1, ntfr); /(1),被标注 $setuphold (negedge clk & !mode, data, 1, 1, ntfr); /(2),被标注反向标注反向标注SDF结构结构当附加条件表达式或边沿敏感信号时,仅符合条件的结构被标注.例:SDF文件: (SETUPHOLD data (negedge clk ) (3) (4)Verilog时序检查结构: $setuphold (posedge clk & mode, data, 1, 1, ntfr); /(1),未标注 $setuphold (negedge clk & !mode, da
53、ta, 1, 1, ntfr); /(2),被标注语句(1)的clk信号为上升沿,不满足映射条件,未进行反向标注;语句(2)的clk信号为下降沿,满足SDF文件结构的映射条件,被反向标注。反向标注反向标注SDF结构结构SDF的LABEL结构标注用于Verilog的指定参数,Verilog文件中包含一个或多个指定参数的任何表达式都被满足条件的LABEL反向标注结构。例:下述SDF文件的LABEL结构标注高电平dhigh和dlow的值,标注结果是控制Verilog文件中clock模块的时钟周期和占空比:SDF文件: (LABEL (ABSOLUTE (dhigh 60) /高电平60个时间单位 (
54、dlow 40) /低电平40个时间单位Verilog文件: module clock(clk); output clk; reg clk; specparam dhigh=0, dlow=0; initial clk = 0; always begin #dhigh clk = 1; /clk保持60个时间单位之后跳变为高电平 #dlow clk = 0; /clk保持40个时间单位之后跳变为低电平 end; endmodule反向标注互连延时反向标注互连延时SDF互连延时采用互连结构INTERCONNECT、端口结构PORT或网络结构NETDELAY,表示模块与模块的输出端口或双向端口之间
55、信号的传输延时。INTERCONNECT结构包括信号源端、负载和延时时间,用于模块与模块之间一个网络或多个网络的反向标注,不能用于原语的端口之间。PORT和NETDELAY结构仅包括负载和延时时间。SDF结构Verilog反向标注结构(PORT互连延时(NETDELAY互连延时(INTERCONNECT互连延时反向标注互连延时反向标注互连延时反向标注PORT结构时,SDF反向标注工具搜索所有存在的端口,对源端口至目的端口的所有网络进行互连延时的反向标注。反向标注NETDELAY结构时,SDF反向标注工具检查反向标注的对象(标注端口还是标注网络)。若反向标注网络,将互连延时标注到连接该网络的所有
56、端口;若反向标注端口,将互连延时标注到该端口;若标注对象不止一个网络或端口,则标注与网络连接的所有端口。对层次化结构端口的反向标注将影响所有连接到低层或高层端口的延时,反向标注的方向决定延时值。此外,当反向标注的同一端口对应不同层次级别的端口时,允许分层次交叉进行反向标注。例:(INTERCONNECT i14/u5/out i53/selmode (1.43) (2.17) ) /(1) (INTERCONNECT i14/u5/out i53/u21/in (1.58) (1.92) ) /(2)语句(1)反向标注所有i53/selmode二级层次结构内的端口,语句(2)反向标注所有i53/u21/in三级层次结构内的端口。修改与覆盖修改与覆盖SDF反向标注是一个按SDF文件进行顺序标注的有序过程,对SDF文件的结构进行修改或覆盖,可以控制SDF文件的反向标注结果。例:下述SD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动态显像定量分析软件应用
- 前沿药物研发对损伤治疗的潜在影响
- 制剂处方辅料用量优化与计算方法
- 中医情志护理的未来发展
- 创伤评分可视化与急诊医学科研能力提升
- 创伤快速评分可视化工具的基层化改造方案
- 新生儿心肺复苏护理培训
- 切口感染护理质量持续改进
- 2026年中国重组激素行业市场规模及投资前景预测分析报告
- 内分泌科护理人文关怀
- 2025年邮政四级副干部竞聘笔试考试题及答案
- 农用地膜技术标准培训
- 2025-2026学年北京市海淀区九年级(上)期末数学试卷(含部分答案)
- 2026年湖南高速铁路职业技术学院单招职业技能考试题库及答案1套
- 2026春三年级下册第一单元1《古诗三首》 教学教学课件
- 新能源汽车充电桩运营合作合同协议
- 人间充质干细胞来源的小细胞外囊泡
- 销售润滑油合同范本
- 黄原胶的课件
- 城镇燃气经营安全重大隐患判定标准试题(有答案)
- 2026年苏州卫生职业技术学院单招职业技能测试必刷测试卷及答案1套
评论
0/150
提交评论