首页计算机计算机工程硬件描述语言和数字系统设计 06 第6章 测试模块.pptx

06 第6章 测试模块.pptx

页数:34页文件大小:318.8 KB来源: 硬件描述语言和数字系统设计ppt课件

本课件说明编写测试模块的目的与基本结构,介绍initial块、时钟与复位激励的产生方式、系统任务对波形的观察与打印,并通过完整实例演示测试平台的搭建过程,同时给出常用仿真工具的工程建立与波形查看步骤。

第6章测试模块语法章节封面,标示本章涵盖预备知识、测试的目的、测试模块的编写等内容
预备知识仿真说明图,6.2测试的目的6.3测试模块的编写6.4实例6.5仿真工具的使用主要内容
预备知识(续1)知识点页,列出模块实例化方法、延时# n语法说明、`timescale语法说明等知识点
查看本课件的文字版(共 34 页,供检索与复制)

第1页:第6章测试模块语法

硬件描述语言和数字系统设计

第2页:预备知识

6.2测试的目的6.3测试模块的编写6.4实例6.5仿真工具的使用主要内容

第3页:预备知识(续1)

6.1.1
模块实例化方法
6.1.2
延时# n语法说明
6.1.3
`timescale语法说明

第4页:模块实例化方法

module DFF (d, clk, rst, q, qb); input d,clk,rst; output q,qb; reg q,qb; always @ (posedge clk or negedge rst)if (!rst) beginq<=1’b0; qb<=1’b1; endelse beginq<=d; qb<=~d; endendmodulemoduleREG4( d, clk, clr, q, qb); …endmodule模块例化方法1-位置映射;

第5页:module DFF 代码示例

module DFF (d, clk, rst, q, qb); …….endmodulemoduleREG4( d, clk, clr, q, qb); output [3: 0] q, qb; input [3: 0] d; input clk, clr; DFF d0 (d[0], clk, clr, q[0], qb[0]); DFF d1 (d[1], clk, clr, q[1], qb[1]); DFF d2 (d[2], clk, clr, q[2], qb[2]); DFF d3 (d[3], clk, clr, q[3], qb[3]); endmodule模块实例化方法1:位置映射;

第6页:可以将模块的实例通过端口连接起来构成一个

  • 大的系统或元件。
  • 在上面的例子中,REG4有模块DFF的四个实例。注意,每个实例都有自己的名字(d0, d1, d2, d3)。实例名是每个对象唯一的标记,通过这个标记可以查看每个实例的内部。
  • 实例中端口的次序与模块定义的次序相同(-位置映射)。
  • 模块实例化与调用程序不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。模块例化方法1-位置映射:

第7页:module DFF 代码示例(续1)

module DFF (d, clk, rst, q, qb); ………….Endmodulemodule REG4( d, clk, clr, q, qb); output [3: 0] q, qb; input [3: 0] d; input clk, clr; DFF d0 (.d(d[0]), .clk(clk), .rst(clr), .q(q[0]), .qb(qb[0])); DFF d1 (.d(d[1]), .clk(clk), .rst(clr), .q(q[1]), .qb(qb[1])); DFF d2 (.d(d[2]), .clk(clk), .rst(clr), .q(q[2]), .qb(qb[2])); DFF d3 (.d(d[3]), .clk(clk), .rst(clr), .q(q[3]), .qb(qb[3])); endmodule名称映射的语法:.内部信号(外部信号)模块例化方法2-名称映射:;

第8页:module comp 代码示例

module comp (o1, o2, i1, i2); output o1, o2; input i1, i2; . . .endmodulemodule test; comp c1(Q, R, J, K);//名称映射comp c3(Q , , J, K);//输入端口i2、输出端口o2没有连接endmodule输出端口没有连接时,通常会产生warning注意事项:没有连接的输入端口初始化值为x。要特别注意可能会引起芯片内电路逻辑出错!!!;

第9页:模块实例化时实例必须有一个名字

  • 模块实例化时实例必须有一个名字。
  • 使用位置映射时,端口次序与模块的说明相同。
  • 使用名称映射时,端口次序与位置无关module comp (o1, o2, i1, i2);output o1, o2;input i1, i2;. . .endmodulemodule test;comp (Q, R , J, K);//error!!!unNamed instancecomp (.i1(J), , , .o1(Q));//error!!! unNamed instanceendmodule注意事项:

第10页:module muxtwo 代码示例

在测试模块中常常使用简单延时(#延时)来施加不同数值的激励,或在行为模型中模拟实际延时。module muxtwo (out, a, b, sl); input a, b, sl; output out; reg out; always @( sl or a or b)if (! sl)#10 out = a;//从b到out延时12个时间单位endmodule在简单延时中可以使用模块参数parameter:module tb_clock_gen (clk); output clk; reg clk; parameter CYCLE=20; initial clk = 0; always#(CYCLE/2)clk = ~clk; endmodule6.1.2延时# n语法说明;

第11页:经过

wire out; assign#1out = in1|in2; 经过1个单位时间延时,右边表达式新结果被赋给左边目标。例如,如果在时刻5,信号in1值发生变化,则在时刻6(5 +1),右端表达式重新运算的结果被赋于左边信号out。延时# n与连续赋值一起使用:;

第12页:in1 时序逻辑示例

reg out; always@(in1 or in2)out= #1 in1|in2; 经过1个单位时间延时,右边表达式刷新结果被赋给左边目标。例如,如果在时刻5,信号in1值发生变化,则在时刻6(5 +1),右端表达式重新运算的结果被赋于左边信号out。延时# n与过程块内阻塞赋值一起使用:;

第13页:带延时的D触发器测试

reg out; always@(posedge clk)out<= #1 in1|in2; 在时钟上升沿后,经过1个单位时间延时,右边表达式的新结果被赋给左边目标。例如,如果在时刻5,信号in1值发生变化,则在时刻6(5 +1),右端表达式重新运算的结果被赋于左边信号out。;

第14页:说明仿真时间单位及精度格式

  • `timescale说明仿真时间单位及精度格式:`timescale <time_unit> / <time_precision>如:`timescale 1 ns / 100 pstime_unit:延时或时间的测量单位time_precision:延时值超出精度要先舍入后使用
  • `timescale必须在模块之前出现`timescale 1 ns / 10 ps// All time units are in multiples of 1 nanosecondmodule MUX2_1 (out, a, b, sel);output out;input a, b, sel;not#1not1( sel_, sel);and#2and1( a1, a, sel_);and#2and2( b1, b, sel);or#1or1( out, a1, b1);endmodule6.1.3`timescale语法说明

第15页:time_precision不能大

  • 于time_unit
  • time_precision和time_unit的表示方法:integer unit_string
  • integer :可以是1,10,100
  • unit_string:可以是s(second),ms(millisecond),us(microsecond),ns(nanosecond),ps(picosecond),fs(femtosecond)
  • 以上integer和unit_string可任意组合
  • precision的时间单位应尽量与设计的实际精度相同。
  • precision是仿真器的仿真时间步。
  • 若time_unit与precision_unit差别很大将严重影响仿真速度。
  • 如说明一个`timescale 1s / 1ps,则仿真器在1秒内要扫描其事件序列1012次;而`timescale 1s/1ms则只需扫描103次。
  • 如果没有timescale说明将使用缺省值,一般是ns。

第16页:测试的目的

测试的目的

  • 被测试器件DUT是一个二选一多路器。
  • 测试装置(test fixture/testbench)提供测试激励及验证机制。

第17页:测试模块的3要素:1)产生激励

测试模块的3要素:

  • 1)产生激励(输入信号波形)。
  • 2)将输入激励加入到测试模块并收集其输出响应。
  • 3)将响应输出与期望值进行比较。

第18页:施加激励方式:产生

施加激励方式
产生激励并加到设计有很多种方法。一些常用的方法有:
  • 从一个initial块中施加线性激励
  • 从一个循环或always块施加激励
  • 从一个向量或整数数组施加激励
  • 记录一个仿真过程,然后在另一个仿真中回放施加激励6.3测试模块的编写

第19页:通常需要两类波形:1.一类是具有重复模式

  • 的波形,例如时钟波形。2.另一类是一组确定值的波形,如输入的图像数据。

第20页:测试模块的编写

确定值序列产生方法产生确定值序列的最佳方法是使用initial语句。initial内使用阻塞赋值语句外延时,例如:initialbeginReset = 0;#100 Reset = 1;#80 Reset = 0;#30 Reset = 1;end

第21页:内采用阻塞赋值语句内延时

initial内采用阻塞赋值语句内延时,也能够按如下实例所示产生波形。initialbeginReset = 0;Reset = #100 1;Reset = #80 0;Reset = #30 1;end

第22页:内采用非阻塞赋值语句

initial内采用非阻塞赋值语句:如果使用绝对时延,可用带有语句内时延的非阻塞性过程性赋值,例如,initialbeginReset <= 0;Reset <= #100 1;Reset <= #180 0;Reset <= #210 1;end

  • 这三个initial语句产生的波形与图11-1中所示的波形一致。

第23页:常用时钟信号的激励产生方法

如:常用时钟信号的激励产生方法:reg clk_A; parameterCLK_PER= 10; initialclk_A = 0; always#(CLK_PER /2) clk_A = ~ clk_A; 6.3.2重复值序列产生方法-always语句;

第24页:实例

寄存器变量被综合成触发器或者线的例子电路功能文件proced_reg.v中定义:`timescale 1 ns / 10 psmodule procedure_reg(clk,rst,a,c); input clk,rst,a; output c; regc; reg b; always @(posedge clk or negedge rst)//always @(rst or a)if(!rst) b<=0; else b<=a; always @(posedge clk or negedge rst)//always @(rst or b)if(!rst) c<=1; else c<=b; endmodule;

第25页:其测试模块编写测试文件test_

proced_reg.v中
`timescale 1 ns / 10psmoduletest_procedu_reg;regclk_test,rst_test;rega_test;wirec_test;procedure_regu1(.clk(clk_test),.rst(rst_test),.a(a_test),.c(c_test));initialbeginclk_test=0;rst_test=1;#10rst_test=0;#10rst_test=1;#100a_test=0;#200a_test=1;#100a_test=0;endalways#50clk_test=~clk_test;endmodule

第26页:仿真工具的使

用电路功能文件proced_reg.v中定义过程块敏感量为@(posedge clk ornegedge rst)时的仿真波形:

第27页:过程块敏感量

为@(posedge clk or negedge rst)时的电路图

第28页:仿真工具的使(续1)

过程块敏感量为always @(rst or a)/(rst or b)时的仿真波形

第29页:过程块敏感量为always @

(rst or a)/(rst or b)时的电路图

第30页:仿真工具的使(续2)

问题1:如果文件proced_reg.v中定义:module procedure_reg(clk,rst,a,c); input clk,rst,a; output c; reg b,c; always @(posedge clk or negedge rst)//always @(rst or a)if(!rst) b<=0; else b<=a;else c<=b; endmodule那么仿真波形又是怎样?电路图又是怎样?;

第31页:问题1-答案-电路图

问题1-答案-电路图

第32页:Verilog代码示例

问题2:如果文件proced_reg.v中定义:module procedure_reg(clk,rst,a,c); input clk,rst,a; output c; reg b,c;else b<=a; always @(posedge clk or negedge rst)//always @(rst or b)if(!rst) c<=1; else c<=b; endmodule那么仿真波形又是怎样?电路图又是怎样?;

第33页:问题2-答案-电路图

问题2-答案-电路图

第34页:课后练习:常见公司数字IC设计招聘题目

课后练习常见公司数字IC设计招聘题目(计数器):1.用D触发器做个4进制的计数。(华为)2.实现N位Johnson Counter, N=5。(南山之桥)3.用你熟悉的设计方式设计一个可预置初值的7进制循环计数器,15进制的呢?(仕兰微电子)4.用VERILOG或VHDL写一段代码,实现10进制计数器。

顶部目录