下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 夏宇文老师vlogRef5

夏宇文老师vlogRef5.doc

夏宇文老师vlogRef5

lsy512
2018-09-10 0人阅读 举报 0 0 暂无简介

简介:本文档为《夏宇文老师vlogRef5doc》,可适用于工程科技领域

Systemtaskandfunction系统任务和函数Verilog语言包含一些很有用的系统命令和函数。用户可以像自己定义的函数和任务一样调用它们。所有符合IEEE标准的Verilog工具中一定都会有这些系统命令和函数。CADENCE公司的Verilog工具中还有另外一些常用的系统任务和函数它们虽并不是标准的一部分但在一些仿真工具中也经常见到。请注意各种不同的Veriog仿真工具可能还会加入一些厂商自己特色的系统任务和函数。用户也可以通过编程语言接口(PLI)把用户自定义的系统任务和函数加进去以便于仿真和调试。所有的系统任务和系统函数的名称(包括用户自定义的系统任务)前面都要加$以区别于普通的任务和函数。下面是Verilog工具中常用的系统任务和函数的摘要。详细资料在后面介绍。标准的系统任务和函数VerilogHDL的IEEE标准中包括下面的系统任务和函数:·$display,$monitor,$strobe,$write等用于把文本送到标准输出和或写入一个或多个文件中的系统任务。详细说明在后面介绍。·$fopen和$fclose$fopen(“FileName”){Returnaninteger}$fclose(Mcd)$fopen是一个系统函数它可以打开文件为写文件做准备。而$fclose也是一个系统函数它关闭由$fopen打开的文件。有关的详细说明在后面介绍。·$readmemb和 $readmemh$readmemb(“File”,MemoryName,StartAddr,FinishAddr)$readmemh(“File”,MemoryName,StartAddr,FinishAddr)把文本文件中的数据赋值到存储器中。有关的详细说明在后面介绍。·$timeformat(Units,Precision,Suffix,MinFieldWidth)定义用$display等显示仿真时间的格式。有关的详细说明在后面介绍。·$printtimescale$printtimescale(ModuleInstanceName)以如下格式显示一个模块的时间单位和精度:Timescaleof(modulename)isunitprecision。如果没有参数则显示模块的时间单位和精度。·$stop$stop(N){Nis,,}暂停仿真。可选的参数决定诊断输出的类型。0输出最少1个多点2输出最多。·$finish$finish(N){Nis,,}退出仿真把控制权返回给操作系统。如果给出参数N则根据N值打印不同的诊断信息见下面的解释:·0不打印·1打印仿真时间和地点(默认值)。·2打印仿真时间和地点和仿真所使用的CPU时间和内存的统计数据。·$time,$stime,和$realtime$time$stime$realtime系统函数返回仿真的当前时间值。返回时间值的单位由调用该系统函数语句的模块的`timescale定义。·$time返回一个根据时间单位四舍五入取整的位无符号整数。·$stime返回一个截去高位保留低位的无符号整数。·$realtime返回一个实数。请注意这些系统函数没有输入与Verilog的其它函数不同。·$realtobits和$bitstoreal$realtobits(RealExpression){returnabitvalue}$bitstoreal(BitValueExpression){returnarealvalue}实数和用位(bit)表示的数之间的互相转换。因为模块的端口不允许传输实数故需要把实数转换为用位表示的数后才能输入输出模块。请参阅Module的说明。·$rtoi和 $itor$rtoi(RealExpression){returnaninteger}$itor(IntegerExpression){rerurnarealnumber}实数和整数之间的互相转换。$rtoi把实数截断后转换为整数。$itor把整数转换为实数。·随机数产生函数)$random(Seed))$distchisquare(Seed,DegreeOfFreedom))$disterlang(Seed,Kstage,Mean))$distexponential(Seed,Mean))$distnormal(Seed,Mean,StandardDeviation))$distpoisson(Seed,Mean))$distt(Seed,DegreeOfFreedom))$distuniform(Seed,Start,End)当重复调用上述函数时根据不同概率分布的随机数产生函数条件返回其相应的随机数序列。若伪随机序列的源种相同则伪随机序列也总是一样的。请参考关于概率与统计理论的教科书详细了解其中分布函数及其应用部分。·SpecifyBlockTimingChecks指定块内的定时检查系统任务)$hold(ReferenceEvent,DataEvent,Limit,Notifier))$nochange(ReferenceEvent,DataEvent,StartEdgeOffset,EndEdgeOffset,Notifier))$period(ReferenceEvent,Limit,Notifier))$recovery(ReferenceEvent,DataEvent,Limit,Notifier))$setup(DataEvent,ReferenceEvent,Limit,Notifier))$setuphold(ReferenceEvent,DataEvent,SetupLimit,HoldLimit,Notifier))$skew(ReferenceEvent,DataEvent,Limit,Notifier))$width(ReferenceEvent,Limit,Threshold,Notifier)以上个系统任务均为常用的定时检查系统任务。这些专用的系统任务只能在specifyblock(指定块)里被调用详细说明请参阅后面的材料。·ValueChangeDumpTasks储存数值变化的系统任务)$dumpfile(“FileName”))$dumpvars(Levels,ModuleOrVariable,))$dumpoff)$dumpon)$dumpall)$dumplimit(FileSize))$dumpflush以上七个系统任务用于把数值的变化储存到VCD文件中。VCD文件是把仿真激励或结果传递到另一个程序(例如一个波形显示程序)的一种手段。详见后面。非标准的系统任务和函数以下这些系统任务和函数在CADENCE公司的Verilog工具中有但它们并不属于IEEE标准必须包括的范围。其中有部分系统任务和函数与Verilog仿真工具操作时的交互方式有关。如果仿真工具支持交互方式的操作则接受这些系统任务和函数作为其指令。$countdrivers$countdrivers(Net,IsForced,NoOfDrivers,NoOfDriversTo,NoOfDriversTo,NoOfDrivrsToX)该系统函数能返回某指定的Net类型标量或Net型矢量的某个选定位上的驱动器个数。驱动器包括原语的输出和连续赋值语句(强迫(force)启动的除外)。若Net含有一个以上的驱动器时该系统函数($countdrivers)返回其他情况下返回。在该系统任务中除第一个变量外其余的都返回整型数。若Net为force则IsForced返回否则返回。NoOfDrivers返回驱动器个数。其他变量返回数的总和等于NoOfDrivers。·$list$list(ModuleInstance)在交互模式中调用此系统函数可列出在本设计中当前(或指定)范围内的源程序。·$input$input(“FileName”)从某个文本文件中读出交互命令。·$scopeand$showscopes$scope(ModuleInstance)$showscopes(N)本系统命令用于在交互模式中设置和显示当前范围若给定N并为非零则还显示下面的范围。·$key,$nokey,$logand$nolog$key(“FileName”)$nokey$log(“FileName”)$nolog“key”文件记录用交互方式输入的命令“log”文件记录在仿真期间所有写入标准设备的信息而运行$nokey和$nolog系统任务可分别禁止这两项功能。用$key和$log(无参数)可恢复其记录功能。如有参数则$key和$log创建新的记录文件。·$reset、$resetcount和$resetvalue$reset(StopValue,ResetValue,DiagnosticsValue)$resetcount{Returnsaninteger}$resetvalue{Returnsaninteger}系统任务$reset使仿真器复位并使仿真从头重新开始执行。StopValue为表示仿真器复位到交互模式允许用户自己来启动和控制仿真。而非值表示仿真将会自动地从头开始仿真。ResetValue的值可以通过$resetvalue系统函数读出。DiagnosticsValue是指复位前仿真工具所显示信息的类型。$resetcount返回已调用$reset系统任务的次数。$resetvalue返回传给$reset系统任务的值。·$save、$restart和$incsave$save(“FileName”)$incsave(“FileName”)$restart(“FileName”)$save将完整的仿真状态保存在文件中$restart可以读出保存的文件。$incsave只保存自上次调用$save后的变化。$restart将仿真复位并把完整的或只记录变化的文件读出。若是$restart只记录变化的文件原完整的仿真状态记录文件必须存在记录变化的文件会引用完整的仿真状态文件。·$showvars$showvars(NetOrRegister,)在标准输出设备显示Net和寄存器的状态。这个系统任务用于交互模式。所显示的状态信息在VerilogLRM工具中未作定义。状态信息可以包括当前的Net和寄存器值、这些Net和寄存器上的预定事件、以及Net的驱动器。如果未给出变量表将显示所有当前范围的Net和寄存器。·$getpattern$getpattern(MemoryElement)$getpattern是一个只能用于连续赋值语句的系统函数连续赋值语句的左边必须为Net类型标量的位拼接。$getpattern常与$readmemb和$readmemh一起使用可从文本文件中提取测试矢量。当有大量的标量需要输入时$getpattern能提供快速的处理。·$sreadmemband$sreadmemh$sreadmemb(Memory,StartAddr,FinishAddr,String,)$sreadmemh(Memory,StartAddr,FinishAddr,String,)这两个任务与$readmemb和$readmemh类似只是存储器中的初始数据不是由文件输入而是由一个或多个字符串输入。字符串格式与$readmemb和$readmemh系统任务所要求的相应文件格式一致。·$scale$scale(DelayName){Returnsrealtime}将一模块的时间值转换为调用$scale系统任务的模块中所定义的时间单位来表示。$scale可以引用用模块层次命名的参数(如延迟值)并将它转换为调用$scale的模块中所定义的时间单位来表示。常用系统任务和函数的详细使用说明$display和$write把格式化文本输出到标准输出设备及仿真器日志或其他文件。·语法:$display(Argument,)$fdisplay(Mcd,Argument,)$write(Argument,)$fwrite(Mcd,Argument,)Mcd=Expression{Integervalue}·规则:$display与$write的唯一区别为前者在输出结束后会自动换行而后者不会自动换行。Arguments可以是字符串或表达式或空格()。字符串内可包含以下格式控制符。若包含格式控制符(m除外)则每个字符串后必须有足够的表达式来为字符串中的格式控制符提供数值。字符串中也可包含以下扩展字符:·n换行(Newline)·t制表符(Tab)·”双引号·反斜杠·nnn用八进制表示的ASCII字符不定值和高阻值这样表示(注意:八进制数的每一个数字代表位而十制数和十六进制数的每一个数字代表位):对十进制数而言若有某个数字为不定值和高阻值则写作xzXZ。若用大写的XZ表示则该数字中并非所有位(bit)为不定值和高阻值若用小写xz表示则表示该数字中所有位(bit)为不定值和高阻值时。若参数表含二相邻逗号则输出显示或打印一空格。·格式控制符在字符串中允许出现下面这些格式控制符:)bB二进制数(Binary))oO八进制数(Octal))dD十进制数(Decimal))hH十六进制数(Hexadecimal))eEfFgG实型数(Real))cC字符(Character))sS字符串(String))vV二进制数和强度(BinaryandStrength))tT时间类型数(Time))mM分级实例名(HierarchicalInstance)格式控制符v按如下的形式打印出变量的强度值:若强度值为supply则打印Su若为strong则打印St若为Pull则打印Pu若为Large则打印La若为Weak则打印We若为Medium则打印Me若为Small则打印Sm若为Highz则打印Hi。v也能把变量值打印为H和L(这些值若用b格式控制符则只能打印为X)。号后常跟有一个数用于表示打印变量值区域的宽度(例如d表示至少保留位宽度给要打印的十进制数)。对十进制数高位不足此值者以空格代替其他进制以代替若号后的数为则表示打印变量值区域的宽度随其值的位数自动调节。VerilogHDL实型数的格式符(e,fandg)其格式控制功能和C语言的格式符完全一样。例如g指至少保留位宽度给要打印的十进制数小数点后还保留个数字位。若相应的变量未用格式控制符声明则默认为是十进制数。有些系统打印任务有其自己的缺省值如$displayb,$fwriteo$displayh的缺省值分别是二进制八进制十六进制。·举例说明:$display(“Illegalopcodehinmatt”,Opcode,$realtime)$writeh(“Registervalues(hex):“,reg,,reg,,reg,,reg,”n”)请参阅:$monitor,$strobe的说明$fopenand$fclose$fopen是用于打开某个文件并准备写操作的系统任务而$fclose则是关闭文件的系统任务。把文本写入文件还需要用$fdisplay、$fmonitor等系统任务。语法:$fopen(“FileName”){Returnsaninteger}$fclose(Mcd)Mcd=Expression{Integervalue}在程序中位于何处:请参阅Statement的说明规则:·一般情况下一次最多可打开个文件但若所用的操作系统不同一次最多可打开的文件数可能不到。·当调用$fopen时它返回一个位(bit)(与文件有关)的无符号多通道描述符或者返回值值表示文件不能打开。·多通道描述符可以被认为是个标志每个代表个文件中的一个。多通道描述符的第位与·标准输出设备有关第位为第个文件打开的标志位第位为第个文件的标志位依次类推。当输出文件的系统任务如$fdisplay被调用时其第一个参数为多通道描述符它表示向何处写。文本被写入那些多通道描述符内标志位已设的相应文件中。举例说明:integerMessagesFile,DiagnosticsFile,AllFilesinitialbeginMessagesFile=$fopen(“messagestxt”)if(!MessagesFile)begin$display(“Couldnotopen”messagestxt””)$finishendDiagnosticsFile=$fopen(“diagnosticstxt”)if(!DiagnosticsFile)begin$display(“Couldnotopen”diagnosticstxt””)$finishendAllFiles=MessagesFile|DiagnosticsFile|$fdisplay(AllFiles,“Startingsimulation”)$fdisplay(MessagesFile,“Messagesfromm”)$fdisplay(DiagnosticsFile,“Diagnosticsfromm”)$fclose(MessagesFile)$fclose(DiagnosticsFile)end请参阅:$display,$monitor,$strobe的说明。$monitor等当$monitor系统任务所指定的参数表中中任何一个或多个Net或寄存器类型变量值发生变化时便立即显示一行文本。此系统任务常用于测试模块中以监测仿真行为的细节。语法:$monitor(Argument,)$fmonitor(Mcd,Argument,)$monitoron{turnsmonitorflagon}$monitoroff{turnsmonitorflagoff}Mcd=Expression{Integervalue}规则:上面这些系统任务在变量使用的语法上与$display系统任务完全相同。有一点与$display系统任务不同:只能同时运行一个$monitor系统任务。但$fmonitor系统任务却能同时运行多个。第二次或下一次调用$monitor系统任务就把上一次正在执行的$monitor系统任务取消了用新的$monitor系统任务取而代之。$monitoroff系统任务关闭监视的功能而$monitoron则恢复监视的功能它能把现存的$monitor进程所监测到的信号不管其值是否变化立即显示出来。对$fmonitor而言没有与之对应的$monitoron和$monitoroff系统任务。系统函数$time、$stime和$realtime不会从$monitor或$fmonitor等系统任务触发出一行显示。提示:在测试模块里使用$monitor可以从任何一种Verilog兼容的仿真器获得仿真结果。用于生成波形图显示的任务往往与仿真器相关。举例说明:initial$monitor(“t:a=b,f=b”,$realtime,a,f)请参阅:$display,$strobe,$fopen语句的说明。$readmemb和$readmemh把文本文件中的数据读到存储器阵列中以对存储器变量进行初始化。此文本文件的内容可以是二进制格式(用$readmemb)的也可以是十六进制格式(用$readmemh)的。语法:{Systemtaskcall}$readmemb(“File”,MemoryName,StartAddr,FinishAddr)$readmemh(“File”,MemoryName,StartAddr,FinishAddr){Textfile}{either}WhiteSpaceDataValueAddressWhiteSpace={either}SpaceTabNewlineFormfeedDataValue={either}BinaryDigit{$readmemb}HexDigit{$readmemh}Address=HexDigit规则:·第一个参数是ASCII文件名文件中可以包含空格、Verilog注释语句、十六进制地址和二进制或十六进制数据。·第二个参数是存储器阵列名。·数据的位宽必须与存储器阵列的每个存储单元的位宽相同而且每个数据之间必须用空格间隔开。数据被一个挨一个地读入连续相邻的存储器阵列中从存储器阵列的第一个地址(若指定起始地址则从指定的起始地址)开始直到数据文件结束或直到存储器阵列的最后一个地址(若指定结束地址则到指定的结束地址)为止。·地址均用十六进制数字表示且以符号开头(对$readmemb亦然)。当遇到一个地址后下一个文本数据将被读入这个地址的存储单元。可综合性问题:不可综合。综合工具忽略这些系统任务的存在。在可综合的设计里从存储器阵列导出的触发器不能用这种方法初始化。如果需要上电复位对存储器阵列(RAM)初始化则必须对其明确地编码。提示:存储器阵列可以储存从文本文件读出的激励源。这是把数据读进Verilog仿真器的唯一方式而无须另外使用编程语言接口(PLI)或非标准语言扩展来做到这一点。举例说明:moduleTestrega,b,c,dparameterNumPatterns=integerPatternreg:Stimulus:NumPatternsMyDesignUUT(a,b,c,d,f)initialbegin$readmemb(“Stimulustxt”,Stimulus)Pattern=repeat(NumPatterns)beginPattern=Pattern{a,b,c,d}=StimulusPattern#endendinitial$monitor(“ta=bb=bc=bd=b:f=b”,$realtime,a,b,c,d,f)endmodule$strobe在所有事件都已处理完毕后的时刻打印出一行格式化的文本。语法:$strobe(Argument,)$fstrobe(Mcd,Argument,)Mcd=Expression{Integervalue}规则:本系统任务($strobe)有关参数以及文本打印的语法与系统任务$display完全一样。但$strobe只打印调用此系统任务的时刻且当所有活动事件都已结束后的信息其中可包括所有阻塞和非阻塞赋值产生的效果。提示:在写仿真激励模块时若想打印出仿真结果应优先考虑使用$strobe系统任务。因为与使用$display或$write比较系统任务$strobe可以保证显示出写入Net和寄存器类型变量的是一个稳定的数值。举例说明:initialbegina=$display(a)displays$strobe(a)displaysa=becauseofthisstatementend请参阅:$display,$monitor,$write语句的说明。$timeformat定义仿真时间的打印格式。系统任务$timeformat应配合格式控制符t使用。语法:$timeformat(Units,Precision,Suffix,MinFieldWidth)规则:·Units(单位)是指打印的时间单位它是一个到之间整型数表示秒(s)表示毫秒(ms)表示微秒(us)表示纳秒(ns)表示皮秒(ps)表示浮秒(femtosecond)中间的整数也可用如表示皮秒(ps),依此类推。·Precision是指打印的十进制数小数点后保留的位数。·Suffix指打印时间值后跟的字符串。·MinFieldWidth指打印出的字符的最少个数其中包括前面的空格。若需要打印的字符多则需要取较大的整数。·缺省形式即不指定参数自动设置为:Units(单位)为仿真的时间精度Precision(精度)为Suffix无MinFieldWidth为。提示:在使用$display、$monitor或其他显示任务时应使用‘timescale,$timeformat和$realtime(并配合t)来指定和显示仿真时间。举例说明:$timeformat(,,“xps”,)xps请参阅‘timescale,$display的说明。StochasticModelling随机模型Verilog提供了一整套系统任务和函数可用来启动随机序列的生成和管理以支持建立随机模型。语法:$qinitialize(qid,qtype,maxlength,status)$qadd(qid,jobid,informid,status)$qremove(qid,jobid,informid,status)$qfull(qid,status){Returnsaninteger}$qexam(qid,qstatcode,qstatvalue,status)在程序中位于何处:请参阅Statement的说明。概论:所有这些系统任务和函数的参数都是整型数。每个系统任务和函数都返回一整数型的状态(status)值它为下列值之一:OK队列已满:不能再增加工作($qadd)未定义的qid队列空:不能再删除工作($qremove)不支持的队列形式:不能创建这个队列($qinitialize)最大长度小于等于:不能创建这个队列($qinitialize)两个相同的qid::不能创建这个队列($qinitialize)内存不足:不能创建这个队列($qinitialize)系统任务$qinitialize创建一个队列。qid(输出)是唯一的队列标识符当程序需要调用多个队列任务和函数时可用该标识符来区别各个队列。qtype(输入)可为或表示FIFO(先进先出)队列表示LIFO(后进先出)队列。maxlength(输入)为队列所允许的最多的输入个数(即最大长度)。系统任务$qadd向队列加进一个入口。qid(输入)表示向哪个队列加输入口。jobid(输入)表示是哪个工作(job)它通常为一整型数每次向队列加入一个新元素其值加这样当队列的某一元素需要移走可以用jobid来识别。informid(输入)用于定义与队列入口有关的信息由用户自己来定义。系统任务$qremove从队列取一个入口。qid(输入)表示从哪个队列取走该入口。jobid(输出)确定是哪个工作(请参阅$qadd的说明)。informid(输出)是由$qadd储存的数值。系统任务$qfull检查队列是否满。若返回值为则队列满为则不满。系统任务$qexam取得队列不同类型的统计信息。下列描述中提及的时间是基于何时队列元素被加入到队列中(到达时间)以及队列元素从加入队列到被删除出去的时间差(等待时间)。时间单位为仿真的时间精度。其中qstatvalue(输出)参数返回取得的消息而其中qstatcode(输入)参数可以取分别表示要求取得的信息类型:当前队列长度。平均达到时间间隔。最大队列长度。最短等待时间当前队列中队列元素的最长等待时间。本队列的平均等待时间。举例说明:moduleQueuesparameterQueue=QidparameterFifo=,Lifo=parameterQueueMaxLen=integerStatus,Code,Job,Value,InforegIsFulltaskErrorWriteerrormessageandquitendtaskinitialbegin生成后进先出队列其标号为为,队列长度为。$qinitialize(Queue,Lifo,QueueMaxLen,Status)if(Status)Error(“Couldn’tinitializethequeue”)向号队列加入从号到号共个工作每个job之间间隔个单位时间每次从号队列加入的信息为job号加for(Job=Job<=QueueMaxLenJob=Job)begin#Info=Job$qadd(Queue,Job,Info,Status)if(Status)Error(“Couldn’taddtothequeue”)$display(“AddedJobd,Info=d”,Job,Info)$write(“Statistics:“)**要求取得有关当前队列长度、平均达到时间间隔、最大队列长度、最短等待时间、当前队列中队列元素的最长等待时间和本队列的平均等待时间共种队列信息**for(Code=Code<=Code=Code)begin$qexam(Queue,Code,Value,Status)if(Status)Error(“Couldn’texaminethequeue”)$write(“d”,Value)显示种队列信息end$display(“”)end队列此时应是满的IsFull=$qfull(Queue,Status)if(Status)Error(“Couldn’tseeifqueueisfull”)if(!IsFull)Error(“QueueisNOTfull”)去除工作repeat()begin#$qremove(Queue,Job,Info,Status)if(Status)Error(“Couldn’tremovefromthequeue”)$display(“RemovedJobd,Info=d”,Job,Info)$write(“Statistics:“)for(Code=Code<=Code=Code)begin$qexam(Queue,Code,Value,Status)if(Status)Error(“Couldn’texaminethequeue”)$write(“d”,Value)end$display(“”)endendendmodule请参阅:$random、$distchisquare等系统任务的说明。TimingChecks定时检查Verilog提供了一些系统任务这些系统任务仅能在“specifyblock”(指定块)里调用以进行常见的定时检查。语法:$hold(ReferenceEvent,DataEvent,Limit,Notifier)$nochange(ReferenceEvent,DataEvent,StartEdgeOffset,EndEdgeOffset,Notifier)$period(ReferenceEvent,Limit,Notifier)$recovery(ReferenceEvent,DataEvent,Limit,Notifier)$setup(DataEvent,ReferenceEvent,Limit,Notifier)$setuphold(ReferenceEvent,DataEvent,SetupLimit,HoldLimit,Notifier)$skew(ReferenceEvent,DataEvent,Limit,Notifier)$width(ReferenceEvent,Limit,Threshold,Notifier)ReferenceEvent=EventControlPortNameConditionDataEvent=PortNameLimit={either}ConstantExpressionSpecparamNameThreshold={either}ConstantExpressionSpecparamNameEventControl={either}posedgenegedgeedgeTransitionPair,TransitionPair={either}xxxxCondition={either}ScalarExpression~ScalarExpressionScalarExpression==ScalarConstantScalarExpression===ScalarConstantScalarExpression!=ScalarConstantScalarExpression!==ScalarConstant规则:·参考事件(ReferenceEvent)的变化提供了定时检查的时间基准参考事件(ReferenceEvent)必须通过模块的输入口(input)或输入输出口(inout)引入。·数据事件(DataEvent)的变化会启动定时检查数据事件也必须通过模块的输入口(input)或输入输出口(inout)引入。·如果参考事件与数据事件同时发生这时虽不会产生建立违例报告但会产生保持违例报告。·对于系统任务$width,脉冲如果低于门限(Threshold)参数的设定(若设置了门限)则不会发生违例报告。·下列定时检查系统任务中的参考事件(ReferenceEvent)必须是沿触发的:$width,$period,$recovery,$nochange。·以上系统任务中ReferenceEvent参数都可以用关键字edge除了$recovery和$nochange这两个系统任务例外它们的ReferenceEvent参数只能用posedge和negedge。·使用做注释的条件定时检查仅在条件为真时才执行。·在以上的系统任务里如果设置了notifier参数则其必须为寄存器类型变量当违例发生时寄存器变量数值发生变化:若原为不定值则变为若原为值则变为若原为则变为若原为高阻则不变。注意!这些系统任务仅能在specify(指定)块中调用而不能用作程序声明语句。参数ReferenceEvent和DataEvent在系统任务$setup里是颠倒的。提示:若条件比较复杂应在指定块(specifyblock)外描述条件而把驱动条件的信号(wire或reg类型)放在指定块内。举例说明:regErr,FastClockNotifierregistersspecifyspecparamTsetup=,Thold=,Trecover=,Tskew=,Tpulse=,Tspike=$hold(posedgeClk,Data,Thold)$nochange(posedgeClock,Data,,)$period(posedgeClk,,FastClock)$recovery(posedgeClk,Rst,Trecover)$setup(Data,posedgeClk,Tsetup)$setuphold(posedgeClk!Reset,Data,Tsetup,Thold,Err)$skew(posedgeClk,posedgeClk,Tskew)$width(negedgeClk,Tpulse,Tspike)endspecify请参阅:Specify,Specparam的说明。ValueChangeDump以下七个系统任务用于把数值的变化储存到VCD文件中。VCD文件是把仿真激励或结果传递到另一个程序(例如一个波形显示程序)的一种手段。语法:$dumpfile(“FileName”)$dumpvars(Levels,ModuleOrVariable,)$dumpoff{suspenddumping}$dumpon{resumedumping}$dumpall{dumpacheckpoint}$dumplimit(FileSize)$dumpflush{updatethedumpfile}在程序中位于何处:请参阅Statement说明。规则:·系统任务$dumpvars中的参数Levels表示想要把指定模块的哪些层次的数值变化记录到VCD文件中:若设置为表示仅记录指定层次模块中的变化表示不但记录该层次模块还记录所有与该模块有关的下层模块中的变化。·如果没有设置任何参数则设计中所有变量的变化均记录到VCD文件。·FileSize参数是用于设置VCD文件可记录的最多字节数。·在测试程序中可写多个系统任务$dumpvars调用但是每个调用必须在同一时刻(通常在仿真开始时)。举例声明:moduleTestinitialbegin$dumpfile(“resultsvcd”)$dumpvars(,Test)endPerformperiodiccheckpointingofthedesigninitialforever#$dumpallendmoduleCommandLineOptions命令行的可选项虽然怎样选用启动Verilog仿真器工作的命令行可选项并不是的Verilog语法的一部分大多数有关Verilog语法学习参考材料里也不提供这方面的资料但是为了更快掌握仿真工具还是有必要介绍一些这方面的资料因为绝大多数仿真器都支持一些常见共同的Verilog编译命令选项(尽管有的Verilog仿真工具还有自己的一些命令选项)熟练地掌握这些共同的选项能更有效地进行仿真提高Verilog仿真工具的使用效果。UNIXVerilog编译命令选项分为两类:一类是一个字符的前面带有一个减号(如s)另一类是多个字符的前面带有一个加号(如word)。有些UNIXVerilog编译命令选项后还可跟一个值例如跟一个文件名(如ffile)。下面介绍一些最有用和最常见的Verilog编译命令选项(注意:并非所有仿真器都支持这些选项):fCommandFile除从命令行输读入命令选项外还从命令文件读入更多的命令选项kKeyFile在KeyFile里记录仿真期间所有键入的交互命令lLogFile除了在显示器输出外还把所有仿真信息(包括$display等的输出)记录到LogFile中。rSaveFile从由非标准的系统任务$save生成的文件再次开始仿真。s在时刻中断仿真器以便采用交互方式来控制仿真的进行。u将Verilog源代码中的字符都视为大写字符(字符串除外)用此选项时要小心。vLibraryFile在LibraryFile中寻找设计文件中缺少的UDP或模块。只有那些在设计文件中并未定义但已实例引用的UDP或模块编译器才会在LibraryFile中寻找。而设计中没有引用的在LibraryFile中UDP或模块不会进行编译。yLibraryDirectory在LibraryDirectory中的文件中寻找设计文件中缺少的UDP或模块期望在该库的目录中有一个文件已定义了一个与其同名的模块。如果给出libext扩展名的命令行选项则是指在搜寻文件时将带扩展名搜寻。例如ymyliblibextv是指在mylib目录中在扩展名为v的文件范围内搜寻在设计中未定义的同名的模块。defineMacroName定义一段文字作宏名(无值)。这种零值的宏可以用于‘ifdef中来控制(条件)编译的范围。incdirDirectoryDirectory定义搜索路径搜索用‘include包含的文件。搜索开始于当前路径如果没有找到就去由incdir定义的搜索路径依次去找。libextExtension定义库文件扩展名。(请参阅–y的说明)notimingchecks关闭指定块的定时检查此举可以加速仿真或抑制伪定时错误信息使用此选项时需小心。mindelays,typdelays,maxdelays以上分别是指仿真时使用最小典型和最大延迟缺省为使用典型延迟。仿真时不要混淆以上三种延迟。注意!Verilog仿真器不能检查出号后选项参数的拼写错误这是因为Verilog命令行允许用户自己来定义号后的参数所以一定小心注意选项的拼写例如“maxdelays”要注意拼写正确。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/19

夏宇文老师vlogRef5

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利