数字系统设计1课件_第1页
数字系统设计1课件_第2页
数字系统设计1课件_第3页
数字系统设计1课件_第4页
数字系统设计1课件_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

PATHPULSE$Specparam可以在specifyblock中使用控制脉冲传播。脉冲在模块的输出上有两个比通过模块输出延迟短的预定跳变。缺省情况下,脉冲会被模拟器滤掉;这意味着只有长于延迟的跳变才会通过模块传输。这种效果叫做惯性延迟。PATHPULSE$可以改变缺省的行为方式。还可以用于指定促使输出出现x的脉冲宽度范围。PATHPULSE$Specparam可以在specify1路径脉冲控制使用PATHPULSE$控制模块路径脉冲保持。Syntax:PATHPULSE$=(reject_limit[,error_limit]);PATHPULSE$Input$Output=(reject_limit[,error_limit]);Limit=ConstantMinTypMaxExpression路径脉冲控制使用PATHPULSE$控制模块路径脉冲保持。2如果errorlimit没给出,则它与rejectlimit相同。短于rejectlimit的脉冲将不被传输到输出。比rejectlimit长但是比errorlimit短的脉冲会被当做1‘bX传输。比errorlimit长的脉冲则正常传输。PATHPULSE$input$outputspecparam优先于普通的同一模块中的PATHPULSE$specparam起作用。如果errorlimit没给出,则它与rejectli3specify(en=>q)=12;(data=>q)=10;(clr,pre*>q)=4;specparamPATHPULSE$=3,PATHPULSE$en$q=(2,9),PATHPULSE$clr$q=1;endspecify

数字系统设计1课件4定时校验任务定时检查用于校验设计的定时。定时检查完成以下功能:测定两个事件之间的共用时间。比较共用时间和指定的时间限制。如果共用时间超指定的时间限制报告时间冲突。(冲突被当作warning报告并不影响模块输出。)定时校验任务定时检查用于校验设计的定时。5Verilog执行的时间检查有:建立保持脉冲宽度时钟周期倾斜恢复Verilog执行的时间检查有:6定时校验任务$hold$nochange$period$recovery$setup$setuphold$skew$width定时校验任务$hold7$setup$setup(DataEvent,ReferenceEvent,Limit,[Notifier]);如果(time_of_reference_event-time_of_data_event)<limit则报告时序冲突(timingviolation);系统调用实例如下:$setup(data,posedgeclk,4);$setup$setup(DataEvent,Refer8$hold$hold(ReferenceEvent,DataEvent,Limit[,Notifier]);如果(time_of_data_event-time_of_reference_event)<limit,则报数据保持时间时序冲突。例如:$hold(posedgeclk,data,3);$hold$hold(ReferenceEvent,Da9$setuphold系统任务$setuphold是$setup和$hold任务的结合:$setuphold(ReferenceEvent,DataEvent,SetupLimit,HoldLimit[,Notifier]);实例:$setuphold(posedgeclk,data,4,3);$setuphold系统任务$setuphold是$setu10$width$width(ReferenceEvent,Limit[,Threshold[,Notifier]]);则检查信号的脉冲宽度限制,如果threshold<(time_of_data_event-time_of_reference_event)<limit则报告信号上出现脉冲宽度不够宽的时序错误。数据事件来源于基准事件:它是带有相反边沿的基准事件,例如:$width(negedgeCk,10,0.3);$width$width(ReferenceEvent,11$period$period(ReferenceEvent,Limit[,Notifier]);检查信号的周期,若(time_of_data_event-time_of_reference_event)<limit则报告时序错误。基准事件必须是边沿触发事件。数据事件来源于基准事件:它是带有相同边沿的基准事$period$period(ReferenceEvent12$skew$skew(ReferenceEvent,DataEvent,Limit[,Notifier]);检查信号之间(尤其是成组的时钟控制信号之间)的偏斜(skew)是否满足要求,若time_of_data_event-time_of_reference_event>limit则报告信号之间出现时序偏斜太大的错误。如果data_event的时间等于reference_event的时间,则不报出错。$skew$skew(ReferenceEvent,Da13$recovery$recovery(ReferenceEvent,DataEvent,Limit[,Notifier]);主要检查时序状态元件(触发器、锁存器、RAM和ROM等)的时钟信号与相应的置/复位信号之间的时序约束关系,若(time_of_data_event-time_of_reference_event)<limit则报告时序冲突。该系统任务的基准事件必须是边沿触发事件。该系统任务在执行定时校检前记录新基准事件时间;因此,如果数据事件和基准事件在相同的模拟时间同时发生,就报告时序冲突错误。$recovery$recovery(ReferenceE14$nochange$nochange(ReferenceEvent,DataEvent,StartEdgeOffset,EndEdgeOffset[,Notifier]);如果在指定的基准事件区间发生数据变化,就报告时序冲突错误。基准事件必须是边沿触发事件。例如:$nochange(negedgeClear,Perset,0,0);如果在Clear为低时Preset发生变化,将报告时序冲突错误。$nochange$nochange(ReferenceE15当发生时序冲突时,系统任务根据下列case语句改变自身的值来更新参数notifier。case(notifier)'bx:notifier='b0;'b0:notifier='b1;'b1:notifier='b0;'bz:notifier='bz;end当发生时序冲突时,系统任务根据下列case语句改变自身的值来16notifier参数可提供关于时序冲突或传播x到输出的时序冲突。使用参数notifier的例子如下:regNotifyDin;...$setuphold(negedgeClock,Din,tSETUP,tHOLD,NotifyDin);在这一实例中,NotifyDin是参数notifier。如果时序冲突发生,寄存参数NotifyDin根据前面对参数notifier描述的case语句改变其值。notifier参数可提供关于时序冲突或传播x到输出的时序冲17基准事件的跳变建立为定时校验建立基准时间。基准事件必须是与模块input或inout相关的。数据事件的跳变发起时间校验。数据事件必须是与模块input或inout相关的。当基准事件和数据事件同时发生无建立冲突报告。而保持冲突会被报告。对于$width脉冲短于threshold(如果给出)将不产生违规。基准事件的跳变建立为定时校验建立基准时间。基准事件必须是与模18以下时间校验基准事件必须是边沿触发状态:$width,$period,$recovery,$nochange。基准事件可以使用关键词edge,$recovery和$nochange除外,只能使用posedge和negedge。有条件定时校验(使用&&&符号)仅当条件为真(1、x、z)时发生作用。如果存在Notifier参量则必须是寄存器。当冲突发生时寄存器值发生变化。如果它的值是X则变为0,如果是0则变为1,如果是1则变为0。如果是Z则不变。以下时间校验基准事件必须是边沿触发状态:$width,$p19定时校验系统任务只能在specifyblock中调用。对于复杂条件,在specifyblock外描述条件,并且驱动一个用在specifyblock内的,条件信号。定时校验系统任务只能在specifyblock中调用。20regErr,FastClock;//NotifierregistersspecifyspecparamTsetup=3.5,Thold=1.5,Trecover=2.0,Tskew=2.0,Tpulse=10.5,Tspike=0.5;$hold(posedgeClk,Data,Thold);$nochange(posedgeClock,Data,0,0);$period(posedgeClk,20,FastClock);$recovery(posedgeClk,Rst,Trecover);$setup(Data,posedgeClk,Tsetup);$setuphold(posedgeClk&&&!Reset,Data,Tsetup,Thold,Err);$skew(posedgeClk1,posedgeClk2,Tskew);$width(negedgeClk,Tpulse,Tspike);endspecifyregErr,FastClock;//Notifie21模拟时间函数下列系统函数返回模拟时间。$time:返回64位的整型模拟时间给调用它的模块,返回值被四舍五入。$stime:返回32位的整型模拟时间。$realtime:向调用它的模块返回实型模拟时间。模拟时间函数下列系统函数返回模拟时间。22变换函数下列系统函数是数字类型变换的功能函数:$rtoi(real_value):通过截断小数值将实数变换为整数。$itor(integer_value):将整数变换为实数。$realtobits(real_value):将实数变换为64位的实数向量表示法(实数的IEEE745表示法)$bitstoreal(bit_value):将位模式变换为实数(与$realtobits相反)变换函数下列系统函数是数字类型变换的功能函数:23概率分布函数函数:$random[(seed)]根据种子变量(seed)的取值按32位的有符号整数形式返回一个随机数。种子变量(必须是寄存器、整数或时间寄存器类型)控制函数的返回值,即不同的种子将产生不同的随机数。如果没有指定种子,每次$random函数被调用时根据缺省种子产生随机数。概率分布函数函数:24integerSeed,Rnum;wireClk;initialSeed=12;always@(Clk)Rnum=$random(Seed);在Clk的每个边沿,$random被调用并返回一个32位有符号整型随机数。integerSeed,Rnum;25如果数字在取值范围内,下述模运算符可产生-10~+10之间的数字。Rnum

=$random(Seed)%11;下面是没有显式指定种子的例子。Rnum=$random;//种子变量是可选的。数字产生的顺序是伪随机排序的,即对于一个初始种子值产生相同的数字序列。如果数字在取值范围内,下述模运算符可产生-10~+10之间的26表达式:{random}%11产生0~10之间的一个随机数。并置操作符({})将$random函数返回的有符号整数变换为无符号数。表达式:27$dist_chi_square(Seed,DegreeOfFreedom);$dist_erlang(Seed,K_stage,Mean);爱尔兰$dist_exponential(Seed,Mean);指数$dist_normal(Seed,Mean,StandardDeviation);$dist_poisson(Seed,Mean);泊松$dist_t(Seed,DegreeOfFreedom);$dist_uniform(Seed,Start,End);统一所有参数都必须是整数$dist_chi_square(Seed,Degree28禁止语句禁止语句是过程性语句(因此它只能出现在always或initial语句块内)。禁止语句能够在任务或程序块没有执行完它的所有语句前终止其执行。它能够用于对硬件中断和全局复位的建模。其形式如下:disabletask_id;disableblock_id;禁止语句禁止语句是过程性语句(因此它只能出现在always或29终止命名的block(begin-end或fork-join)或任务。命名的blocktask可以用内部的disable语句终止自身。当任务被终止时,以下的内容不确定:任何outputs或inouts的值尚未生效的非阻塞性赋值事件持续赋值和force语句函数不能被终止。终止命名的block(begin-end或fork-joi30任务终止其自身不同于任务返回,输出不定。disable只有在终止自身的时候才可综合。任务终止其自身不同于任务返回,输出不定。31建议最好在任务定义中不要使用disable禁止语句,尤其是当任务具有一定的返回值时更是如此。这是因为当任务被禁止时,Verilog语言给出的输出和输入参数值是不确定的。如果必须在任务中这样做,一种比较稳妥的方法是:如果有,就在任务中禁止顺序程序块。建议最好在任务定义中不要使用disable禁止语句,尤其是当32taskExample;output[0:3]Count;begin:LOCAL_BLK//语句10。Count=10;disableExample;

//Count的值不确定。endendtasktaskExample;33taskExample;output[0:3]Count;begin:LOCAL_BLK//语句10。Count=10;disableLOCAL_BLK;//Count的值为10endendtasktaskExample;34命名事件Events可以用于描述通讯和行为建模中同步。SyntaxeventName,...;{Declaretheevent}->EventName;{Triggertheevent}命名事件Events可以用于描述通讯和行为建模中同步。35Event声明可以出现在以下位置:module-<HERE>-endmodulebegin:Label-<HERE>-endfork:Label-<HERE>-jointask-<HERE>-endtaskfunction-<HERE>-endfunctionEvent声明可以出现在以下位置:36命名事件moduleadd_mult(out,a,b);input[2:0]a,b;output[3:0]out;reg[3:0]out;eventadd,mult;//defineeventsalways@(aorb)if(a>b)->add;//triggereventelse->mult;//triggerevent命名事件moduleadd_mult(out,a,b);37always@(add)//respondtoaneventtriggerout=a+b;always@(mult)//respondtoaneventtriggerout=a*b;endmodulealways@(add)//respondtoan38Events没有值或者延迟,是简单的事件触发语句触发的事件,并且有边沿敏感定时控制检测。命名事件在测试和系统级建模时,同一module中两个always块之间或者层次化中不同module之间通讯是很有用的。不可综合。Events没有值或者延迟,是简单的事件触发语句触发的事件,39层次路径名VerilogHDl中的标识符具有一个唯一的层次路径名。层次路径名通过由句点(.)隔开的名字组成。新层次由以下定义:1)模块实例化2)任务定义3)函数定义4)命名程序块层次路径名VerilogHDl中的标识符具有一个唯一的层次40所有的nets,registers,events,parameters,tasks和functions都可以通过层次名从block外访问。数据不仅可读,而且可以通过路径名更新任何层次中的数据项的值。较低层模块能够通过使用模块实例名限定变量引用高层(称为向上引用)或低层(称为向下引用)模块。所有的nets,registers,events,pa41PATHPULSE$Specparam可以在specifyblock中使用控制脉冲传播。脉冲在模块的输出上有两个比通过模块输出延迟短的预定跳变。缺省情况下,脉冲会被模拟器滤掉;这意味着只有长于延迟的跳变才会通过模块传输。这种效果叫做惯性延迟。PATHPULSE$可以改变缺省的行为方式。还可以用于指定促使输出出现x的脉冲宽度范围。PATHPULSE$Specparam可以在specify42路径脉冲控制使用PATHPULSE$控制模块路径脉冲保持。Syntax:PATHPULSE$=(reject_limit[,error_limit]);PATHPULSE$Input$Output=(reject_limit[,error_limit]);Limit=ConstantMinTypMaxExpression路径脉冲控制使用PATHPULSE$控制模块路径脉冲保持。43如果errorlimit没给出,则它与rejectlimit相同。短于rejectlimit的脉冲将不被传输到输出。比rejectlimit长但是比errorlimit短的脉冲会被当做1‘bX传输。比errorlimit长的脉冲则正常传输。PATHPULSE$input$outputspecparam优先于普通的同一模块中的PATHPULSE$specparam起作用。如果errorlimit没给出,则它与rejectli44specify(en=>q)=12;(data=>q)=10;(clr,pre*>q)=4;specparamPATHPULSE$=3,PATHPULSE$en$q=(2,9),PATHPULSE$clr$q=1;endspecify

数字系统设计1课件45定时校验任务定时检查用于校验设计的定时。定时检查完成以下功能:测定两个事件之间的共用时间。比较共用时间和指定的时间限制。如果共用时间超指定的时间限制报告时间冲突。(冲突被当作warning报告并不影响模块输出。)定时校验任务定时检查用于校验设计的定时。46Verilog执行的时间检查有:建立保持脉冲宽度时钟周期倾斜恢复Verilog执行的时间检查有:47定时校验任务$hold$nochange$period$recovery$setup$setuphold$skew$width定时校验任务$hold48$setup$setup(DataEvent,ReferenceEvent,Limit,[Notifier]);如果(time_of_reference_event-time_of_data_event)<limit则报告时序冲突(timingviolation);系统调用实例如下:$setup(data,posedgeclk,4);$setup$setup(DataEvent,Refer49$hold$hold(ReferenceEvent,DataEvent,Limit[,Notifier]);如果(time_of_data_event-time_of_reference_event)<limit,则报数据保持时间时序冲突。例如:$hold(posedgeclk,data,3);$hold$hold(ReferenceEvent,Da50$setuphold系统任务$setuphold是$setup和$hold任务的结合:$setuphold(ReferenceEvent,DataEvent,SetupLimit,HoldLimit[,Notifier]);实例:$setuphold(posedgeclk,data,4,3);$setuphold系统任务$setuphold是$setu51$width$width(ReferenceEvent,Limit[,Threshold[,Notifier]]);则检查信号的脉冲宽度限制,如果threshold<(time_of_data_event-time_of_reference_event)<limit则报告信号上出现脉冲宽度不够宽的时序错误。数据事件来源于基准事件:它是带有相反边沿的基准事件,例如:$width(negedgeCk,10,0.3);$width$width(ReferenceEvent,52$period$period(ReferenceEvent,Limit[,Notifier]);检查信号的周期,若(time_of_data_event-time_of_reference_event)<limit则报告时序错误。基准事件必须是边沿触发事件。数据事件来源于基准事件:它是带有相同边沿的基准事$period$period(ReferenceEvent53$skew$skew(ReferenceEvent,DataEvent,Limit[,Notifier]);检查信号之间(尤其是成组的时钟控制信号之间)的偏斜(skew)是否满足要求,若time_of_data_event-time_of_reference_event>limit则报告信号之间出现时序偏斜太大的错误。如果data_event的时间等于reference_event的时间,则不报出错。$skew$skew(ReferenceEvent,Da54$recovery$recovery(ReferenceEvent,DataEvent,Limit[,Notifier]);主要检查时序状态元件(触发器、锁存器、RAM和ROM等)的时钟信号与相应的置/复位信号之间的时序约束关系,若(time_of_data_event-time_of_reference_event)<limit则报告时序冲突。该系统任务的基准事件必须是边沿触发事件。该系统任务在执行定时校检前记录新基准事件时间;因此,如果数据事件和基准事件在相同的模拟时间同时发生,就报告时序冲突错误。$recovery$recovery(ReferenceE55$nochange$nochange(ReferenceEvent,DataEvent,StartEdgeOffset,EndEdgeOffset[,Notifier]);如果在指定的基准事件区间发生数据变化,就报告时序冲突错误。基准事件必须是边沿触发事件。例如:$nochange(negedgeClear,Perset,0,0);如果在Clear为低时Preset发生变化,将报告时序冲突错误。$nochange$nochange(ReferenceE56当发生时序冲突时,系统任务根据下列case语句改变自身的值来更新参数notifier。case(notifier)'bx:notifier='b0;'b0:notifier='b1;'b1:notifier='b0;'bz:notifier='bz;end当发生时序冲突时,系统任务根据下列case语句改变自身的值来57notifier参数可提供关于时序冲突或传播x到输出的时序冲突。使用参数notifier的例子如下:regNotifyDin;...$setuphold(negedgeClock,Din,tSETUP,tHOLD,NotifyDin);在这一实例中,NotifyDin是参数notifier。如果时序冲突发生,寄存参数NotifyDin根据前面对参数notifier描述的case语句改变其值。notifier参数可提供关于时序冲突或传播x到输出的时序冲58基准事件的跳变建立为定时校验建立基准时间。基准事件必须是与模块input或inout相关的。数据事件的跳变发起时间校验。数据事件必须是与模块input或inout相关的。当基准事件和数据事件同时发生无建立冲突报告。而保持冲突会被报告。对于$width脉冲短于threshold(如果给出)将不产生违规。基准事件的跳变建立为定时校验建立基准时间。基准事件必须是与模59以下时间校验基准事件必须是边沿触发状态:$width,$period,$recovery,$nochange。基准事件可以使用关键词edge,$recovery和$nochange除外,只能使用posedge和negedge。有条件定时校验(使用&&&符号)仅当条件为真(1、x、z)时发生作用。如果存在Notifier参量则必须是寄存器。当冲突发生时寄存器值发生变化。如果它的值是X则变为0,如果是0则变为1,如果是1则变为0。如果是Z则不变。以下时间校验基准事件必须是边沿触发状态:$width,$p60定时校验系统任务只能在specifyblock中调用。对于复杂条件,在specifyblock外描述条件,并且驱动一个用在specifyblock内的,条件信号。定时校验系统任务只能在specifyblock中调用。61regErr,FastClock;//NotifierregistersspecifyspecparamTsetup=3.5,Thold=1.5,Trecover=2.0,Tskew=2.0,Tpulse=10.5,Tspike=0.5;$hold(posedgeClk,Data,Thold);$nochange(posedgeClock,Data,0,0);$period(posedgeClk,20,FastClock);$recovery(posedgeClk,Rst,Trecover);$setup(Data,posedgeClk,Tsetup);$setuphold(posedgeClk&&&!Reset,Data,Tsetup,Thold,Err);$skew(posedgeClk1,posedgeClk2,Tskew);$width(negedgeClk,Tpulse,Tspike);endspecifyregErr,FastClock;//Notifie62模拟时间函数下列系统函数返回模拟时间。$time:返回64位的整型模拟时间给调用它的模块,返回值被四舍五入。$stime:返回32位的整型模拟时间。$realtime:向调用它的模块返回实型模拟时间。模拟时间函数下列系统函数返回模拟时间。63变换函数下列系统函数是数字类型变换的功能函数:$rtoi(real_value):通过截断小数值将实数变换为整数。$itor(integer_value):将整数变换为实数。$realtobits(real_value):将实数变换为64位的实数向量表示法(实数的IEEE745表示法)$bitstoreal(bit_value):将位模式变换为实数(与$realtobits相反)变换函数下列系统函数是数字类型变换的功能函数:64概率分布函数函数:$random[(seed)]根据种子变量(seed)的取值按32位的有符号整数形式返回一个随机数。种子变量(必须是寄存器、整数或时间寄存器类型)控制函数的返回值,即不同的种子将产生不同的随机数。如果没有指定种子,每次$random函数被调用时根据缺省种子产生随机数。概率分布函数函数:65integerSeed,Rnum;wireClk;initialSeed=12;always@(Clk)Rnum=$random(Seed);在Clk的每个边沿,$random被调用并返回一个32位有符号整型随机数。integerSeed,Rnum;66如果数字在取值范围内,下述模运算符可产生-10~+10之间的数字。Rnum

=$random(Seed)%11;下面是没有显式指定种子的例子。Rnum=$random;//种子变量是可选的。数字产生的顺序是伪随机排序的,即对于一个初始种子值产生相同的数字序列。如果数字在取值范围内,下述模运算符可产生-10~+10之间的67表达式:{random}%11产生0~10之间的一个随机数。并置操作符({})将$random函数返回的有符号整数变换为无符号数。表达式:68$dist_chi_square(Seed,DegreeOfFreedom);$dist_erlang(Seed,K_stage,Mean);爱尔兰$dist_exponential(Seed,Mean);指数$dist_normal(Seed,Mean,StandardDeviation);$dist_poisson(Seed,Mean);泊松$dist_t(Seed,DegreeOfFreedom);$dist_uniform(Seed,Start,End);统一所有参数都必须是整数$dist_chi_square(Seed,Degree69禁止语句禁止语句是过程性语句(因此它只能出现在always或initial语句块内)。禁止语句能够在任务或程序块没有执行完它的所有语句前终止其执行。它能够用于对硬件中断和全局复位的建模。其形式如下:disabletask_id;disableblock_id;禁止语句禁止语句是过程性语句(因此它只能出现在always或70终止命名的block(begin-end或fork-join)或任务。命名的blocktask可以用内部的disable语句终止自身。当任务被终止时,以下的内容不确定:任何outputs或inouts的值尚未生效的非阻塞性赋值事件持续赋值和force语句函数不能被终止。终止命名的block(begin-end或fork-joi71任务终止其自身不同于任务返回,输出不定。disable只有在终止自身的时候才可综合。任务终止其自身不同于任务返回,输出不定。72建议最好在任务定义中不要使用disable禁止语句,尤其是当任务具有一定的返回值时更是如此。这是因为当任

温馨提示

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

评论

0/150

提交评论