西电verilog课件06

上传人:E**** 文档编号:104283480 上传时间:2019-10-08 格式:PDF 页数:15 大小:127.25KB
返回 下载 相关 举报
西电verilog课件06_第1页
第1页 / 共15页
西电verilog课件06_第2页
第2页 / 共15页
西电verilog课件06_第3页
第3页 / 共15页
西电verilog课件06_第4页
第4页 / 共15页
西电verilog课件06_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《西电verilog课件06》由会员分享,可在线阅读,更多相关《西电verilog课件06(15页珍藏版)》请在金锄头文库上搜索。

1、1 第六章测试与仿真第六章测试与仿真 2 6.1 概 述6.1 概 述 测试平台(testbench)通常指一段代码,用 来为设计产生特定的输入序列,也用来观测输出 的响应。通常采用VHDL、Verilog等语言编写,有 时也会电影一些外部数据文件或C函数。 3 6.16.1 a sel b gate1 net1 gate2 gate3 gate4 net3 net2 out 被测试模块被测试模块 DUT(Device under Test) 测试平台(test bench) 注:这个系统是一个完全封闭的系统:系统没有来自外部的 输入信号,也没有输出信号。测试平台是系统的控制核心。 4 6.1

2、6.1 ?测试文件 Data type说明 调用受测元件 产生输入激励信号 观测电路输出结果 module test_file; endmodule 5 6.16.1 ? 例 脉动计数器 顶层模块 module ripple_carry_counter(q,clk,reset); output 3:0 q; input clk, reset; /生成4个T触发器(T_FF)的实例 T_FF tff0(.q(q0), .clk(clk), .reset(reset); T_FF tff1(.q(q1), .clk(q0), .reset(reset); T_FF tff2(.q(q2), .cl

3、k(q1), .reset(reset); T_FF tff3(.q(q3), .clk(q2), .reset(reset); endmodule 6 触发器T_FF: module T_FF(q,clk,reset); output 3:0 q; input clk, reset; wire d; /调用D触发器实例 D_FF dff0(.q(q), .d(d),.clk(clk), .reset(reset); /调用verilog基本门 not n1(d,q); endmodule 6.16.1 7 6.16.1 触发器D_FF: module D_FF(q,d,clk,reset);

4、 output q; input d,clk, reset; reg q; always (posedge clk or negedge reset) if (reset = 1b0) q = 1b0; else q =d; endmodule 8 6.16.1 测试平台 module test_counter; wire 3:0 q; reg clk, reset; / 调用被测模块 ripple_carry_counter U1(.q(q), .clk(clk), .reset(reset); /产生时钟信号/产生reset信号/监视输出 initial initialinitial cl

5、k = 1b0; begin $monitor ( $time, always reset = 1b0; “output :q = %d”, #5 clk =clk; #15 reset =1b1; q); #180 reset = 1b0; #10 reset = 1b1; #20 $finish; end endmodule 9 6.16.1 注:波形编辑器通常对小设计有用,但对总线和控制信号较 多的设计显得过于复杂而不适用,这时通常用文字显示工具。 10 6.2 测试平台技术6.2 测试平台技术 编写测试验证程序三个步骤编写测试验证程序三个步骤 ?产生输入向量(激励) ? 将输入激励加入

6、到测试模块并给出相应的输出结果 ? 将输出结果与设计要求相比较 11 6.26.2 ? 例:101 Moore序列检测器 module moore_detector(x, rst, clk, z); input x,rst,clk; output z; reg1:0current; parameter1:0a=0,b=1,c=2,d=3; always (posedge clk) if (rst) current =a; else case (current) a: current = x ? b:a; b: current = x ? b:c; c: current = x ? d:a; d

7、: current = x ? b:c; default:current = a; endcase assign z=(current=d)? 1b1:1b0; endmodule 12 6.2 一、产生输入向量(激励波形)一、产生输入向量(激励波形) 两类波形:具有重复模式的波形; 一组指定的值确定的波形; 13 6.2 ? 值序列 最佳方法是使用initial语句。 例 带延时的向量赋值,产生值序列 initial begin reset = 1b1; #100 reset = 1b0; #80 reset = 1b1; #30 reset = 1b0; end 例 输入向量初始化 ini

8、tial begin clk = 1b0; reset = 1b1; in =1b1; end 14 6.2 重复产生一个值序列,可以使用always或repeat等循环语句 代替initial语句 例 always循环 always begin #40 in = 1b0; #20 in = 1b1; end 例 repeat循环 initial begin in = 1b1; repeat (10) begin #40 in = 1b0; #20 in = 1b1; end end 15 6.2 ? 重复模式 例 使用always语句设计 时钟产生器 initial clk = 1b0; a

9、lways #20 clk = clk; 例 使用forever语句产生高低 电平持续时间不同的时钟 initial forever begin # 20 clk = 1b1; # 40 clk = 1b0; end 16 6.2 always begin # 2 master_clk = 1b0; # 3 master_clk = 1b1; end assign slave_clk = #1 master_clk; 例 产生2个时钟,其中一个时钟是另一个时钟的相移时钟 2 5 7 10 12 15 3 6 8 11 13 16 Slave_clk master_clk x z 17 6.2

10、? 针对101 Moore序列检测器 module test_moor_dector; initial begin reg x,reset,clock; clock=1b0; wire z; x=1b0; reset=1b1; moore_detector MUT (.x(x), end .rst(reset), .clk(clock), initial #24 reset=1b0; .z(z) always #5 clock=clock; ); always #7 x=x; endmodule 18 6.2 二、对仿真的控制二、对仿真的控制 ? 在initial过程块中加入系统控制任务$fi

11、nish或 $stop结束仿真,从而避免程序死循环。 ? 设置数据限制。通过对输入数据的数量进行设置 来达到控制仿真时间的目的。 19 6.2 module test_moor_dector; initial begin reg x,reset,clock; clock=1b0; wire z; x=1b0; reset=1b1; #189 $finish; moore_detector MUT (.x(x), end .rst(reset), .clk(clock), initial #24 reset=1b0; .z(z) always #5 clock=clock; ); always

12、#7 x=x; endmodule 20 6.2 module test_moor_dector; initial begin reg x,reset,clock; clock=1b0; wire z; x=1b0; reset=1b1; moore_detector MUT (.x(x), end .rst(reset), .clk(clock), initial #24 reset=1b0; .z(z ) ); initial repeat(13) #5 clock=clock; initial repeat(10) #7 x=$random; endmodule 21 6.2 注:用ra

13、ndom生成数据比较简单,但是分 析输出时比较困难,因为它的输入是不 可预测的。但对于大规模电路来说,随 机数据比可控数据更有用。 22 6.2 三、采用同步数据三、采用同步数据 前面的例子中时钟和数据采用独立时序,当 同时施加几组数据时,数据与系统时钟的同步将 出现困难。改变时钟频率会造成带测试模块所有 输入数据时序的改变。应采用事件控制语句来同 步时钟和数据。 23 6.2 module test_moor_dector; initial begin reg x,reset,clock; clock=1b0; wire z; x=1b0; reset=1b1; moore_detector

14、 MUT (.x(x), end .rst(reset), .clk(clock), initial #24 reset=1b0; .z(z ) ); initial repeat(13) #5 clock=clock; initial forever (posedge clock) #3 x=$random; endmodule 24 6.2 四、输出结果的同步显示四、输出结果的同步显示 用前面介绍的方法可以用于同步观察待测模 块的输出或内部信号。 initial #24 reset=1b0; initial repeat(13) #5 clock=clock; initial forever (posedge clock) #3 x=$random; initial forever (posedge clock) #1 $displayb(z); 25 6.2 当采用层次化命名时,可以显示待测模块内部变 量和内部信号。 initial #24 reset=1b0; initial repeat(13) #5 clock=clock; initial forever (posedge clock) #3 x=$random;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号