verilog_test_第1页
verilog_test_第2页
verilog_test_第3页
verilog_test_第4页
verilog_test_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、Verilog-验证验证测试程序 什么是测试验证程序:什么是测试验证程序: 用于测试和验证设计的正确性的程序用于测试和验证设计的正确性的程序 测试验证程序的三个部分测试验证程序的三个部分 产生模拟激励产生模拟激励(波形波形) 将输入激励加入到测试模块并收集其输出响应将输入激励加入到测试模块并收集其输出响应 将响应输出与期望值进行比较将响应输出与期望值进行比较测试模型典型的测试模型4块Module Test_Bench;/通常测试验证程序没有输入和输出端口。Local_reg_and_net_declarationsGenerate_waveforms_using_initial_&_a

2、lways_statementsInstantiate_module_under_testMonitor_output_and_compare_with_expected_valuesendmodule1-激励产生l两种产生激励值的主要方法: 1)产生波形,并在确定的离散时间间隔加载激励 2)根据模块状态产生激励,即根据模块的输出响应产生激励(复杂形式,通常含有接口电路) 两类波形 具有重复模式的波形,例如时钟波形 一组指定确定值的波形指定值序列波形Initial beginReset=0;#100 Reset=1;#80 Reset=0;#30 Reset=1;endInitial begi

3、nReset=0;Reset #100=1;Reset #80=0;Reset #30=1;end产生值序列使用initial语句指定值序列波形-重复Parameter REPEAT_DELAY=35;Integer CoinValue;alwaysbeginCoinValue=0;#7 CoinValue=25;#2 CoinValue=5;#8 CoinValue=10;#6 CoinValue=5;#REPEAT_DELAY;endalways语句替代initiall语句重复波形模式-1Assign #(PERIOD/2)Clock=Clock;Clock是一个线网(只有线网能够在连续赋

4、值中被赋值),它的初始值是z,并且,z等于x,x等于x。因此Clock的值永远固定为值xinitialClock=0;Module Gen_Clk_A(Clk_A);Output Clk_A;Reg Clk_A;Parameter tPERIOD=10;initialClk_A=0;always#(tPERIOD/2) Clk_A=Clk_A;endmodule重复波形模式-2Module Gen_Clk_B(Clk_B);Output Clk_B;Reg Start;Initial begin Start=1; #5 Start=0;endNor #2(Clk_B,Start,Clk_B);

5、endmodule占空比不同Module Gen_Clk_C(Clk_C);Parametert ON=5, tOFF=10;Output Clk_C;Reg Clk_C;Always begin#tON Clk_C=0;#tOFFClk_C=1;endendmodulForever语句产生Module Gen_Clk_D(Clk_D);Output Clk_D;Reg Clk_D;Parameter START_DELAY=5, LOW_TIME=2, HIGH_TIME=3;InitialbeginClk_D=0;#START_DELAY;forever begin#LOW_TIME;Cl

6、k_D=1;#HIGH_TIME;Clk_D=0;endendendmoduleRepeat产生指定个数的时钟Module Gen_Clk_E(Clk_E);Output Clk_E;Reg Clk_E;Parameter Tburst=10, Ton=2, Toff=5;Initial beginClk_E=1b0;repeat(Tburst)begin#Toff Clk_E=1b1;#Ton Clk_E=1b0;endendendmoduleRepeat带参数应用模块模块Gen_Clk_E在具体应用,参数在具体应用,参数Tburst、Ton和和Toff带不同的值带不同的值Module Te

7、st;Wire Clk_Ea, Clk_Eb, Clk_Ec;Gen_Clk_E G1(Clk_Ea);/产生10个时钟脉冲,高、低电平持续时间分别为2个和5个时间单位。Gen_Clk_E#(5, 1, 3) (Clk_Eb);/产生5个时钟脉冲,高、低电平持续时间分别为1个和3个时间单位。Gen_Clk_E#(25, 8,10)(Clk_Ec);/产生25个时钟脉冲,高、低电平持续时间分别为8个和10个时间单位。endmodule相移时钟的产生Module Phase(Master_Clk,Slave_Clk);Output Master_Clk,Slave_Clk;reg Master_C

8、lk;wire Slave_Clk;parametert ON=2,tOFF=3,tPHASE_DELAY=1;Always begin#tON Master_Clk=0;#tOFF Master_Clk=1;endassign #tPHASE_DELAY Slave_Clk=Master_Clk;endmodule测试验证程序实例-2-4解码器及测试验证程序timescale1ns/1nsModule Dec2x4(A,B,Enable,Z);Input A, B, Enable;Output 0:3 Z;Wire Abar, Bbar;Not #(1,2) V0(Abar,A), V1(B

9、ar,B);nand#(4,3) N0(Z0,Enable,Abar,Bbar), N1(Z1,Enable,Abar,B), N2(Z2,Enable,A,Bbar), N3(Z3,Enable,A,B),endmodule画出电路结构2-4译码器测试电路Module Dec_Test;Reg Da,Db,Dena;wire0:3 Dz;/被测试的模块:Dec2x4 D1(Da,Db,Dena,Dz);InitialbeginDena=0;Da=0;Db=0;#10 Dena=1;#10 Da=1;#10 Db=1;#10 Da=0;#10 Db=0;#10 $stop;end/输出模拟Al

10、ways (Dena or Da or Db or Dz)$display(Attime%t, inputis%b%b%b,outputis%b, $time,Da,Db,Dena,Dz);endmodule测试模块执行时产生的输出Attime4,inputis000,outputis1111Attime10,inputis001,outputis1111Attime13,inputis001,outputis0111Attime20,inputis101,outputis0111Attime23,inputis101,outputis0101Attime26,inputis101,outpu

11、tis1101Attime30,inputis111,outputis1101Attime33,inputis111,outputis1100Attime36,inputis111,outputis1110Attime40,inputis011,outputis1110Attime44,inputis011,outputis1011Attime50,inputis001,outputis1011Attime54,inputis001,outputis0111测试实例-触发器主从D触发器Module MSDFF(D,C,Q,Qbar);Input D,C;Output Q,Qbar;Not NT

12、1(NotD,D), NT2(NotC,C), NT3(NotY,Y);Nand ND1(D1,D,C), ND2(D2,C,NotD), ND3(Y,D1,Ybar), ND4(Ybar,Y,D2), ND5(Y1,Y,NotC), ND6(Y2,NotY,NotC), ND7(Q,Qbar,Y1), ND8(Qbar,Y2,Q);endmodule1、画出电路结构图2、写出测试模块测试实例Module Test;Reg D,C;Wire Q,Qb;MSDFF M1(D,C,Q,Qb);Always #5C=C;InitialbeginD=0;C=0;#40 D=1;#40 D=0;#40

13、D=1;#40 D=0;$stop;endinitial$monitor(Time=%t:,$time,C=%b,D=%b,Q=%b,Qb=%b,C,D,Q,Qb);endmoduleTime=0:C=0,D=0,Q=x,Qb=xTime=5:C=1,D=0,Q=x,Qb=xTime=10:C=0,D=0,Q=0,Qb=1Time=15:C=1,D=0,Q=0,Qb=1Time=20:C=0,D=0,Q=0,Qb=1Time=25:C=1,D=0,Q=0,Qb=1Time=30:C=0,D=0,Q=0,Qb=1Time=35:C=1,D=0,Q=0,Qb=1Time=40:C=0,D=1,Q=

14、0,Qb=1Time=45:C=1,D=1,Q=0,Qb=1Time=50:C=0,D=1,Q=1,Qb=0Time=55:C=1,D=1,Q=1,Qb=0Time=60:C=0,D=1,Q=1,Qb=0Time=65:C=1,D=1,Q=1,Qb=0Time=70:C=0,D=1,Q=1,Qb=0Time=75:C=1,D=1,Q=1,Qb=0Time=80:C=0,D=0,Q=1,Qb=0Time=85:C=1,D=0,Q=1,Qb=0Time=90:C=0,D=0,Q=0,Qb=1Time=95:C=1,D=0,Q=0,Qb=1Time=100:C=0,D=0,Q=0,Qb=1Time=

15、105:C=1,D=0,Q=0,Qb=1Time=110:C=0,D=0,Q=0,Qb=1Time=115:C=1,D=0,Q=0,Qb=1Time=120:C=0,D=1,Q=0,Qb=1Time=125:C=1,D=1,Q=0,Qb=1Time=130:C=0,D=1,Q=1,Qb=0Time=135:C=1,D=1,Q=1,Qb=0Time=140:C=0,D=1,Q=1,Qb=0Time=145:C=1,D=1,Q=1,Qb=0Time=150:C=0,D=1,Q=1,Qb=0文本文件中读取向量$readmemb系统任务从文本文件中读取向量测试3位全加器电路的例子1、向量的前三位对应于

16、输入A;2、接下来的三位对应于输入B,再接下来的位是进位;3、八到十位是期望的求和结果4、最后一位是期望进位值的输出结果假定文件“test.vec”3位全加器电路Module Adder1Bit(A,B,Cin,Sum,Cout);Input A,B,Cin;Output Sum,Cout;Assign Sum=(AB)Cin;Assign Cout=(AB)|(A&Cin)|(B&Cin);endmodulemodule Adder3Bit(First,Second,Carry_In,Sum_Out,Carry_Out); input 0:2 First,Second; In

17、put Carry_In; output 0:2 Sum_Out; output Carry_Out; wire0:1 Car; Adder1Bit A1(First2,Second2,Carry_In,Sum_Out2,Car1), A2(First1,Second1,Car1,Sum_Out1,Car0), A3(First0,Second0,Car0,Sum_Out0,Carry_Out);endmodule测试module TestBench; Parameter BITS=11,WORDS=2;Reg 1:BITS Vmem1:WORDS;reg0:2 A,B,Sum_Ex;reg

18、Cin,Cout_Ex;integer J;wire0:2 Sum;wireCout;Adder3Bit F1(A,B,Cin,Sum,Cout);Initial begin$readmemb(test.vec,Vmem);for(J=1;J=WORDS;J=J+1)beginA, B, Cin, Sum_Ex, Cout_Ex=VmemJ;#5; /延迟5个时间单位等待电路稳定if(Sum!=Sum_Ex)|(Cout!=Cout_Ex) $display(*Mismatch on vector%b*, VmemJ);else $display(No mismatch on vector%b

19、, VmemJ);endendendmodulefor循环通过存储器中的每个字,将这些向量应用于待测试的模块No mismatch on vector 01001001000No mismatch on vector 01001111100向文本文件中写入向量具有写文件功能的系统任务:$fdisplay、$fmonitor和$fstrobeModule F_Test_Bench;Parameter BITS=11,WORDS=2;Reg 1:BITS Vmem1:WORDS;reg0:2 A, B, Sum_Ex;Reg Cin,Cout_ExInteger J;wire0:2 Sum;Wire Cout;Adder3BitF1(A,B,Cin,Sum,Cout);接下页向文本文件中写入向量Initial begin: INIT_LABLEinteger Mon_Out_File;Mon_Out_File=$fopen(mon.out);$readmemb(test.vec,Vmem);for(J=1;J=3)D

温馨提示

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

评论

0/150

提交评论