资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Verilog HDL,语法和,设计,进阶,-,仿真测试,武 斌,1,综合与仿真的关系,行为仿真,:,行为的合理性和算法验证,逻辑功能前仿真:,RTL,级仿真,逻辑综合,:,把,RTL,级模块转换成门级,综合后仿真,:,用门级模型做验证,布局布线,:,在门级模型基础上加了布线延时,布局布线后仿真:,与真实电路最接近的验证,2,Verilog,模块的种类和用途,行为模块:,Verilog HDL,虚电路,模块,,在仿真时其功能与实体逻辑电路完全一致,用于,产生,或接受,测试信号和数据,,验证,设计电路,各部分的功能指标分配是否合理,,但并没有生成,实际电路,Verilog HDL,测试模块,:,用,Verilog HDL,描述的模块,可以用来产生测试信号序列并可以接收被测试模块的信号,用于验证所设计的模块是否能正常运行往往不可综合成具体门级电路。,3,结构级转变为行为级,module mu,x,two,(,o,ut,a, b,s,l,);,input,a,b,sl;,output,o,ut,;,not u1(ns1, sl);,and #1 u2(sela, a, nsl);,and #1 u3 (selb, b, sl);,or #2 u4(out,sela,selb);,endmodule,out,a,b,sl,selb,sela,nsl,U1,U2,U3,U4,4,Verilog HDL,模块,的,测试,被测模块,激励和控制信号,输出响应和验证,5,仿真用,的 Verilog,模块,1.,虚拟,形式的 Verilog 模块,激励模块,虚拟外设模块(,rom,ram,接口等),这部分逻辑不用综合成电路,但为了验证我们的设计其行为必须与真实器件完全一致。,2.,实例模块,实例调用,6,建立时钟,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,7,建立信号,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,8,建立强制激励,initial,begin,#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,所赋 的值,9,加法器测试模块,timescale 10ns/1ns,include “myadder.v”,module test,;,wire 8:0 sumout;,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,m,yadder myadder1,(,.,clk,(,clock),.,a,(ain),.,b,(bin),.sum(sumout),);,endmodule,10,仿真波形,2,6,4,8,3,8,13,10,0,28,23,18,3,10,17,38,31,24,11,存储器建模,ROM,timescale 1ns/10ps,module myrom(read_data,addr,read_en_);,input read_en_;,input 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,12,存储器建模,RAM,timescale 1ns/1ns,module ram(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 ,always (posedge write),begin #10 ramaddr = data; end,endmodule,RAM,模型比,ROM,模型稍微复杂:,它必须具有双向总线实现读写能力;,13,存储器的加载,使用循环把值赋给存储器数组,。,for(i=0;i end_first_pass;/,延迟200个单位时间,触发事件,$finish;/,结束仿真,hardreg reg_4bit(.d(data),.clk(clock), .clrb(clearb), .q(qout);,endmodule,20,仿真时序,21,仿真时序,22,23,24,25,
展开阅读全文