第七讲 模块测试_第1页
第七讲 模块测试_第2页
第七讲 模块测试_第3页
第七讲 模块测试_第4页
第七讲 模块测试_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、Verilog HDL 语法和语法和设计设计进阶进阶- -仿真测试仿真测试 武武 斌斌 Verilog HDL模块模块的的测试测试 被测模块被测模块 激励和控激励和控 制信号制信号 输出响应输出响应 和验证和验证 Verilog HDL测试模块测试模块: 用用Verilog HDLVerilog HDL描述的模块,可以用来产生测试信描述的模块,可以用来产生测试信 号序列并可以接收被测试模块的信号,用于验证所号序列并可以接收被测试模块的信号,用于验证所 设计的模块是否能正常运行,设计的模块是否能正常运行,一般不可综合成具体一般不可综合成具体 门级电路。门级电路。 out a b sl selb

2、sela nsl 编译、仿真引导语句编译、仿真引导语句 编译引导语句用编译引导语句用 “ ” 起头常用的编译引导有起头常用的编译引导有 : include timescale uselib resetall timescale用于说明程序中的时间单位和仿真精用于说明程序中的时间单位和仿真精 度度,语句必须放在模块边界前面语句必须放在模块边界前面 举例说明:举例说明: timescale 1ns/100ps and #2 and1(a1, a, nsel); include 在编译时能把其指定的整个文件包括进在编译时能把其指定的整个文件包括进 来一起处理来一起处理, , 举例说明:举例说明: i

3、nclude “global.v” VerilogHDL系统任务和函数系统任务和函数 $ $ 符号表示符号表示 Verilog 的系统任务和函数的系统任务和函数 常用的系统任务和函数有下面几种:常用的系统任务和函数有下面几种: $time /找到当前的仿真时间找到当前的仿真时间 $display, $monitor /显示和监视信号值的变化显示和监视信号值的变化 $stop /暂停仿真暂停仿真 $finish /结束仿真结束仿真 例:例: - initial $monitor($time,”a=%b, b=%b”, a, b); /每当每当a 或或b值变化时该系统任务都显示当前的值变化时该系统

4、任务都显示当前的 仿真时刻并分别用二进制和十六进制显示信号仿真时刻并分别用二进制和十六进制显示信号 a和和 b的值的值 仿真用的仿真用的 Verilog Verilog 结构(不可综合)结构(不可综合) 4 UDPs 4 forkjoin 块块 4 过程连续赋值语句过程连续赋值语句 assign 和和 deassign 4 force 和和 release 4 7. 部分操作符部分操作符 4 = = = 4 != = initial 循环语句:循环语句: repeat forever while for 的非结构用法的非结构用法 3. 一部分数据类型一部分数据类型 event real tim

5、e wait 建立测试信号建立测试信号时钟,复位时钟,复位 采采always,fovever, for,repeat 等等 如:如: reg clk; always begin #period/2 clk=0; #period/2 clk=1; end reg clk; initial begin clk=0; fovever begin #period/2 clk=0; #period/2 clk=1; end end 复位:略复位:略 建立信号建立信号 reg 7:0 ain, bin; reg clock; initial begin clock = 0; ain = 0; bin=3;

6、 end always #5 clock = clock; always (posedge clock) begin ain = ain + 2; bin = bin +5; end initial begin #5 a=0; #5 a=2; #5 a=4; end initial fork #5 b=3; #10 b=8; #15 b=13; join 建立测试信号建立测试信号数据数据 建立强制激励建立强制激励 initial begin #10 assign q= 1; #20 deassign q; end initial begin # 10 force q=0; # 20 relea

7、se q; end 在以上两个例子中,在在以上两个例子中,在10到到20 这个时间段内,信这个时间段内,信 号被强制赋值,而别处对该变量的赋值均无效。号被强制赋值,而别处对该变量的赋值均无效。 force的赋值优先级高于的赋值优先级高于assign。 如果先使用如果先使用assign,再使用再使用force对同一信号赋值,对同一信号赋值, 则信号的值为则信号的值为force所赋所赋 的值的值 加法器测试模块加法器测试模块 timescale 10ns/1ns include “myadder.v” module test; wire 8:0 sumout; reg 7:0 ain, bin;

8、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 仿真波形仿真波形 2648 3813 100 282318 31017383124 存储器建模存储器建模 ROMROM timescale 1ns/10ps module myrom(read_data,addr,read_en_); input read_en_; input 3:0 addr; output

9、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_) #10 read_data=memaddr; else; endmodule my_rom_data 0000 0101 1100 0011 1101 0010 0011 1111 1000 1001 1000 0001 1101 1010 0001 1101 存储器建模存储器建模 RAMRAM RAMRAM模型比模型比ROMROM模型稍

10、微复杂:模型稍微复杂: 它必须具有双向总线实现读写能力;它必须具有双向总线实现读写能力; 虚拟存储器的加载虚拟存储器的加载 使用循环把值赋给存储器数组使用循环把值赋给存储器数组。 for(i=0;imemsize;i=i+i) / initialize memory memai=wordsize1b1;/ 位拼接的一种位拼接的一种 调用调用$readmem系统任务。系统任务。 /从文件从文件 mem_file.txt 中中, 把初始数据存入存储把初始数据存入存储 器器(mem)的每个单元的每个单元 $readmemb(“mem_file.txt”,mem); 注意:上面两项必须写注意:上面两项

11、必须写 在在initial 块中,加载这些初块中,加载这些初 始化数据不需要时间。始化数据不需要时间。 else begin # (5 * timeslice) read = 1; # (timeslice) read = 0; end always (posedge ack) begin DataToRam = DataToRam + 2; addr = addr + 1; end endmodule /信号模块信号模块 xh1( .clock( clk), .reset(rst), .ack(ackn) . . . . .); . . . . . /可综合模块可综合模块 mysj1(. clock(clk), reset(rst),.

温馨提示

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

评论

0/150

提交评论