EDA设计技术教学课件第9章设计校验_第1页
EDA设计技术教学课件第9章设计校验_第2页
EDA设计技术教学课件第9章设计校验_第3页
EDA设计技术教学课件第9章设计校验_第4页
EDA设计技术教学课件第9章设计校验_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

EDA设计技术教学课件第9章设计校验第一页,共86页。设计校验针对不同的校验对象和校验级别,采用合适的校验策略和校验方法,验证系统设计的功能和时序是否满足设计要求的过程。魁北克大桥于1907年8月29日倒塌第二页,共86页。未进行设计校验招致的严重后果魁北克大桥在设计过程中未执行设计校验,于1907年8月29日倒塌。第三页,共86页。为什么进行设计校验?系统设计的行为级描述和RTL级描述阶段,由于设计实践、不同硬件描述代码风格的差异等原因,导致综合的门级网表和设计模块之间与设计规定的功能不匹配。利用门级网表进行优化、布置、布线的过程中,需要结合所使用的逻辑器件,按照系统设计技术条件要求制定的时序约束条件,对系统模块和布线延时模型进行时序检查。第四页,共86页。设计校验分类功能校验

以等价验证为评估标准,利用硬件描述语言(也包括来自外部的数据文件或其他语言程序),遵循相应的设计规范、标准,设计测试平台,向目标系统创建预先确定的输入,获得目标系统的响应,以比较目标系统的功能是否满足设计要求。借助仿真工具实施各功能校验环节,又称之为前仿真或功能仿真。时序校验

将时序指令置入指定的系统模块中,校验设计系统在给定的时间限制范围内,关键事件的发生是否满足时序要求。时序约束条件验证过程一般安排在布线后对门级仿真平台上进行,称为时序校验或后仿真。第五页,共86页。校验标准校验标准是校验设计必须满足的规定的集合,包括标准规定、标准解释、校验起点、校验二次收敛点,要求在校验域内,自校验起点开始,经RTL代码(对于功能校验)或门级延时模型路径(对于时序校验)至二次收敛点、校验路径构成的闭域,校验结果必须是收敛的。第六页,共86页。校验方式有很多方式实现设计校验的二次收敛:手动、自动、Poka-Yoka式防呆看板、冗余等。对于硬件设计来说,常采用自动方式与手动方式相结合的校验方式。不同起点和二次收敛点决定不同的校验方法:形式验证、模块检查、功能与时序校验、测试平台,其中,构建测试平台,以功能验证和时序验证为目的,以形式验证的等价验证为评估标准,是设计验证最常用的主要方法和实施标准。第七页,共86页。等价验证等价验证是形式验证过程之一,其验证起点和验证输出在逻辑上是等价的,验证过程中发生的RTL网表变换,不改变网表的功能和时序。与门级仿真相比,等价验证更快速地发现RTL级抽象的问题所在。第八页,共86页。模块检查按设计要求生成的解释,结合RTL网表的模块检查结果,获得系统设计的断言,断言直接输出RTL代码的系统设计结果:被接受或者被否决,校验过程获得的被接受或者被否决集合称为模块检查校验标准。模块检查还不能实施并证明高级断言,仅适用于确定的、低级的寄存器级断言。第九页,共86页。校验重用校验重用以信任同级别的设计结果为基础,向他方提供可配置、可编程、可重用的校验设计,以利于他方在完全可能的配置环境和完全可能的应用环境下进行设计校验,所有的可重用设计资源都满足可重用条款要求,而且完全可以向用户演示和再生。第十页,共86页。校验方法校验方法可分为三类:黑箱校验白箱校验灰箱校验黑箱校验方法是在没有任何系统结构知识、无法通过接口直接访问系统的内部状态条件下对校验模型的校验方法。常用于与系统设计实施规定无关的场合。第十一页,共86页。校验方法白箱校验的对象是完全可观测、可控的,可直接访问系统的内部结构并实施各校验环节,可快速建立系统的状态方程,隔离系统的特定功能,可以方便地观察校验过程的输出和结果,并即时报告与期望行为的差异。灰箱校验的模型介于黑箱和白箱之间,对系统设计的观测和控制全部集中在系统的顶层接口。第十二页,共86页。功能校验结构利用硬件描述语言设计测试平台,与设计模块连接,向设计模块发送激励信号,接收设计模块的响应,报告功能不匹配情况。第十三页,共86页。测试平台是一个按行为抽象进行代码封装的模块,其层次结构、语法规则、数据流及设计方法等方面,与系统各级抽象的建模方法相同,其目的是向设计模块输出激励信号,接收并处理设计模块的响应。例:全加器与功能校验测试平台第十四页,共86页。测试平台///////////////////////////测试平台////////////////////////////////

////////////////////////设计模块/////////////////`timescale1ns/1nsmoduleAdder(sum,cout,a,b,cin);moduletest_bench;inputa,b,cin;

rega,b,cin;outputsum,cout;

wiresum,cout;assignsum=a^b^cin;Adderdut1(sum,cout,a,b,cin);assigncout=(a&b)|(a&cin)|(b&cin);initialendmodule

begin{a,b,cin}=3’b000;

#10{a,b,cin}=3'b010;

#10{a,b,cin}=3'b100;

#10{a,b,cin}=3'b110;

#10{a,b,cin}=3'b001;

#10{a,b,cin}=3'b011;#10{a,b,cin}=3'b101;#10{a,b,cin}=3'b111;end//测试平台以文本形式输出功能校验信息initialbegin$display("stimeabcinsumcout");$monitor($stime,,a,,b,,,cin,,,,sum,,,,,cout);endendmodule测试平台的功能校验以文本形式输出结果如下,stime为仿真时间:#stimeabcinsumcout#000000#1001010#2010010#3011001#4000110#5001101#6010101#7011111第十五页,共86页。代码封装封装是结构化设计原则的应用隐藏对象的属性,仅公开接口使用户在访问模块的过程中不必了解模块内部的结构和细节,仅通过接口和特定的访问权限即可访问模块。第十六页,共86页。代码封装例:integeri;alwaysbeginfor(i=0;i<10;i=i+1)begin//(1)…endendalwaysbeginfor(i=20;i>0;i=i-1)begin//(2)…endend第十七页,共86页。代码封装例:alwaysbegin:Block1intergeri;//(1)for(i=0;i<10;i=i+1)begin…end

end

always

begin:Block2

intergeri;//(2)

for(i=20;i>0;i=i-1)begin

end

end第十八页,共86页。数据抽象(1)宏定义`define符号定义数据。 `defineK4.016(2)参数定义parameter parameterK=4.016(3)实数变换系统任务$realtobits和$bitstoreal第十九页,共86页。数据抽象moduleTransmitter(T_buffer);outputT_buffer;realInternal_bus;wire[63:0]T_buffer=$realtobits(Internal_bus);endmodulemoduleReceiver(R_buffer);inputR_buffer;wire[64:1]R_buffer;realInternal_bus;initialassignInternal_bus=$bitstoreal(R_buffer);endmodule第二十页,共86页。数据抽象记录模块创建一个RM记录模块:moduleRM;reg[7:0]x;reg[15:0]y;reg[2:0]z;regu;reg[15:0]v;reg[7:0]w[0:47];endmodule第二十一页,共86页。数据抽象在测试平台模块中引用记录模块:moduletestbench;RM();//引用记录initialbegin:test_procedureintegeri;cell.x=0;//(1),模块多级访问for(i=0;i<48;i=i+1)begincell.w[i]=8'hFF;endendendmodule第二十二页,共86页。数据抽象记录文件创建一个testbench.h记录文件:

`timescale1ns/1nsrega,b,cin;wiresum,cout;parameterK=1.45;`defineUART_Buffer[31:0]`defineSPI_Buffer[1023:0]`defineR[7:0]`defineG[7:0]`defineB[7:0]第二十三页,共86页。数据抽象在测试平台模块中,直接引用testbench.h记录文件:moduletest_bench;`include"testbench.h"reg`UART_BufferUART1_Buffer;//(1)reg`UART_BufferUART2_Buffer;//(2)initialbeginif(UART1_Buffer!=UART2_Buffer)…..end…….endmodule语句(1)和(2)分别等价于:reg[31:0]UART1_Buffer;reg[31:0]UART2_Buffer;第二十四页,共86页。数据抽象系统任务$readmemb和$readmemh$readmemb("",memory_name[,start_addr[,finish_addr]]);$readmemh("",memory_name[,start_addr[,finish_addr]]);例:

reg[7:0]mem[0:255];initial$readmemb("mem.data",mem);initial$readmemh("mem.data",mem,16);initial$readmemh("mem.data",mem,128,1);第二十五页,共86页。竞争是一个状态变化输入导致两个或多个不可预测的状态变化输出的过程,须避免或消除竞争条件,以消除竞争。两种竞争:读写竞争和初始化竞争。第二十六页,共86页。读写竞争是指模块内两个或两个以上的initial语句块或always语句块同时对一个变量进行读写操作;竞争条件中,语句块之间的关系是并行执行,因此输出无法预知的结果。第二十七页,共86页。读写竞争例:moduleRW_race(clk);inputclk;integercount;always@(posedgeclk)begincount=count+1;//(1)endalways@(posedgeclk)begin$write("Countisequalto%0d\n",count);//(2)endendmodulemoduleRW_race(clk);inputclk;integercount;always@(posedgeclk)begincount<=count+1;endalways@(posedgeclk)begin$write("Countisequalto%0d\n",count);

endendmodule第二十八页,共86页。读写竞争在同一时刻对非阻塞式赋值语句的变量赋不同的逻辑值,将产生竞争条件。例:moduleevents;regstrobe;always@(strobe)begin$write("Stobeis%b\n",strobe);end

initialbeginstrobe=1'b0;strobe<=#101'b1;//(1)strobe<=#101'b0;//(2)endendmoduleinitialbeginstrobe=1'b0;strobe=#101'b1;//(1)strobe=#101'b0;//(2)end第二十九页,共86页。初始化竞争是指模块内两个或两个以上的initial语句块同时对一个变量进行赋值操作竞争条件中,各initial语句块之间的关系是并行执行,因此输出无法预知的结果。例:moduleInitial_race;integercount;wire[7:0]out;assignout=count+1;//(1),在0时刻读countinitialbegin

count=0;//(2),在0时刻对count初始化赋值,向count写初始值

$write("Out=%b\n",out);//(3)

endendmodule第三十页,共86页。初始化竞争moduleInitial_race;integercount;wire[7:0]out;

assign#2out=count+1;

//(1),增加2个时间单位的延时赋值

initialbegincount=0;//(2)#4$write("Out=%b\n",out);

//(3),增加4个时间单位的延时赋值endendmodule第三十一页,共86页。时序校验可选择使用三类延时模型:分布延时、块延时和引脚至引脚延时(即路径延时)。分布延时是对电路中每个独立的门级原语或用户定义原语进行延时赋值,在原语的输入变化时,按指定的延时值输出,可精确控制模块的延时。moduleDDM(Z,A,B,C,D);inputA,B,C,D;outputZ;wirew1,w2;

and#4G1(w1,A,B);//分布延时赋值and#3G2(w2,C,D);//分布延时赋值xor#3G3(Z,w1,w2);//分布延时赋值endmodule第三十二页,共86页。时序校验块延时是将整个模块的延时赋值集中在模块内某一个原语上,一般对模块内最后一个原语进行延时赋值。moduleDUM(Z,A,B,C,D);inputA,B,C,D;outputZ;wirew1,w2;

andG1(w1,A,B);andG2(w2,C,D);xor#10G3(Z,w1,w2);//块延时赋值endmodule第三十三页,共86页。时序校验路径延时可由标准数字逻辑集成电路的说明书或通过仿真获得,是最精确、最容易实现的延时控制方式,只需要模块的输入输出口之间的延时规定即可,不必关心模块的内部结构。第三十四页,共86页。路径延时关键字specify和endspecify例:moduleSBM(Z,A,B,C,D);inputA,B,C,D;outputZ;wirew1,w2;specify//路径延时语句的指定块(A=>Z)=7;(B=>Z)=7;(C=>Z)=6;(D=>Z)=6;

endspecify

andG1(w1,A,B);//例化门级原语andG2(w2,C,D);xorG3(Z,w1,w2);endmodule

指定块的模块路径延时由两部分组成:模块路径描述和路径延时赋值。

模块路径分为简单路径、边沿敏感路径、状态相关路径,路径源端必须是连接到模块的输入端口或双向端口的网络类型端口,路径目的端必须是连接到模块输出端口或双向端口的网络型或变量型端口,而且在一个模块内,路径目的端只有一个驱动源。例如,上述模块SBM中,路径源端为A、B、C、D,路径目的端是Z,共有四条简单路径:A至Z路径、B至Z路径、C至Z路径、D至Z路径。第三十五页,共86页。简单路径延时简单路径申明有全连接描述和并行连接描述两种形式,描述路径源端和路径目的端之间的连接关系:

全连接描述:

路径源端*>路径目的端

并行连接描述:路径源端=>路径目的端第三十六页,共86页。简单路径延时例:利用简单路径的并行连接形式指定模块路径延时specifyspecparamt_rise=150,t_fall=200;specparamt_setup=70;(clk=>q)=(t_rise,t_fall);//模块路径描述和路径延时赋值$setup(d,posedgeclk,t_setup);endspecify第三十七页,共86页。边沿敏感路径延时是指路径源端是边沿敏感传输的模块路径,用于指定路径源端在边沿信号事件到来时,输入至输出端口之间的延时时间。采用全连接符号“*>”或并行连接符号“=>”,结合关键词posedge或negedge指定正极性边沿或负极性边沿,描述模块路径。还包括路径传输数据表达式和输出端极性指定;数据流表达式与数据和事件在模块路径中的传输无关;输出端极性以“+”或“-”指定数据在传输路径上是否允许可逆传输。第三十八页,共86页。边沿敏感路径延时例:(posedgeclk=>(out+:in))=(10,8);

(negedgeclk=>(out-:in))=(10,8);

(clk=>(out:in))=(10,8);第三十九页,共86页。状态相关路径延时状态相关路径延时指满足条表达式的条件下,指定路径源端信号和路径目的端信号在传输路径的延时。例:moduleHalf_adder(Z,A,B);inputA,B;outputZ;xorM1(Z,A,B);specifyspecparamt_rise_noninvert=1,t_fall_noninvert=2;specparamt_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_fall_invert);if(A!=1)(B=>Z)=(t_rise_noninvert,t_fall_noninvert);if(B1=1)(A=>Z)=(t_rise_noninvert,t_fall_noninvert);

endspecifyendmodule第四十页,共86页。状态相关路径延时VerilogHDL规定19种可用于条件表达式的操作符操作符操作描述

操作符操作描述~位非运算&规约与运算&位与运算|规约或运算|位或运算^规约异或运算^位异或运算~&规约与非运算^~~^位同或运算~|规约或非运算=逻辑相等^~~^规约同或运算!=逻辑不等{}连接&&与逻辑{{}}复制||或逻辑?:条件!非逻辑

第四十一页,共86页。状态相关路径延时例:1)if(A==1)(B=>Z)=(t_rise_invert,t_fall_invert);if({C,D}!=2’b10)(C,D*>Z)=11;

(A,B,C*>Z1,Z2)=5;2)specify

(posedgeclk=>(q[0]:data))=(10,5);

(negedgeclk=>(q[0]:data))=(20,12);

if(reset==1)

(posedgeclk=>(q[0]:data))=(15,8);if(!reset&&cntrl)

(posedgeclk=>(q[0]:data))=(6,2);endspecify第四十二页,共86页。状态相关路径延时当条件表达式的所有条件为假,则采用ifnone表达相关路径延时的默认条件,但不能与条件表达式的任意条件有交集。例:if(a)(b=>out)=(2,2);if(b)(a=>out)=(2,2);ifnone(a=>out)=(1,1);(a=>out)=(1,1);语句(1)的条件集合与语句(2)条件的条件集合有交集,需按照设计需要删除其一。第四十三页,共86页。模块路径的极性模块路径的极性指是否允许信号从传输路径源端至目的端的反向传输,极性描述与数据和事件的实际传输方向无关(由模块的内部逻辑决定),分为三种极性:未知极性、正极性和负极性。第四十四页,共86页。模块路径的极性默认情况下,模块路径为未知极性:传输路径源端的上升沿传输可能在目的端获得上升沿、下降沿或无传输结果;传输路径源端的下降沿传输可能在目的端获得上升沿、下降沿或无传输结果。指定为全连接或并行连接的简单路径,无极性操作符“+”或“-”的情况下,模块路径的极性默认为未知极性。例:(X=>Q)=t_s_to_d;(A=>Q)=t_d_to_s;第四十五页,共86页。模块路径的极性模块路径指定为正极性时,传输路径源端的上升沿传输可能在目的端获得上升沿或无传输结果;传输路径源端的下降沿传输可能在目的端获得下降沿或无传输结果。指定为全连接或并行连接的简单路径,正极性操作符“+”或“-”置于路径类型申明的之前。例:(X+=>Q)=t_s_to_d;(A+=>Q)=t_d_to_s;第四十六页,共86页。模块路径的极性模块路径指定为负极性时,传输路径源端的上升沿传输可能在目的端获得下降沿或无传输结果;传输路径源端的下降沿传输可能在目的端获得上升沿或无传输结果。指定为全连接或并行连接的简单路径,正极性操作符“+”或“-”置于路径类型申明的之前。例:(X-=>Q)=t_s_to_d;(A-=>Q)=t_d_to_s;第四十七页,共86页。时序检查时序检查利用指定块内的时序检查任务,检查系统设计的关键事件的时序是否满足约束条件。时序检查任务分为两组,一组按照固定时间窗口条件检查时序:$setup$hold$setuphold$recovery$removal$recrem另一组按照两个事件的时间差检查时钟和控制信号:$skew$timeskew$fullskew$width$period$nochange第四十八页,共86页。固定时间窗口检查固定时间窗口检查任务有两个信号:参考事件信号和数据事件信号,以一个信号定义时间窗口,检查并报告时间窗口内另一个信号的传输时间。建立时间检查$setup用于检查以边沿触发原语的信号在时钟沿到来之前、数据必须处于稳态的最小时间;保持时间检查$hold用于检查以边沿触发原语的信号在时钟沿到来之后、数据必须保持稳态的最小时间。第四十九页,共86页。固定时间窗口检查建立时间检查有四个参数,基本形式如下:

$setup(reference_event,data_event,limit,notifier);若参考事件时间Treference_event与数据事件时间Tdata_event之差小于冲突限制,即:(Treference_event-Tdata_event)<limit则由可选参数notifier输出冲突报告信息。notifier是模块中申明的寄存器类型的形式参数,当时序冲突发生时,notifier的值发生跳变。冲突发生之前notifier的值冲突发生之后notifier的值x00110zz第五十页,共86页。固定时间窗口检查例:设数据事件为数据信号data,参考事件为上升沿时钟信号clk,建立时间检查任务$setup,设定时间限制范围为10个时间单位,时序冲突报告寄存器notify_reg保存冲突信息:specify$setup(data,posedgeclk,10,notify_reg);

endspecify第五十一页,共86页。固定时间窗口检查保持时间检查任务$hold的limit定义为:(Tdata_event-Treference_event)<limit例:specify$hold(data,posedgeclk,10,notify_reg);endspecify第五十二页,共86页。固定时间窗口检查建立时间和保持时间检查任务$setuphold是$setup和$hold的合成任务,增加四个可选项参数:开始时间戳条件、检查时间记录条件、参考延时条件和数据延时条件,其形式如下:$setuphold(reference_event,data_event,setup_limit,hold_limit,notifier,timestamp_cond,timecheck_cond,delayed_reference,delayed_data);第五十三页,共86页。固定时间窗口检查例:设参考事件clk,数据事件data,建立时间限制tSU,保持时间限制tHLD,则建立时间和保持时间检查任务$setuphold为:$setuphold(posedgeclk,data,tSU,tHLD);等同于下述两个任务:$setup(data,posedgeclk,tSU);$hold(posedgeclk,data,tHLD);第五十四页,共86页。固定时间窗口检查数据恢复时间检查$recovery用于检查信号被清除、复位或置位操作后,稳态数据的恢复时间是否满足时间约束条件;数据移除时间检查$removal用于检查信号被清除、复位或置位操作后移除稳态数据的时间是否满足时间约束条件。第五十五页,共86页。固定时间窗口检查数据的恢复时间检查任务和移除时间检查任务各有四个参数,基本形式分别如下:$recovery(reference_event,data_event,limit,notifier);//恢复时间检查任务$removal(reference_event,data_event,limit,notifier);//移除时间检查任务例:$removal(posedgeclear,posedgeclk,tREM);//(1)

$recovery(posedgeclear,posedgeclk,tREC);//(2)

第五十六页,共86页。固定时间窗口检查恢复时间和移除时间检查任务$recrem是$removal和$recovery的合成任务,增加四个可选项参数:开始时间戳条件、检查时间记录条件、参考延时条件和数据延时条件,其形式如下:

$recrem(reference_event,data_event,setup_limit,hold_limit,notifier,timestamp_cond,timecheck_cond,delayed_reference,delayed_data);上例中语句(1)、(2)可以合成为$recrem任务:$recrem(posedgeclear,posedgeclk,tREC,tREM);第五十七页,共86页。时钟和控制信号时序检查时间偏斜检查$skew是以数据事件求信号的时间偏斜是否与时间偏斜限制相冲突,若(Tdata_event-Treference_event)>limit则报告冲突。$skew(reference_event,data_event,limit,notifier);参考事件申明为边沿触发类型(图中A点,以上升沿触发为例),数据事件也设置为边沿触发类型(图中C点,以下降沿触发为例),A与B之间是偏斜限制时间窗。在时间窗内数据事件的C点,$skew不发出冲突报告,而D、E、F点的数据事件都不满足时间窗限制范围,因此在D、E、F点$skew发出时间偏斜冲突报告信息。第五十八页,共86页。时钟和控制信号时序检查例:设参考事件为上升沿时钟CLK,数据事件为下降沿信号Data,偏斜限制为50个时间单位,检查报告为skew_notifier:specify$skew(posedgeCLK,negedgeData,50,

skew_notifier);endspecify第五十九页,共86页。时钟和控制信号时序检查$timeskew是$skew任务的扩展,其形式如下:$timeskew(reference_event,data_event,limit,notifier,event_based_flag,remain_active_flag);$timeskew在$skew的基础上增加事件标志控制参数event_based_flag和事件标志保留参数remain_active_flag,时间偏移检查结果与参数设置密切相关。第六十页,共86页。时钟和控制信号时序检查禁止事件标志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,使能保留标志remain_active_flag;

在此条件下$timeskew被禁止。使能事件标志event_based_flag,使能保留标志remain_active_flag;

事件标志的作用域覆盖时间偏移检查区间,C点在limit范围内,不发出冲突报告;D点超出limit范围,发出冲突报告;E、F点对应的区间被保留标志设为激活区,再次激活参考事件AB,但超出limit范围,发出冲突报告。G点之后$timeskew一直处于激活状态,相当于$skew。第六十一页,共86页。时钟和控制信号时序检查例:设参考事件为上升沿时钟CLK,数据事件为下降沿信号Data,偏斜限制为50个时间单位,检查报告为timeskew_notifier,事件标志为EFlag,激活标志为AFlag:specify$timeskew(posedgeCLK,negedgeData,50,

timeskew_notifier,EFlag,AFlag);

endspecify也可以利用协作操作符“&&&”将事件标志与参考事件协同表达:specify

$timeskew(posedgeCLK&&&EFlag,negedgeData,50,timeskew_notifier,AFlag);endspecify第六十二页,共86页。时钟和控制信号时序检查$fullskew与$timeskew的用法类似,不同之处在于$fullskew将时间窗分为初始时间窗和激活时间窗,初始时间窗与$timeskew的AB段时间窗限制等价,之后以激活时间窗代替时间窗限制,按激活条件检查偏移时间。其形式如下:$fullskew(reference_event,data_event,limit1,limit2,notifier,event_based_flag,remain_active_flag);第六十三页,共86页。时钟和控制信号时序检查事件标志控制参数event_based_flag和事件标志保留参数remain_active_flag的组合产生三种检查方式:(1)禁止事件标志event_based_flag,禁止保留标志remain_active_flag。(2)使能事件标志event_based_flag,禁止保留标志remain_active_flag。(3)使能事件标志event_based_flag,使能保留标志remain_active_flag。第六十四页,共86页。时钟和控制信号时序检查例:设参考事件为上升沿时钟CLK,数据事件为下降沿信号Data,偏斜限制初始时间窗limit1为50个时间单位,激活时间窗limit2为70个时间单位,检查报告为fullskew_notifier,事件标志为EFlag,激活标志为AFlag:specify$fullskew(posedgeCLK&&&EFlag,negedgeData,50,70,

fullskew_notifier,AFlag);

endspecify第六十五页,共86页。时钟和控制信号时序检查脉冲宽度检查$width和周期检查$period分别检查信号的脉冲宽度和周期是否超出时间限制,若超出,则报告冲突信息。形式如下:$width(reference_event,limit,threshold,notifier);$period(reference_event,limit,notifier);例:指定CLK信号的脉冲宽度限制limit_width为20个时间单位,阀值门限limit_threshold设为4,周期限制limit_period为50个时间单位:specifyspecparamlimit_width=20;specparamlimit_threshold=4;specparamlimit_period=50;$width(posedgeCLK,limit_width,limit_threshold,width_notifer);$period(posedgeCLK,limit_period,period_notifier);endspecify第六十六页,共86页。时钟和控制信号时序检查数据变化检查$nochange是以上升沿或下降沿的参考事件检查数据事件的数据变化是否超过起始点start_edge_offset和结束点end_edge_offset区间的限制范围,若超出限制,则报告冲突信息。其形式如下:$nochange(reference_event,data_event,start_edge_offset,end_edge_

offset,notifier);例:设参考事件clk的上升沿起点偏移时间为0,结束点偏移时间为0,考察数据事件Data的数据变化检查:$nochange(posedgeclk,Data,0,0);第六十七页,共86页。边沿控制方式指定边沿控制方式指定是针对时序检查过程中,用于事件控制的逻辑0、1和x进行边沿传输方式的定义。其形式由关键词edge、方括号和边沿描述组成:edge[edge_descriptor]边沿描述是0、1和x的六种组合,z当作x对待:01//从0至1的传输0x//从0至x的传输10//从1至0的传输1x//从1至x的传输x0//从x至0的传输x1//从x至1的传输关键词posedge和negedge可用于某种边沿控制指定符,例:posedgerst与edge[01,0x,x1]rst等价negedgerst与edge[10,x0,1x]rst等价第六十八页,共86页。时序检查冲突报告的处理不同层次的模块中,时序检查冲突报告以寄存器类型申明,按照设计流以x值输出冲突描述信息。例:带置位和清零端D触发器用户定义原语的时序检查和冲突报告处理。定义D触发器用户定义原语,指定时序检查参数和模块路径延时,分别检查D端的建立时间、保持时间,置位端SD和复位端RD的脉冲宽度、恢复时间,时钟端CLK的周期,将冲突报告notifier的输出纳入UDP的输入,在状态表中描述notifier的状态,当时序检查冲突发生、notifier跳变时,在UDP的状态表中Q输出端输出x值。moduleDFF(Q,Qn,CLK,D,SD,RD);outputQ,Qn;inputCLK,D,SD,RD;regnotifier;

and(En,SD,RD);not(Qn,Z);buf(Q,Z);DFF_udp(Z,CLK,D,SD,RD,notifier);

specify//定义时序检查的指定参数specparamt_setup=10,t_hold=1,t_period=25,t_width_pulse=10,t_recovery=5;第六十九页,共86页。时序检查冲突报告的处理//定义模块路径延时参数的min:typ:max值r111?:?:1;specparamt_rise=4:6:9,t_fall=5:8:11;p1?1?:1:1;specparamt_rise_SR=3:5:6,t_fall_SR=4:7:9;p01??:0:0;//指定模块路径延时n????:?:-;(CLK*>Q,Qn)=(t_rise,t_fall);?*???:?:-;(SD,RD*>Q,Qn)=(t_rise_SR,t_fall_SR);??01?:?:1;//D端建立时间检查??*1?:1:1;$setup(D,posedgeCLK&&&En,t_setup,notifier);??10?:?:0;//D端保持时间检查??1*?:0:0;$hold(posedgeCLK,D&&&En,t_hold,notifier);????*:?:x;//CLK时钟周期检查//冲突报告notifier跳变,输出x值$period(posedgeCLK,t_period,notifier);endtable//SD和RD脉冲宽度检查endprimitive$width(negedgeSD,t_width_pulse,0,notifier);$width(negedgeRD,t_width_pulse,0,notifier);//RD和SD恢复时间检查$recovery(posedgeSD,posedgeCLK,t_recovery,notifier);$recovery(posedgeRD,posedgeCLK,t_recovery,notifier);endspecifyendmodule

primitiveDFF_udp(Q,CLK,D,SD,RD,notifier);//D触发器用户定义原语outputQ;regQ;inputCLK,D,SD,RD,notifier;table//CLKDSDRDnotifier:Qn:Qn+1r011?:?:0;第七十页,共86页。标准延时格式文件与反向标注标准延时格式文件(StandardDelayFile,SDF)是一种标准格式文件,用于指定路径延时、指定参数、时序检查约束、互连延时的时序取值,也可以包含与时序仿真无关的附加信息和结构信息。第七十一页,共86页。反向标注EDA设计软件中的SDF反向标注工具将SDF文件的结构与Verilog时序仿真文件中相应的申明进行匹配;若匹配一致,则将SDF文件中匹配的时序值映射到Verilog时序仿真文件中相应的指定路径延时、指定参数、时序约束值和互连延时,报告无法进行反向标注的警告信息,忽略与Verilog时序仿真文件无关的结构,该过程称为反向标注过程。第七十二页,共86页。反向标注SDF结构SDF时序取值以延时结构的形式出现,由一个或多个延时DELAY、时序检查TIMINGCHECK和标签项LABEL三种结构组成。DELAY包含指定路径的传输延时和互连延时,TIMINGCHECK包含时序检查约束取值,LABEL包含指定参数值。当反向标注延时结构没有指定互连延时,SDF反向标注工具搜索指定路径的端口名和匹配条件;当指定反向标注TIMINGCHECK结构时,SDF反向标注工具搜索相同类型的端口名和匹配条件。SDF结构可反向标注的Verilog申明(IOPATH…条件指定与无条件指定路径延时/脉冲范围(IOPATH(RETAIN…条件指定与无条件指定路径延时/脉冲范围,可忽略保留项RETAIN(COND(IOPATH...条件指定路径延时/脉冲范围(COND(IOPATH(RETAIN...条件指定路径延时/脉冲范围,可忽略保留项RETAIN(CONDELSE(IOPATH(RETAIN...默认状态路径延时(DEVICE...默认状态路径延时,可忽略保留项RETAIN(DEVICEport_instance...若port_instance是模块例化,所有的指定路径映射到模块输出端;若未指定路径,将所有原语的映射到模块输出端;若port_instance是模块例化输出,所有的指定路径映射到模块输出端。第七十三页,共86页。反向标注SDF结构例:设SDF文件的路径源端信号sel匹配Verilog的路径源端信号sel,SDF文件的路径目的端信号Z匹配Verilog的路径目的端信号Z,则SDF文件中1.3个时间单位的上升时间和1.7个时间单位的下降时间被映射到Verilog指定路径:SDF文件: (IOPATHselZ(1.3)(1.7))Verilog指定路径: (sel=>Z)=0;对于SDF文件中两个端口的条件IOPATH延时,仅标注Verilog指定路径中相同条件的对应端口,例:SDF文件中1.3个时间单位的上升时间和1.7个时间单位的下降时间的延时结构:SDF文件: (CONDmode(IOPATHselZ(1.3)(1.7)))Verilog指定路径: if(!mode)(sel=>Z)=0;//(1) if(mode)(sel=>Z)=0;//(2)第七十四页,共86页。反向标注SDF结构SDF时序检查结构与Verilog时序检查标注的映射关系。其中v1和v2分别表示时序检查的第一个值和第二个值,x表示不标注。SDF时序检查结构可标注的Verilog时序检查结构(SETUPv1...$setup(v1),$setuphold(v1,x)(HOLDv1...$hold(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)(PERIODv1...$period(v1)(NOCHANGEv1v2...$nochange(v1,v2)第七十五页,共86页。反向标注SDF结构时序检查的参考信号和数据信号可使用逻辑条件表达式或指定边沿敏感类型,未指定逻辑条件表达式或边沿敏感类型的SDF时序检查将匹配所有Verilog时序检查的响应信号,与匹配条件是否满足无关。例:下列SDF结构仅指定clk信号的条件表达式,Verilog时序检查结构中与指定clk信号之外的信号都将被屏蔽:SDF文件:(SETUPHOLDdataclk(3)(4))Verilog时序检查结构:$setuphold(posedgeclk&&&mode,data,1,1,ntfr);//(1),被标注$setuphold(negedgeclk&&&!mode,data,1,1,ntfr);//(2),被标注第七十六页,共86页。反向标注SDF结构当附加条件表达式或边沿敏感信号时,仅符合条件的结构被标注.例:SDF文件:(SETUPHOLDdata(negedgeclk)(3)(4))Verilog时序检查结构:$setuphold(posedgeclk&&&mode,data,1,1,ntfr);//(1),未标注$setuphold(negedgeclk&&&!mode,data,1,1,ntfr);//(2),被标注语句(1)的clk信号为上升沿,不满足映射条件,未进行反向标注;语句(2)的clk信号为下降沿,满足SDF文件结构的映射条件,被反向标注。第七十七页,共86页。反向标注SDF结构SDF的LABEL结构标注用于Verilog的指定参数,Verilog文件中包含一个或多个指定参数的任何表达式都被满足条件的LABEL反向标注结构。例:下述SDF文件的LABEL结构标注高电平dhigh和dlow的值,标注结果是控制Verilog文件中clock模块的时钟周期和占空比:SDF文件:(LABEL(ABSOLUTE(dhigh60)//高电平60个时间单位(dlow40)))//低电平40个时间单位Verilog文件:moduleclock(clk);outputclk;regclk;specparamdhigh=0,dlow=0;initialclk=0;alwaysbegin#dhighclk=1;//clk保持60个时间单位之后跳变为高电平#dlowclk=0;//clk保持40个时间单位之后跳变为低电平end;endmodule第七十八页,共86页。反向标注互连延时SDF互连延时采用互连结构INTERCONNECT、端口结构PORT或网络结构NETDELAY,表示模块与模块的输出端口或双向端口之间信号的传输延时。INTERCONNECT结构包括信号源端、负载和延时时间,用于模块与模块之间一个网络或多个网络的反向标注,不能用于原语的端口之间。PORT和NETDELAY结构仅包括负载和延时时间。SDF结构Verilog反向标注结构(PORT…互连延时(NETDELAY互连延时(INTERCONNECT…互连延时第七十九页,共86页。反向标注互连延时反向标注PORT结构时,SDF反向标注工具搜索所有存在的端口,对源端口至目的端口的所有网络进行互连延时的反向标注。反向标注NETDELAY结构时,SDF反向标注工具检查反向标注的对象(标注端口还是标注网络)。若反向标注网络,将互连延时标注到连接该网络的所有端口;若反向标注端口,将互连延时标注到该端口;若标注对象不止一个网络或端口,则标注与网络连接的所有端口。对

温馨提示

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

评论

0/150

提交评论