北大数字集成电路课件--4_verilog_testfixture的编写
合集下载
北京大学Verilog HDL 语言讲义

3.2 运算符及表达式 ..........................................................................................................................11 3.2.1 逻辑运算符 ..........................................................................................................................11 3.2.2 位运算符 ..............................................................................................................................12 3.2.3 移位运算符 ..........................................................................................................................12
二 VERILOG 模块的基本概念............................................................................................................ 4
2.1 模块的结构 ................................................................................................................................... 6 2.1.1 模块声明和端口定义 ........................................................................................................... 6 2.1.2 模块内容 ............................................................................................................................... 6
二 VERILOG 模块的基本概念............................................................................................................ 4
2.1 模块的结构 ................................................................................................................................... 6 2.1.1 模块声明和端口定义 ........................................................................................................... 6 2.1.2 模块内容 ............................................................................................................................... 6
Verilog语法基础PPT教案学习

#10 num <= rega << 5 ; // num =
01_1000_0000
#10 regb <= rega << 5 ; // regb =
1000_0000
#20 num <= rega >> 3; // num =
00_0000_0001
#20 regb <= rega >> 3 ; // regb =
x
to b");
x
else $display(" a is not
equal to b");
a = 2'b1x;
z
b = 2'b1x;
0
if (a === b)
0
$display(" a is
0
identical to b");
1
else
$display(" a is not
Case等只i能d用e于nt行i为ca描l述t,o不b能"用);于RTL描述。
regc; reg val;
initial begin rega = 4'b0011; regb = 4'b1010; regc = 4'b1x10;
end initial fork
#10 val = rega == regb ; // val = 0
#20 val = rega != regc; // val = 1
第9页/共72页
注意逻辑等与 case等的差别 2‘b1x==2’b0x
值为0,因为不相等 2‘b1x==2’b1x
值为x,因为可能不 相等,也可能相等
11=数字集成电路设计流程PPT课件

这样一个过程通常被称为自顶向下的设计方法, 或者是分层设计法。
Zhao junxia
11
设计输入
数字集成电路设计
设计输入是指编写一个基于语言的描述文 件,并以电子格式存入计算机中。
在现代设计中,它是通过用Verilog HDL这 样的硬件描述语言来进行描述的。
与诸如自底向上的人工输入等其他方式相 比较,编写一个大型电路的HDL行为描述 文件并实现门级电路综合所花费的时间要 少得多。
由基本门组成各个组合与时序逻 辑单元
由逻辑单元组成各个独立的功能 模块
由各个功能模块连成完整系统
进行系统的测试与性能分析 5
数字集成电路设计
BOTTOM-UP
自底向上的设计方法是从传统的手工设计发展而 来的。在进行手工电路设计时,一个硬件系统的 实现过程是从选择具体的元器件开始的。
这种设计过程的优点是符合硬件设计工程师的传 统习惯,缺点是在进行底层设计时,缺乏对整个 系统总体性能的把握。如果在整个系统完成后发 现性能还需改进,则修改起来就比较困难。
Zhao junxia
7
TOP-DOWN
数字集成电设计
Zhao junxia
8
设计规范 1
设计划分 2
设计输入
3
HDL行为建模
仿真与功能验证 4
设计整合
5
与验证
预综合结束 6
门级综合与
7
工艺映射
Zhao junxia
数字集成电路设计
后综合
8
设计确认
后综合
9
定时验证
测试生成
10
与故障模拟
布局与布线
随着系统规模与复杂度的提高,这种设计方法的 缺点就越来越突出,因而逐渐被自顶向下的设计 方法所取代。
Zhao junxia
11
设计输入
数字集成电路设计
设计输入是指编写一个基于语言的描述文 件,并以电子格式存入计算机中。
在现代设计中,它是通过用Verilog HDL这 样的硬件描述语言来进行描述的。
与诸如自底向上的人工输入等其他方式相 比较,编写一个大型电路的HDL行为描述 文件并实现门级电路综合所花费的时间要 少得多。
由基本门组成各个组合与时序逻 辑单元
由逻辑单元组成各个独立的功能 模块
由各个功能模块连成完整系统
进行系统的测试与性能分析 5
数字集成电路设计
BOTTOM-UP
自底向上的设计方法是从传统的手工设计发展而 来的。在进行手工电路设计时,一个硬件系统的 实现过程是从选择具体的元器件开始的。
这种设计过程的优点是符合硬件设计工程师的传 统习惯,缺点是在进行底层设计时,缺乏对整个 系统总体性能的把握。如果在整个系统完成后发 现性能还需改进,则修改起来就比较困难。
Zhao junxia
7
TOP-DOWN
数字集成电设计
Zhao junxia
8
设计规范 1
设计划分 2
设计输入
3
HDL行为建模
仿真与功能验证 4
设计整合
5
与验证
预综合结束 6
门级综合与
7
工艺映射
Zhao junxia
数字集成电路设计
后综合
8
设计确认
后综合
9
定时验证
测试生成
10
与故障模拟
布局与布线
随着系统规模与复杂度的提高,这种设计方法的 缺点就越来越突出,因而逐渐被自顶向下的设计 方法所取代。
Verilog课件4

unit:0(s)到-15(fs)之间的整数,表示时间度量 precision:要显示的十进制小数位数。
suffix:在时间值后显示的字符串
min_width:显示前三项的最小宽度
2016年11月15日 14
验证系统中的任务(task)及函数(function)
Verilog读取当前仿真时间的系统函数
2016年11月15日 12
仿真时间
访问仿真时间:
$time、$realtime和$stime函数返回当前仿真时间。 这些函数返回值使用调用模块中`timescale定义的时间单位 $time返回一个64位整数时间值。 $stime返回一个32位整数时间值。
$realtime返回一个实数时间值。
结果为:
time realtime stime in1 o1 0 9 10 19 0.00ns 9.50ns 0 9 0 0 1 1 x 1 1 0
结果为:
time realtime stime in1 o1 0 9 10 19 0.00ns 9.40ns 0 9 0 0 1 1 x 1 1 0
10.00ns 10 19.50ns 19
2016年11月15日
10
条件编译命令 `ifdef、`else 和`endif
一般情况下,Verilog HDL源程序中所有的行都将参加编译。 但是有时希望对其中的一部分内容只有在满足条件才进行编译, 也就是对一部分内容指定编译的条件,这就是“条件编译”。 有时,希望当满足条件时对一组语句进行编译,而当条件不满 足是则编译另一部分。 例如: `ifdef WINDOWS parameter WORD_SIZE = 16 `else parameter WORD_SIZE = 32 `endif • 在编译过程,如果已定义名字为WINDOWS的文本宏,就选 择第一种参数声明,否则选择第二种参数说明。 • `else 程序指令对于`ifdef 指令是可选的。
verilog数字系统设计教程PPT课件

数字系统设计的核心知识
• 复杂数字系统的构成; • 基本电路和 Verilog 的对应关系; • 同步有限状态机在电路中的作用; • 时钟树与自动综合技术
数字逻辑电路的构成
- 组合逻辑:输出只是输入逻辑电平的函
数(有延时),与电路的原始状态无关。
• 时序逻辑:输出不只是输入的逻辑电
平的函数,还与电路所处的状态有关。
8 ‘ d 31
8‘d
t
out[15:0]
202
16 ‘ d
16‘ d
t
Sn 开
93
606
t 关
全局时钟网和平衡树结构
触发器1
全局时钟网络 触发器 图1 全局时钟网示意图
缓冲器
触发器n
图2 平衡树结构示意图
避免冒险和竞争
• 由于组合逻辑和布线的延迟引起
a
c
b
a
b
t
c
t
clock
避免冒险和竞争与流水线
t
t
带寄存器的八位数据通路控制器的波形
ControlSwitch
in[7]
out[7]
CLOCK
out[7]
D Q[7]
ControlSwitch
in[0]
out[0]
CLOCK
out[0]
D Q[0]
带寄存器的八位数据通路控制器的Verilog描述
`define ON 1 ‘b 1 `define OFF 1 ‘b 0 wire ControlSwitch; wire clock wire [7:0] out, in;
ControlSwitch in[7]
out[7]
…... …...
in[0]
• 复杂数字系统的构成; • 基本电路和 Verilog 的对应关系; • 同步有限状态机在电路中的作用; • 时钟树与自动综合技术
数字逻辑电路的构成
- 组合逻辑:输出只是输入逻辑电平的函
数(有延时),与电路的原始状态无关。
• 时序逻辑:输出不只是输入的逻辑电
平的函数,还与电路所处的状态有关。
8 ‘ d 31
8‘d
t
out[15:0]
202
16 ‘ d
16‘ d
t
Sn 开
93
606
t 关
全局时钟网和平衡树结构
触发器1
全局时钟网络 触发器 图1 全局时钟网示意图
缓冲器
触发器n
图2 平衡树结构示意图
避免冒险和竞争
• 由于组合逻辑和布线的延迟引起
a
c
b
a
b
t
c
t
clock
避免冒险和竞争与流水线
t
t
带寄存器的八位数据通路控制器的波形
ControlSwitch
in[7]
out[7]
CLOCK
out[7]
D Q[7]
ControlSwitch
in[0]
out[0]
CLOCK
out[0]
D Q[0]
带寄存器的八位数据通路控制器的Verilog描述
`define ON 1 ‘b 1 `define OFF 1 ‘b 0 wire ControlSwitch; wire clock wire [7:0] out, in;
ControlSwitch in[7]
out[7]
…... …...
in[0]
Verilog示例教程PPT教学课件

always @(opcode or a or b) //用电平敏感的always块描述组合逻辑
begin case(opcode) //算术运算 `plus: out =a + b; `minus: out = a - b; //位运算 `band: out = a & b; `bor: out = a | b; `unegate: out = ~a; //单目运算 default: out = 8'hx;
endmodule
设计示例四(续) 用四个T触发器组成一个进位计数器
module ripple_carry_counter(q, clk, reset); output [3:0] q; input clk, reset; //4 instances of the module TFF are created. TFF tff0(q[0],clk, reset); TFF tff1(q[1],q[0], reset); TFF tff2(q[2],q[1], reset); TFF tff3(q[3],q[2], reset); endmodule
//延迟200个单位时间,触发事件end_first_pass
end
$finish;
//结束仿真
end
设计示例三 (续)
always @(end_first_pass) clearb = ~ clearb; //清零信号电平翻转
always @(posedge clock) $display (“ at time %0d clearb= %b data= %b qout= %b ”, $time,clearb,data,qout);
宏定义stim引用,等同于 #100 data=4'b 注意引用时要用 `符号。
begin case(opcode) //算术运算 `plus: out =a + b; `minus: out = a - b; //位运算 `band: out = a & b; `bor: out = a | b; `unegate: out = ~a; //单目运算 default: out = 8'hx;
endmodule
设计示例四(续) 用四个T触发器组成一个进位计数器
module ripple_carry_counter(q, clk, reset); output [3:0] q; input clk, reset; //4 instances of the module TFF are created. TFF tff0(q[0],clk, reset); TFF tff1(q[1],q[0], reset); TFF tff2(q[2],q[1], reset); TFF tff3(q[3],q[2], reset); endmodule
//延迟200个单位时间,触发事件end_first_pass
end
$finish;
//结束仿真
end
设计示例三 (续)
always @(end_first_pass) clearb = ~ clearb; //清零信号电平翻转
always @(posedge clock) $display (“ at time %0d clearb= %b data= %b qout= %b ”, $time,clearb,data,qout);
宏定义stim引用,等同于 #100 data=4'b 注意引用时要用 `符号。
第四章 Verilog基本语法(一)PPT教学课件

16
2020/12/11
玉溪师范学院
参数
➢ 参数是一个常量。用parameter定义一个标识符来代表 一个常量。参数经常用于定义时延和变量的宽度。
格式: parameter param1 = const_expr1,
param2 = const_expr2,
…,
paramN = const_exprN;
assign #XOR_DELAY S=A^B;
assign #AND_DELAY C=A&B;
endmodule
19
TOP HA
2020/12/11
玉溪师范学院
参数值的模块引用
module TOP3(NewA,NewB,NewS,NewC); input NewA, NewB; output NewS,NewC; HA #(5,2) Ha1 (NewA, NewB, NewS, NewC);ut
selb
26
2020/12/11
玉溪师范学院
reg型
寄存器是数据存储单元的抽象 reg型数据常用来表示always块内的指定信号,常代表触
发器 reg型数据用initial或者always块中指定信号 reg型数据的缺省值是x。可以被赋正值或者负值。当它作
为一个表达式中的操作数时候,作为无符号数。 reg数据类型定义格式为
2.0 ; -0.1等
科学记数法,例如:
235.1e2 等于23510.0
234_12e2
等于2341200.0
实数小数通过四舍五入被隐式地转换为最相近的整数。例如:
42.446, 42.45 转换为整数42
92.5, 92.699 转换为整数93
-5.62 转换为整数-6
2020/12/11
玉溪师范学院
参数
➢ 参数是一个常量。用parameter定义一个标识符来代表 一个常量。参数经常用于定义时延和变量的宽度。
格式: parameter param1 = const_expr1,
param2 = const_expr2,
…,
paramN = const_exprN;
assign #XOR_DELAY S=A^B;
assign #AND_DELAY C=A&B;
endmodule
19
TOP HA
2020/12/11
玉溪师范学院
参数值的模块引用
module TOP3(NewA,NewB,NewS,NewC); input NewA, NewB; output NewS,NewC; HA #(5,2) Ha1 (NewA, NewB, NewS, NewC);ut
selb
26
2020/12/11
玉溪师范学院
reg型
寄存器是数据存储单元的抽象 reg型数据常用来表示always块内的指定信号,常代表触
发器 reg型数据用initial或者always块中指定信号 reg型数据的缺省值是x。可以被赋正值或者负值。当它作
为一个表达式中的操作数时候,作为无符号数。 reg数据类型定义格式为
2.0 ; -0.1等
科学记数法,例如:
235.1e2 等于23510.0
234_12e2
等于2341200.0
实数小数通过四舍五入被隐式地转换为最相近的整数。例如:
42.446, 42.45 转换为整数42
92.5, 92.699 转换为整数93
-5.62 转换为整数-6
北大数字集成电路课件--15_Verilog-testbench的写法

矢量回放
• 保存在文件中的矢量反过来可以作为激励
module read_file_tb; parameter num_vecs = 256; reg [7:0] data_bus; reg [7:0] stim [num_vecs-1:0]; integer i; DUT u1 (results, data_bus) initial begin // Vectors are loaded $readmemb ("vec. txt", stim); for (i =0; i < num_vecs ; i = i + 1) #50 data_bus = stim[i]; end endmodule // 激励文件 激励文件vec.txt 00111000 00111001 00111010 00111100 00110000 00101000 00011000 01111000 10111000 . .
循环激励
• 从循环产生激励有以下特性: 从循环产生激励有以下特性: 在每一次循环, 在每一次循环,修改同一组激励变量 时序关系规则 代码紧凑
module loop_tb; reg clk; reg [7:0] stimulus; wire [7:0] results; integer i; DUT u1 (results, stimulus); always begin // clock generation clk = 1; #5 clk = 0; #5 end initial begin for (i = 0; i < 256; i = i + 1) @( negedge clk) stimulus = i; #20 $finish; end endmodule
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
module testfixture; // Data type declaration
为什么没 有端口?
// Instantiate modules
// Apply stimulus
// Display results
由于testfixture是最顶层模 块,不会被其它模块实例化。 因此不需要有端口。
endmodule
Test Fixture — 如何说明实例
module testfixture; // Data type declaration 多路器实例化语句
// Instantiate modules MUX2_1 mux (out, a, b, sel); // Apply stimulus
Time
0 5 10 15
Values a b sel 0 1 0 0 0 0 0 1 1 1 1 1
DUT 被测器件 (device under test)
module MUX2_1 (out, a, b, sel); 注释行 // Port declarations output out; input a, b, sel; 多路器由关键 wire out, a, b, sel; 词module和 wire sel_, a1, b1; endmodule 开始及结束。 // The netlist not (sel_, sel); and (a1, a, sel_); and (b1, b, sel); or (out, a1, b1); 已定义的 Verilog基 endmodule 本单元的 实例
•
a, b, sel是输入端口,out是输出 端口。所有信号通过这些端口从模 块输入/输出。
另一个模块可以通过模块名及端口 说明使用多路器。实例化多路器时 不需要知道其实现细节。这正是自 上而下设计方法的一个重要特点。 模块的实现可以是行为级也可以是 门级,但并不影响高层次模块对它 的使用。
•
Test Fixture template
所有过程在时间0执行一次
过程之间是并行执行的
Test Fixture —过程(procedural block)
• • 通常采用过程语句进行行为级描述。test fixture的激
励信号在一个过程语句中描述。
过程语句的活动与执行是有差别的
– – 所有过程在时间0处于活动状态,并根据用户定义的条件等待 执行; 所有过程并行执行,以描述硬件内在的并行性;
端口可以说明为 input, output及 inout
• •
注意模块的名称DFF,端口列表及说明 模块通过端口与外部通信
语言的主要特点
模块实例化(module instances)
module DFF (d, clk, clr, q, qb); .... endmodule
module REG4( 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
– – – 物理块,如IC或ASIC单元 逻辑块,如一个CPU设计的ALU部分 整个系统
•
每一个模块的描述从关键词module开始,有一个名称(如 SN74LS74,DFF,ALU等等),由关键词endmodule结束。
语言的主要特点—模块端口(module ports)
端口等价于硬件 的引脚(pin) 端口在模块名字 后的括号中列出
•
•
模块实例化与调用程序不同。每个实例都是模块的一 个完全的拷贝,相互独立、并行。
一个完整的简单例子 test fixture
• •
被测试器件DUT是一个二选一多路器。测试装置(test fixture)提 供测试激励及验证机制。 Test fixture使用行为级描述,DUT采用门级描述。下面将给出 Test fixture的描述、DUT的描述及如何进行混合仿真。
Test fixture 激励描述
module testfixture; // Data type declaration reg a, b, sel; wire out; // MUX instance MUX2_1 mux (out, a, b, sel); // Apply stimulus initial begin a = 0; b = 1; sel = 0; #5 b = 0; • #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end • // Display results • endmodule
MUX的实例化语句包括:
• 模块名字:与引用模块相同
// Display results • 实例名字:任意,但要符合标记命名规则 • 端口列表:与引用模块的次序相同
endmodule
Test Fixture —过程(procedural block)
• 过程语句有两种:
– initial :只执行一次 – always :循环执行
数字集成电路设计入门 --从HDL到版图
于敦山
北大微电子学系
第四章 设计举例
学习目标: 1. 进一步学习Verilog的结构描述和行为描述 2. Verilog混合(抽象)级仿真
语言的主要特点
module(模块)
module是层 次化设计的基 本构件 ule能够表示:
语言的主要特点
模块实例化(module instances)
• • 可以将模块的实例通过端口连接起来构成一个大的系 统或元件。 在上面的例子中,REG4有模块DFF的四个实例。注 意,每个实例都有自己的名字(d0, d1, d2, d3)。实例 名是每个对象唯一的标记,通过这个标记可以查看每 个实例的内部。 实例中端口的次序与模块定义的次序相同。
为什么没 有端口?
// Instantiate modules
// Apply stimulus
// Display results
由于testfixture是最顶层模 块,不会被其它模块实例化。 因此不需要有端口。
endmodule
Test Fixture — 如何说明实例
module testfixture; // Data type declaration 多路器实例化语句
// Instantiate modules MUX2_1 mux (out, a, b, sel); // Apply stimulus
Time
0 5 10 15
Values a b sel 0 1 0 0 0 0 0 1 1 1 1 1
DUT 被测器件 (device under test)
module MUX2_1 (out, a, b, sel); 注释行 // Port declarations output out; input a, b, sel; 多路器由关键 wire out, a, b, sel; 词module和 wire sel_, a1, b1; endmodule 开始及结束。 // The netlist not (sel_, sel); and (a1, a, sel_); and (b1, b, sel); or (out, a1, b1); 已定义的 Verilog基 endmodule 本单元的 实例
•
a, b, sel是输入端口,out是输出 端口。所有信号通过这些端口从模 块输入/输出。
另一个模块可以通过模块名及端口 说明使用多路器。实例化多路器时 不需要知道其实现细节。这正是自 上而下设计方法的一个重要特点。 模块的实现可以是行为级也可以是 门级,但并不影响高层次模块对它 的使用。
•
Test Fixture template
所有过程在时间0执行一次
过程之间是并行执行的
Test Fixture —过程(procedural block)
• • 通常采用过程语句进行行为级描述。test fixture的激
励信号在一个过程语句中描述。
过程语句的活动与执行是有差别的
– – 所有过程在时间0处于活动状态,并根据用户定义的条件等待 执行; 所有过程并行执行,以描述硬件内在的并行性;
端口可以说明为 input, output及 inout
• •
注意模块的名称DFF,端口列表及说明 模块通过端口与外部通信
语言的主要特点
模块实例化(module instances)
module DFF (d, clk, clr, q, qb); .... endmodule
module REG4( 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
– – – 物理块,如IC或ASIC单元 逻辑块,如一个CPU设计的ALU部分 整个系统
•
每一个模块的描述从关键词module开始,有一个名称(如 SN74LS74,DFF,ALU等等),由关键词endmodule结束。
语言的主要特点—模块端口(module ports)
端口等价于硬件 的引脚(pin) 端口在模块名字 后的括号中列出
•
•
模块实例化与调用程序不同。每个实例都是模块的一 个完全的拷贝,相互独立、并行。
一个完整的简单例子 test fixture
• •
被测试器件DUT是一个二选一多路器。测试装置(test fixture)提 供测试激励及验证机制。 Test fixture使用行为级描述,DUT采用门级描述。下面将给出 Test fixture的描述、DUT的描述及如何进行混合仿真。
Test fixture 激励描述
module testfixture; // Data type declaration reg a, b, sel; wire out; // MUX instance MUX2_1 mux (out, a, b, sel); // Apply stimulus initial begin a = 0; b = 1; sel = 0; #5 b = 0; • #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end • // Display results • endmodule
MUX的实例化语句包括:
• 模块名字:与引用模块相同
// Display results • 实例名字:任意,但要符合标记命名规则 • 端口列表:与引用模块的次序相同
endmodule
Test Fixture —过程(procedural block)
• 过程语句有两种:
– initial :只执行一次 – always :循环执行
数字集成电路设计入门 --从HDL到版图
于敦山
北大微电子学系
第四章 设计举例
学习目标: 1. 进一步学习Verilog的结构描述和行为描述 2. Verilog混合(抽象)级仿真
语言的主要特点
module(模块)
module是层 次化设计的基 本构件 ule能够表示:
语言的主要特点
模块实例化(module instances)
• • 可以将模块的实例通过端口连接起来构成一个大的系 统或元件。 在上面的例子中,REG4有模块DFF的四个实例。注 意,每个实例都有自己的名字(d0, d1, d2, d3)。实例 名是每个对象唯一的标记,通过这个标记可以查看每 个实例的内部。 实例中端口的次序与模块定义的次序相同。