北大数字集成电路课件--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
4 组合逻辑电路的Verilog HDL描述精品PPT课件
图 4.6.3 三态门元件模型
(a)bufif1 (b)notif1
bufif1真值表
notif1真值表
控制输入 01 x z
z 0 0/z 0/z
z 1 1/z 1/z
zx zx
xx xx
notif1 控制输入 01 xz
0 z 1 1/z 1/z
数 据
1
z
0
0/z 0/z
输xz x x x
入zz x x x
4.6.1 组合逻辑电路的门级建模
门级建模:将逻辑电路图用HDL规定的文本语言表示出来。
三态门
元件符号 功能说明
基本门级元件模型 多输出门
元件符号 功能说明
多输入门
and or xor buf
bufif1
bufif0
多输入端的与门
多输入端的或门
多输入端的异或门
多输出端的缓冲器
控制信号高电平有效的三态缓冲 器
endmodule
下面用条件运算符描述了一个2选1的数据选择器。
//Dataflow description of 2-to-1-line multiplexer module mux2x1_df (A,B,SEL,L);
input A,B,SEL; output L; assign L = SEL ? A : B; endmodule
//Gate-level description of a 2-
4、设计举例
to-4-line decoder
试用Verilog语言的门级
module _2to4decoder
(A1,A0,E,Y);
元件描述2线-4线译码器.
input A,B,E;
(a)bufif1 (b)notif1
bufif1真值表
notif1真值表
控制输入 01 x z
z 0 0/z 0/z
z 1 1/z 1/z
zx zx
xx xx
notif1 控制输入 01 xz
0 z 1 1/z 1/z
数 据
1
z
0
0/z 0/z
输xz x x x
入zz x x x
4.6.1 组合逻辑电路的门级建模
门级建模:将逻辑电路图用HDL规定的文本语言表示出来。
三态门
元件符号 功能说明
基本门级元件模型 多输出门
元件符号 功能说明
多输入门
and or xor buf
bufif1
bufif0
多输入端的与门
多输入端的或门
多输入端的异或门
多输出端的缓冲器
控制信号高电平有效的三态缓冲 器
endmodule
下面用条件运算符描述了一个2选1的数据选择器。
//Dataflow description of 2-to-1-line multiplexer module mux2x1_df (A,B,SEL,L);
input A,B,SEL; output L; assign L = SEL ? A : B; endmodule
//Gate-level description of a 2-
4、设计举例
to-4-line decoder
试用Verilog语言的门级
module _2to4decoder
(A1,A0,E,Y);
元件描述2线-4线译码器.
input A,B,E;
北大数字集成电路课件--12_verilog的TUI调试
术语及定义
• • • •
SHM 仿真历史管理器 仿真历史管理器(Simulation History Manager)。一个管理由 。一个管理由SimWave显 显 示的仿真对象值数据跳变的工具 CLI Verilog-XL命令行界面 命令行界面(command line interface),通过它你可以控制仿真 命令行界面 , 并对Verilog过程语句执行调试操作 并对 过程语句执行调试操作 Tcl 工具命令语言(Tool Command Language)。用于对交互式程序提出命令 工具命令语言( ) 的脚本语言 VCD (Value Change Dump)。存储对象值跳变数据的文件格式 。
•
在Verilog-XL中,退出仿真的方式有: 中 退出仿真的方式有:
– 在交互式窗口中输入 在交互式窗口中输入$finish;或$finish[0|1|2]。可以提供一个参数显示仿真时 ; 。 间和存储器/CPU使用统计。 使用统计。 间和存储器 使用统计 – 在交互式窗口中按 。 在交互式窗口中按^D。 – 仿真时在遇到源代码中的一个 仿真时在遇到源代码中的一个$finish。 。
$[db_]cleartrace $db_help $[db_]setfocus $[db_] settrace $db_showbreak $db_showfocus $db_step[ time]
$cputime $deposit $history $showallinstances $showvariables ;,:.?
数字集成电路设计入门 --从HDL到版图
于敦山
北大微电子学系
第12章 TUI调试 12章 调试
学习内容: 学习内容: 在本章中将学习用Verilog-XL TUI(Textual User Interface)和NC Verilog TUI调试 在本章中将学习用 和 调试 • • • • • • • 进入交互式仿真模式 控制并观察仿真 浏览设计层次 检查( 检查(checkpointing)和退出仿真 ) 对设计进行临时修补 动态的单步及跟踪仿真 使用命令历史列表
电子电路设计训练(北航)exp2014verilog课件
实验结果分析
功能分析
分析所设计的电路是否实现了预期的功能, 并找出可能存在的问题。
性能分析
测试电路的性能指标,如频率响应、功耗等 ,并进行分析和优化。
可靠性分析
对电路的可靠性进行评估,包括稳定性、耐 久性和环境适应性等方面。
总结与改进
总结实验过程中的经验和教训,提出改进和 优化电路设计的建议。
寄存器在电子系统中广泛应用,如用于数据的暂存、缓冲、计数、移位等操作,实现数 据的传递和控制。
计数器
计数器定义
计数器是一种时序逻辑电路,能够实现计数的功能,对输入的时 钟信号进行计数,输出计数值。
计数器分类
根据计数的特点和进制数,计数器可以分为二进制计数器、十进制 计数器和任意进制计数器。
计数器应用
03
时序逻辑电路设计
寄存器
寄存器定义
寄存器是一种存储数据的电路,能够保存二进制数据,并在时钟信号的控制下,将数据 从一个状态转移到另一个状态。
寄存器分类
根据功能和结构的不同,寄存器可以分为基本寄存器和移位寄存器。基本寄存器只能存 储数据,而移位寄存器除了存储数据外,还能实现数据的移位操作。
寄存器应用
电子电路设计训练(北航 )exp2014verilog课件
xx年xx月xx日
• Verilog语言基础 • 组合逻辑电路设计 • 时序逻辑电路设计 • 系统级设计 • 实践环节
目录
01
Verilog语言基础
语言特点
01
硬件描述语言
面向对象
02
03
仿真和综合
Verilog是一种硬件描述语言,用 于描述数字电路和系统的结构和 行为。
它包括测试程序、测试仪器和测试夹 具等组件。
相关主题
- 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)。实例 名是每个对象唯一的标记,通过这个标记可以查看每 个实例的内部。 实例中端口的次序与模块定义的次序相同。