欢迎来到天天文库
浏览记录
ID:36302430
大小:935.50 KB
页数:69页
时间:2019-05-08
《modelsim软件使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、逻辑设计与FPGA仿真软件Modelsim的基本知识福州大学微电子系仿真与验证1、编写测试验证程序1.1、测试验证程序有三个主要目的1.2、典型的测试验证程序形式2、激励波形产生2.1、值序列2.2、重复模式3、测试验证程序实例3.1、解码器3.2、触发器Verilog模块的测试目的:如何编写的测试文件,对所做的设计进行完整的测试和验证。掌握组织模块测试的常用方法学会编写常用的测试代码。模块的测试被测模块激励和控制信号输出响应和验证1、编写测试验证程序测试验证程序用于测试和验证设计的正确性。VerilogHDL提供强有力的结构来编写测试验证程序。1、编写测试验证程序1
2、.1、测试验证程序有三个主要目的:1)产生模拟激励(波形);2)将输入激励加入到测试模块并收集其输出响应;3)将响应输出与期望值进行比较。1.2、典型的测试验证程序形式moduleTest_Bench;(不做端口声明)//通常测试验证程序没有输入和输出端口。Local_reg_and_net_declarations(端口声明)Generate_waveforms_using_initial_&_always_statemen(产生激励波形)Instantiate_module_under_test(例化被测模块)Monitor_output_and_compare_
3、with_expected_values(输出监控或直接波形输出)endmodule测试时,通过在测试验证程序中进行实例化,将激励自动加载于测试模块。1.2、典型的测试验证程序形式测试模块常见的形式:moduleXX_tb;reg…;//被测模块输入变量类型定义wire…;//被测模块输出变量类型定义initialbegin…;end……//产生测试信号alwaysbegin…;end//产生测试信号tsintm(.in1(ina),.in2(inb),.out1(outa),.out2(outb));//被测模块的实例引用initialbegin….;….;end/
4、/记录输出和响应endmodule1.2、典型的测试验证程序形式测试模块中常用的过程块:initialalways所有的过程块都在0时刻同时启动;它们是并行的,在模块中不分前后。initial块只执行一次。always块只要符合触发条件可以循环执行。1.2、典型的测试验证程序形式如何描述激励信号:modulet;rega,b,sel;//被测模块的输入信号用寄存器赋值wireout;;//被测模块的输出信号//引用多路器实例mux2m(out,a,b,sel);//加入激励信号initialbegina=0;b=1;sel=0;#10b=0;#10b=1;sel=1;
5、#10a=1;#10$stop;end1.2、典型的测试验证程序形式如何观察被测模块的响应:在initial块中,用系统任务$time和$monitor$time返回当前的仿真时刻$monitor只要在其变量列表中有某一个或某几个变量值发生变化,便在仿真单位时间结束时显示其变量列表中所有变量的值。例:initialbegin$monitor($time,,“out=%ba=%bb=%bsel=%b”,out,a,b,sel);end2、激励波形产生有两种产生激励值的主要方法:产生值序列,即在确定的离散时间间隔加载激励。2)产生重复模式的波形。2.1、值序列A1、产生值
6、序列的最佳方法是使用initial语句。initialbeginReset=0;#100Reset=1;#80Reset=0;#30Reset=1;end产生的波形如图所示。Initial语句中的赋值语句用时延控制产生波形。此外,语句内时延也能够按如下实例所示产生波形。因为使用的是阻塞性过程赋值,上面语句中的时延是相对时延。2.1、值序列B、若要重复产生一个值序列,可以使用always语句替代initial语句。ParameterREPEAT_DELAY=35;IntegerCoinValue;alwaysbeginCoinValue=0;#7CoinValue=25
7、;#2CoinValue=5;#8CoinValue=10;#6CoinValue=5;#REPEAT_DELAY;end这是因为initial语句只执行一次而always语句会重复执行2.2、重复模式A、重复模式的生成通过使用如下的连续赋值形式加以简化:assign#(PERIOD/2)Clock=~Clock;但是这种做法并不完全正确。问题在于Clock是一个线网(只有线网能够在连续赋值中被赋值),它的初始值是z,并且,z等于x,~x等于x。因此Clock的值永远固定为值x。现在需要一种初始化Clock方法。可用initial语句实现。initi
此文档下载收益归作者所有