第6章 仿真与验证.ppt_第1页
第6章 仿真与验证.ppt_第2页
第6章 仿真与验证.ppt_第3页
第6章 仿真与验证.ppt_第4页
第6章 仿真与验证.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章Verilog仿真和验证,6.1系统任务和系统功能,6.2系统预定义指令,6.3用户定义组件,6.4测试平台,6.5模型仿真示例,6.6数字电路的仿真和内容,第6章Verilog仿真和验证,6.1系统任务和系统功能,通常以符号“$”开始。系统任务可以返回0个或多个值,而系统功能与任务相似,只是它们只能返回一个值。例如:$显示器,$ readmeh,等等。当使用不同的Verilog仿真工具(如VCS、Verilog-XL、ModelSim等)时。)对于模拟,这些系统任务和系统功能在使用方法上可能不同,应根据用户手册使用。通常,系统任务和系统功能在内部或始终在进程块中调用。用户可以通过编程语

2、言接口(PLI)将自己定义的系统任务和系统功能添加到语言中,用于模拟和调试。系统任务和系统功能只能用于仿真,在系统综合过程中被忽略。系统任务和功能分类,显示任务文件输入和输出任务仿真控制任务时标任务PLA建模任务随机建模任务转换函数概率分布函数字符格式化命令行参数,$display和$write是两个显示和编写系统任务,两者功能相同,用于显示仿真结果。区别在于$display可以在输出后自动换行,但是$write不能。$display和$write的使用格式是:$display(“格式控制器”,输出变量名列表);$write(“格式控制器”,输出变量名列表);1系统任务,$display和$w

3、rite,格式控制器,转义符,$ displayb $ displayh $ displayo $ write b $ write h $ write o,未指定输出数据格式,可采用以下默认任务显示形式:模拟调试器,模块dis _ 1();整数wait _ timer初始begin wait _ timer=1;$display(第一次赋值后,wait_temer的值为%d,wait _ timer);wait _ timer=2;$display(第一次赋值后,wait_temer的值为%d,wait _ timer);结束模块,modelsim模拟下的输出:$monitor和$strobe

4、是属于输出控制类的显示系统任务,如$display和$write,并且$monitor和$strobe都提供在指定时间监视和输出参数列表中的字符或变量的值的功能;语句执行时,会执行$显示和$写入任务。它的使用格式是:$monitor(“格式控制器”,输出变量名列表);$strobe(“格式控制器”,输出变量名列表);这里的格式控制器和输出变量名列表与$display和$write中定义的完全相同。$monitor和$strobe以及系统任务$finish和$stop用于控制模拟过程,分别指示模拟结束和模拟中断。$finish和$stop的使用格式如下:$ stop;$ stop(n);$ fi

5、nish$ finish(n);n是$finish和$stop的参数,n可以分别是0、1、2,具有以下含义。0:不输出任何信息;1:给出模拟时间和位置;2.给出模拟时间和位置,以及一些其他运行统计数据。$finish和$ stop,模块全加器(cout,si,ai,bi,CIN);输出si,cout输入ai、bi、CIN;指定cout,si=艾比CIN;endmodule,时间刻度1ns/1ps模块full _ adder _ tbreg2:0in导线总和,cout整数I,j;全加器。cout(cout),si(总和),人工智能(2)。bi(in1)。in0分);总是# 10 in=in 1;

6、Initial begin /这三个语句同时执行,但Initial只执行一次,in=0;/但是因为其中的语句是由时间控制的,所以,$display(时间艾比cin cout sum)直到#160才结束;$monitor($time、%b % b % b % b=% b、% b、in2、in1、in0、cout、sum);#160美元完成;末端模块采用分层电路设计的全加器模拟显示测试程序,测试加法执行过程并检测执行情况。,ModelSim模拟结果,时间ai bicin cout sum # 0 000=0,0 # 10 001=0,1 # 20 010=0,1 # 30 011=1,0 # 40

7、 100=0,1 # 50 101=1,0 # 60 1 1 0=1,0 # 70 1 1 1 1=1,1 # 80 0 0 0 0=0,0 # 90 0 0 1=0,1 # 100 0 0 1 0=0,1 # 1110 0 #120 1 0 0=0,1 # 130101=1,0 # 140110=1,0 # 150111=1,1,只要输出值发生变化,监控输出任务$monitor就会显示输出。 在表中,当150ns160ns期间没有数值变化时,不显示160ns的输出结果。$readmemh和$ read mem是属于文件读写控制的系统任务,它们的功能是从外部文件中读取数据并将其放入内存。两者的

8、区别在于读取数据的格式不同。$readmemh读取十六进制数据,$ read meme读取二进制数据。$readmemh和$ read mem的使用格式是:$readmemh(数据文件名、内存名、起始地址、结束地址);$ read member(数据文件名、内存名、起始地址、结束地址);其中,起始地址和结束地址都可以缺省,如果缺省起始地址意味着从存储器的第一个地址开始存储;如果使用默认的结束地址,它意味着结束地址存储到内存。$readmemh和$ read mem以及其他系统任务和函数用于读取文件中的数据:$fread :将文件中的二进制数据读取到内存中。$fgetc :一次从文件中读取一个字

9、符。$fgets :一次从文件中读取一行。$ungetc :在文件中插入一个字符。$frewind :返回到文件的开头。$ fseek :移动到偏移量指定的位置。$ftell :返回基于文件开头的偏移量。$fscanf :从文件中读取格式化数据。$ ferror :有助于在执行读取任务后确定错误原因。$time和$realtime是显示模拟时间刻度的系统功能。当调用这两个函数时,它们都返回从当前时间到模拟开始时间的时间值。不同之处在于$time函数以64位整数值的形式返回模拟时间,而$realtime函数以真实数据的形式返回模拟时间。2.系统功能,如上述加法器模拟调试程序。$time和$rea

10、ltime,$random是一个生成随机数的系统函数。对这个函数的每次调用都会返回一个32位的随机数,这是一个有符号的整数。$random、$fopen和$fclose用于打开和关闭文件系统函数,并在完成后返回与文件相关的整数指针。6.2编译指令的使用,编译指令:1。宏定义语句定义和宏取消语句定义,如定义状态机中的状态:定义S0 2b00/定义状态代码定义1b 01;一旦编译器传递了指令,特别指定的宏定义将在整个编译过程中保持有效。并且可以在多个文件中有效,直到遇到取消宏定义的指令。取消定义宏名称会取消先前定义的宏定义。2.编译时包含其他文件指令,包括././文件名”,用于将指定文件与当前文件

11、一起编译。指定的文件可以是相对路径或绝对路径。3.模拟延迟模型的表示,包括门延迟、分配延迟和连接延迟。它主要用于模拟实际电路中的延迟过程,不能集成到特定的电路中,只能用于调试。门延迟是从输入端变化到输出端变化的延迟时间。赋值延迟是指等号右端的值变为等号左端的值时的延迟时间;连接延迟反映了连接上信号的传输延迟。如果未定义延迟值,默认延迟为0。延迟语句用于模拟测试,但不能综合生成硬件。主要用于模拟真实数字电路运行时的电路延迟和人工设计的波形输出。、时间刻度预定义语句时间刻度语句用于定义模块中运行的指令的时间单位和时间精度,其使用格式如下:时间刻度、时间刻度/用于表示时间度量的符号有:s、ms、us

12、、ns、ps和fs,时间单位必须为整数,指令运行时间以时间单位为基础,时间精度或多或少选择。例如,时间刻度1ns/100ps上述陈述表明延迟单位为1ns,延迟精度为100ps(即精确到0.1ns)。时间刻度编译器指令出现在模块描述之外,并影响所有后续延迟值,直到遇到另一个时间刻度指令或重置指令。当一个文件包含多个模块,并且每个模块都有自己的时间刻度指令时,最小精度作为参考时间精度。延迟表达式和延迟描述块,延迟表达式的方法如下:# delaytime # (d1,d2) # (d1,d2,d3)# # delay time表示延迟时间,d1表示上升延迟,d2表示下降延迟,D3表示切换到高阻态z的

13、延迟,这些延迟的具体时间由时间定义语句时间刻度确定。例如,报表之间的延迟:sum=(ab)cin #4 t1=a reg a,b,c;初始开始a=0;b=1;c=0;# 100c=1;# 100 a=1;b=0;# 100 a=0;# 100c=0;#100美元止损。结束初始$monitor($time,a=%d b=%d c=%d,a,b,c);/根据endmodule、激励波形仿真测试程序和ModelSim仿真结果,Verilog可以定义模块中连接模块输入端口(或inout端口)和输出端口(或inout端口)的指定路径的延迟,并使用延迟定义块以独立的块结构定义模块的延迟。在延迟定义块中,应

14、该描述模块中的不同路径并分配值。延迟定义块的内容应该放在关键字specify和end specified之间,并且必须放在模块中。您也可以使用specparam关键字来定义参数。延迟规格块(指定块)和6.3用户定义元素(UDP)。使用UDP(用户定义原语),用户可以自己定义基本逻辑元素的功能,他们可以像调用基本门元素一样调用这些自定义元素。UDP关键字是原语和尾原语。与一般模块相比,UDP模块具有以下特点:UDP只能有一个输出端口,必须在端口列表的第一项。只有输出端口可以定义为reg类型。UDP有许多输入端口,时序电路UDP有多达9个输入端口,组合电路UDP有多达10个输入端口。所有端口变量必

15、须是1位标量。在表条目中,只能出现0、1和x状态,但不能出现z状态。,原语组件名(输出端口,输入端口1,输入端口2),输出输出端口名;输入端口1,输入端口2;Reg输出端口名称;将初始值(0、1或x)设置为初始起始输出端口或内部寄存器;结束表/输入1输入2:输出真值表结束表结束基元,定义UDP语法,1。组合电路UDP元件,原始载波UDP (cout,CIN,a,b);输入cin,a,b;输出cout表/cin a b : cout /真值表0 0 : 0;0 1 0 : 0;0 0 1 : 0;0 1 1 : 1;1 0 0 : 0;1 0 1 : 1;1 1 0 : 1;1 1 1 : 1;Endtable原语,示例6.3 1位全加器执行UDP元素,1。组合电路元件,原始进位;输入cin,a,b;输出cout表/cin a b : cout /真值表0 0 : 0;0 1 0 : 0;0 0 1 : 0;0 1 1 : 1;1 0 0 : 0;1 0 1 : 1;1 1 0 : 1;1 1 1 : 1;0 0 x : 00 x 0 :0x 0 0 : 01 1 x : 11 x 1 : 1x 1 1 :

温馨提示

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

评论

0/150

提交评论