当前位置:首页 > 北航verilog上机实验报告
Verilog上机实验报告
实验一 简单的组合逻辑设计
一、 实验目的
1.
2. 3. 4.
掌握基本组合逻辑电路的实现方法;
初步了解两种基本组合逻辑电路的生成方法; 学习测试模块的编写;
通过综合和布局布线了解不同层次仿真的物理意义。
二、 实验内容
设计一个字节(8位)的比较器。
要求:比较两个字节的大小,如a[7:0]大于b[7:0],则输出高电平,否则输出低电平;并改写测试模型,使其能进行比较全面的测试。观察RTL级仿真、综合后门级仿真和布局布线后仿真有什么不同,并说明这些不同的原因。从文件系统中查阅自动生成的compare.vm,compare.vo文件和compare.v作比较,说出它们的不同点和相同点。
三、 对任务的理解
本题就是一个很简单的比较电路。对两个8位的输入数据的大小进行比较,并且输出比较结果
四、 实现思路
1. 首先这个比较器应当有3个对外的端口,分别是:两个8位数据的输入端口,
一个比较结果的输出端口。
2. 由于比较器的输出结果是随着输入变化立即变化的,因此这是一个组合逻辑的
电路。主程序很容易实现。
3. 测试模块要产生随机的两个8位输入数据,因此利用系统任务$random来实现。
通过一个时钟,每隔一段时间产生两个新的随机数。
5
Verilog上机实验报告
五、 代码
1. 主程序
---------------------------------------文件名 compare_8bit.v--------------------------------------------
module compare_8bit(a,b,re); input [7:0] a,b; output re; reg re;
always @(a or b) //if the input changes, the output changes immediately. if (a>b) re=1; else re=0; endmodule
2. 测试模块
----------------------------------------文件名 compare_8bit_tb.v----------------------------------- `timescale 1ns/1ns module t;
reg [7:0] a,b; reg clk; wire re; initial begin a=0; b=0; clk=0; end
always #50 clk=~clk; always @(posedge clk) begin
a={$random}8; b=($random)8; end initial
begin #100000 $stop; end
compare_8bit m(.a(a),.b(b),.re(re)); endmodule
6
Verilog上机实验报告
六、 仿真波形
七、 总结及对波形的说明
1. 实验结论
从波形中可以看出当a>b时,re=1;当a
2. 实验思考(课本P316思考题一)
1) 在测试方法二中,第二个initial块用于设置仿真时长。
2) 它与第一个initial块是一个并行的关系,同一个测试文件中,可以有多个initial
块,且均从0时开始顺序运行,并且仅运行一次。
3) 如果在第二个initial块中,没有写#100000或者$stop,仿真将会按测试界面设
置的仿真时间进行仿真。(如下图)
4) 第二种测试方法更全面,因为第二种测试方法产生的a和b的值是随机的,可以测试多种情况,而第一种测试方法只能按照测试文件中给定的数据进行测试,不具有普遍性。
3. 实验总结
本次实验是Verilog上机的第一个实验,内容比较简单,并且课本上已经给出了范例,只需要稍加修改便可以写出程序的代码。
在本次试验中,由于实验软件的限制,我仅仅进行了RTL级的仿真,如果要进行综合后门级仿真和布局布线后仿真,可以通过其他软件来进行。
RTL级仿真、综合后门级仿真和布局布线后仿真的不同之处在于所在的层次不同。依次更加底层化。而compare.vm,compare.vo文件和compare.v文件的描述也是不同层次的描述。
7
Verilog上机实验报告
实验二 简单分频时序逻辑电路的设计
一、 实验目的
1. 掌握最基本时序电路的实现方法;
2. 学习时序电路测试模块的编写; 3. 学习综合和不同层次的仿真。
二、 实验内容
已然制作clk_in的2分频clk_out,要求输出时钟的相位与上面的2分频器的输出相位正好相反。编写测试模块,给出仿真波形。改变输入始终的频率,观察RTL级仿真、综合后门级仿真和布线后仿真的不同,并写出报告
三、 对任务的理解
本题的实验就是要实现一个分频器。
四、 实现思路
1. 首先这个比较器应当有3个对外的端口,分别是:输入时钟信号clk_in,输出时
钟信号clk_out,复位信号reset。
2. 由于输入信号中有时钟信号,并且输出是随着输入时钟的某个沿的出现而变化
的,因此是一个时序逻辑电路。
3. 题目中要求输出的2分频时钟信号与例题中的相位相反。最简单的想法就是将
复位信号有效时的输出信号反相。
五、 代码
1. 主程序
---------------------------------------文件名 half_clk.v--------------------------------------------
module half_clk(reset,clk_in,clk_out); input reset, clk_in; output clk_out; reg clk_out;
8
共分享92篇相关文档