实验报告
学院
班级
老师
姓名
学号
计算机科学与技术学院
计算机 XXXX
XXX
XXX
UXXXXXXXX
2020 年 5 月 10 日
1
2
目录
实验 2 简单组合电路设计
任务描述....................................................................................................... 4
相关知识....................................................................................................... 4
实验步骤....................................................................................................... 5
编程要求....................................................................................................... 7
测试说明....................................................................................................... 7
源码............................................................................................................. 10
Testbench 代码............................................................................................ 12
控制台输出和波形图................................................................................. 13
遇到问题和解决方法................................................................................. 14
实验心得、意见和建议............................................................................. 17
实验 3 简单时序电路设计
任务描述..................................................................................................... 19
相关知识..................................................................................................... 19
实验内容..................................................................................................... 20
遇到的问题及解决方法............................................................................. 34
实验心得、意见和建议............................................................................. 35
实验 4 数据通路与有限状态机设计
任务描述..................................................................................................... 36
相关知识..................................................................................................... 36
实验内容..................................................................................................... 37
遇到问题和解决方法................................................................................. 61
实验心得、意见和建议............................................................................. 61
3
实验 2 简单组合电路设计
任务描述
相关知识
实验步骤
编程要求
测试说明
源码
Testbench 代码
控制台输出和波形图
遇到问题和解决方法
实验心得、意见和建议
任务描述
本关需要你根据所学的仿真测试的知识,完成选择器、译码器等组合电路的
设计,对电路进行测试。熟悉 vivado 工具的操作;学习、掌握用 Verilog 语言设
计组合逻辑电路的方法;掌握仿真测试方法,学习编写 testbench 并利用波形图
进行测试。
相关知识
测试平台(Testbench)是用于测试和验证设计的正确性的程序。编写
Testbench 的主要目的是对使用硬件描述语言设计的电路进行仿真验证,测试设
4
计电路的功能甚至部分性能是否与预期的目标相符。
测试一个实际功能电路需要用信号发生器来向电路输入测试信号、用示波器
来观察电路的信号输出是否正确。一个待测的 Verilog HDL 模块就相当于一个功
能电路,用 Testbench 对它进行仿真测试需要给待测模块输入激励、获取输出响
应并作判断。Testbench 需要完成以下工作:
(1)产生仿真激励(波形);
(2)将激励施加到被测试模块端口并收集其输出响应;
(3)将输出响应与期望值进行比较,以判断是否符合预期目标。
典型的测试平台主要内容包括:
`timescale 1ns/100ps//这里可适当指定仿真的“时间单位/时间精度”
module XXX_tb;
//Testbench 模块,通常没有输入和输出端口
//局部 reg、wire 变量声明
//用 initial 和 always 等语句产生激励(波形)
//实例引用被测试模块(籍以将激励自动施加其上)
//监视输出并与期望值做比较
//结束 testbench 程序的运行
endmodule
其中许多内容书写的先后顺序不拘。
假若被测模块定义为
//in1、in2 为 input 端口,out1 为 output 端口
module M1(in1, in2, out1);
则用来测试 M1 模块的 Testbench 模块,习惯上命名为 M1_tb,无输入无输
出。Testbench 声明局部 reg、wire 变量时,应该包括(但不限于)一批与被测模
块端口对应(不妨就同名)的变量,便于后面实例引用 M1 模块。并且与 input
端口、output 端口对应的变量分别声明成 reg 型和 wire 型。
实验步骤
请同学们根据实验任务细化实验步骤。
1. 编写如图 2.1 的 2 选 1 选择器电路的结构描述模块,并生成类似图 2.2 的原理图(RTL
Analysis->Elaborated Design->Schematic)。
5
图 2.1
2 选 1 选择器电路
图 2.2
2 选 1 选择器 Schematic
2. 编写 2 选 1 选择器电路的数据流描述模块,并生成 Schematic。
3. 编写 2 选 1 选择器电路的行为描述模块,并生成 Schematic。
4. 用 2 选 1 多路选择器构造 3 选 1 多路选择器。顶层模块有 3 个数据输入端口(u,v,w)、
2 个选择输入端口(s0,s1)和 1 个输出端口(m)。3 选 1 多路选择器的电路和真值如
图 2-3 所示。请编写模块,并生成 Schematic。
图 2-3
3 选 1 多路选择器电路和真值表
5. 设计一个 3-8 译码器模块,其真值表如表 2.1 所示。
6
模块请用以下格式:
module decoder_38(F, CBA);
input [2:0] CBA;
output reg [7:0] F;
……
endmodule
表 2.1 译码器真值表
C B A F7 F6 F5 F4 F3 F2 F1 F0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
1
6. 为上述 3-8 译码器编写 Testbench 并进行测试。
编程要求
Testbench 要能生成包含各种输入值和对应输出值的波形图,并在 TCL 控制
台打印各种输入值和对应输出值。
测试说明
以下是测试样例。
【例】 五人投票表决器,过半数赞成则通过。仿真波形如图 2.4 所示。
module voter5(output pass, input vote);
wire [4:0] vote;
reg pass;
//vote[i]表示第 i 人投票情况(1:赞成;0:反对)
//最后结果(1:通过;0:不通过)
7
reg [2:0] count;
//赞成票数
integer i;
always @(vote) begin
count = 0;
for (i = 0; i < 5; i = i+1) if (vote[i]) count = count + 1;
if (count >= 3) pass = 1;
else pass=0;
// 3 人以上赞成,则 pass=1
end
endmodule
//仿真测试 Testbench 模块
`timescale 1ns / 100ps
);
module voter5_tb(
wire pass;
reg [4:0] vote;
voter5 M(.pass(pass), .vote(vote));
initial begin
$display ("$time::[vote] [count] [pass]------");
$monitor ("%t::", $time, "[%b]\t[%d]\t[%b]", vote,M.count,pass);
end
initial begin
for (vote = 0; vote < 5'b11111; vote = vote + 1)
#2;
#2 $stop;
end
endmodule
//TCL 控制台输出结果:
$time::[vote] [count] [pass]------
8