《《模块测试》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《模块测试》PPT课件.ppt(25页珍藏版)》请在三一办公上搜索。
1、Verilog HDL语法和设计进阶-仿真测试武 斌,综合与仿真的关系,行为仿真:行为的合理性和算法验证逻辑功能前仿真:RTL级仿真逻辑综合:把RTL级模块转换成门级 综合后仿真:用门级模型做验证布局布线:在门级模型基础上加了布线延时布局布线后仿真:与真实电路最接近的验证,Verilog模块的种类和用途,行为模块:Verilog HDL虚电路模块,在仿真时其功能与实体逻辑电路完全一致,用于产生或接受测试信号和数据,验证设计电路各部分的功能指标分配是否合理,但并没有生成实际电路Verilog HDL测试模块:用Verilog HDL描述的模块,可以用来产生测试信号序列并可以接收被测试模块的信号,
2、用于验证所设计的模块是否能正常运行往往不可综合成具体门级电路。,结构级转变为行为级,module muxtwo(out,a,b,sl);input a,b,sl;output out;not u1(ns1,sl);and#1 u2(sela,a,nsl);and#1 u3(selb,b,sl);or#2 u4(out,sela,selb);endmodule,out,Verilog HDL模块的测试,仿真用的 Verilog 模块,1.虚拟形式的 Verilog 模块 激励模块虚拟外设模块(rom,ram,接口等)这部分逻辑不用综合成电路,但为了验证我们的设计其行为必须与真实器件完全一致。2.
3、实例模块,实例调用,建立时钟,reg clk;initial begin clk=0;#(period)forever#(period/2)clk=!clk;end,reg clk;always begin#period/2 clk=0;#period/2 clk=1;end,建立信号,reg 7:0 ain,bin;reg clock;initial begin clock=0;ain=0;bin=3;end always#5 clock=clock;always(posedge clock)begin ain=ain+2;bin=bin+5;end,建立强制激励,initial begin
4、#10 assign q=1;#20 deassign q;end,initial begin#10 force q=0;#20 release q;end,在以上两个例子中,在10到20 这个时间段内,信号被强制赋值,而别处对该变量的赋值均无效。force的赋值优先级高于assign。如果先使用assign,再使用force对同一信号赋值,则信号的值为force所赋 的值,加法器测试模块,timescale 10ns/1nsinclude“myadder.v”module test;wire 8:0 sumout;reg 7:0 ain,bin;reg clock;initial begin
5、 clock=0;ain=0;bin=3;end always#5 clock=clock;,always(posedge clock)begin ain=ain+2;bin=bin+5;endmyadder myadder1(.clk(clock),.a(ain),.b(bin),.sum(sumout);endmodule,仿真波形,2,6,4,8,3,8,13,10,0,28,23,18,3,10,17,38,31,24,存储器建模 ROM,timescale 1ns/10ps module myrom(read_data,addr,read_en_);input read_en_;in
6、put 3:0 addr;output 3:0 read_data;reg 3:0 read_data;reg 3:0 mem 0:15;initial$readmemb(“my_rom_data”,mem);always(addr or read_en_)if(!read_en_)read_data=memaddr;endmodule,my_rom_data 0000 0101 1100 0011 1101 0010 0011 1111 1000 1001 1000 0001 1101 1010 0001 1101,存储器建模 RAM,timescale 1ns/1ns module ram
7、(data,addr,ena,read,write);inout 7:0 data;input 9:0 addr;input ena,read,write;reg 7:0 ram8 hff:0;assign#20 data=(read end endmoduleRAM模型比ROM模型稍微复杂:它必须具有双向总线实现读写能力;,存储器的加载,使用循环把值赋给存储器数组。for(i=0;imemsize;i=i+i)/initialize memory memai=wordsize1b1;调用$readmem系统任务。/从文件 mem_file.txt 中,把初始数据存入存储器(mem)的每个单元
8、$readmemb(“mem_file.txt”,mem);注意:上面两项必须写 在initial 块中,加载这些初始化数据不需要时间。,激励源的 Verilog 模块,timescale 1ns/1nsdefine timeslice 200module sigs(ack,clock,read,write,addr,data);input ack;output clock,read,write;output 15:0 addr;inout 7:0 data;reg clock,read,write;reg 15:0 addr;reg w_r;/used to record if read o
9、r writereg 7:0 DataToRam;/used to stack the dataassign#10 data=(w_r)?hzz:DataToRam;initial begin clock=0;w_r=0;DataToRam=0;,addr=16 h 0000;end always#(timeslice/2)clock=clock;always(posedge ack)if(w_r=0)begin#(5*timeslice)write=1;#(timeslice)write=0;endelse begin#(5*timeslice)read=1;#(timeslice)read
10、=0;end always(posedge ack)begin DataToRam=DataToRam+2;addr=addr+1;endendmodule 从被测试模块输出的 ack 信号逐一发出读/写、地址、数据至被测试模块,顶层测试 Verilog 模块,timescale 1ns/1nsinclude 可综合模块.v.include 外围电路.v.include 激励信号.v.module top;wire 连线定义.Reg 初试化块中寄存器定义.initial begin 定义波形记录、输入数据文件、记录输出文件、监视重要信号、记录重要时刻、设置仿真时间等。end,顶层测试 Veri
11、log 模块,/信号模块 xh1(.clock(clk),.reset(rst),.ack(ackn).);./可综合模块 mysj1(.clock(clk),reset(rst),.ack(ackn).);./外围模块 ram1(.read(rd),.write(wrt),.data(databus).);.endmodule,仿真和综合工具概述,常用的仿真工具:-Verilog-XL-NC-Verilog-ModelSim-VeriBest-ViewLogic-.,常用的综合工具:-Synplify-Exemplar-Synopsys Express-Synopsys Designer-.
12、,设计示例-仿真,把本模块产生的测试信号data、clock、clearb,输入实例reg_4bit以观察输出信号qout检查设计正确与否。实例reg_4bit引用了第五章例子hardreg;,timescale 10ns/1nsinclude“hardreg.v”module hardreg_top;reg clock,clearb;reg 3:0 data;wire 3:0 qout;define STIM#100 data=4b/宏定义 stim,可使源程序简洁event end_first_pass;/定义事件end_first_passinitial begin clock=0;clearb=1;end,设计示例三(续),initial begin stim 0000;/宏定义stim引用 stim 0001;.stim 1111;endalways#50 clock=clock;#200 end_first_pass;/延迟200个单位时间,触发事件$finish;/结束仿真hardreg reg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout);endmodule,仿真时序,仿真时序,