北航电子电路设计训练数字部分实验报告522.pdf
《北航电子电路设计训练数字部分实验报告522.pdf》由会员分享,可在线阅读,更多相关《北航电子电路设计训练数字部分实验报告522.pdf(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.3.3.2 模块的核心逻辑设计.17 3.3.3 测试程序的核心逻辑设计.18 3.3.4 仿真实验关键结果及其解释.18 实验四、有限状态机.19 4.1 实验任务 1利用有限状态机进行时序逻辑的设计.19 4.1.1 实验要求.19 4.1.2 模块的核心逻辑设计.19 4.1.3 测试程序的核心逻辑设计.19 4.1.4 仿真实验关键结果及其解释.20 4.2 实验任务 2串行数据采样器.21 4.2.1 实验要求.21 4.2.2 模块的核心逻辑设计.21 4.2.3 测试程序的核心逻辑设计.22 4.2.4 仿真实验关键结果及其解释.25 4.3 实验小结.25.实验一、简单组合逻
2、辑和简单时序逻辑 1.1 实验任务 1简单组合逻辑 1.1.1 实验要求 实验代码提供的是一个可综合的数据比较器。从语句中可以看出是比较数据a,b 的结果,结果相同输出 1,否则输出 0.测试模块用于检测模块设计是否正确,给出输入信号,观察模块的内部信号和输出信号以确定设计是否正确。练习题:设计一个字节(8 位)的比较器,比较两个字节的大小,如 a7:0大于 b7:0则输出高电平,否则输出低电平。1.1.2 模块的核心逻辑设计/compare.v 第一种实现方式:assign module compare(equal,a,b);input a,b;/a、b 为输入 output equal;/
3、equal 为输出 assign equal=(a=b)?1:0;/a=b 时输出为 1,否则输出为 0 endmodule /compare.v 第二种实现方式:always module compare(equal,a,b);input a,b;output equal;reg equal;always(a or b)/a 或 b 的值发生变化时执行判断 if(a=b)equal=1;else equal=0;endmodule /练习题 compare_8.v:module compare_8(a,b,out);/与练习一的不同只在于 a、b 要定义为 8 位 input7:0 a;in
4、put7:0 b;output out;reg out;always(a or b)begin if(ab)out=1;else out=0;end endmodule .值发生变化,输出随之变化。图 2 练习题仿真结果 1.2 实验任务 2简单时序逻辑 1.2.1 实验要求 设计二分之一分频器的可综合模型。1.2.2 模块的核心逻辑设计 always(posedge clk_in)begin if(!reset)/reset 为同步复位输入端 clk_out=0;else clk_out=clk_out;/每次输入时钟的上升沿让输出时钟反转,实现二分频 end 1.2.3 测试程序的核心逻辑
5、设计 define clk_cycle 50 /宏定义 always#clk_cycle clk=clk;/产生输入时钟 initial begin clk=0;.reset=1;#10 reset=0;#110 reset=1;/将初始时的不定态进行复位,开始分频输出。#100000$stop;/停止仿真 end 1.2.4 仿真实验关键结果及其解释 仿真结果如下图所示。可以看到,输出时钟 clk_out 的周期是输入时钟 clk的二倍,即实现了二分频。图 3 练习二仿真结果 1.3 实验小结 本次实验中,我们第一次学习使用 Modelsim 软件,对课上所学的 Verilog语法进行了巩固
6、和提高,参考书中给出的例子自己进行了基本组合电路和时序电路的设计,也学会了编写简单的测试模块对系统进行较为全面的测试。.实验二、条件语句和 always 过程块 2.1 实验任务 1条件语句实现计数分频时序电路 2.1.1 实验要求 通过定义计数器,利用条件语句,获得一个 1/20 分频器,将 10MHz 的时钟分频为 500KHz。练习题:利用 10MHz 的时钟设计一个单周期形状的周期波形。2.1.2 模块的核心逻辑设计/练习三 fdivision.v:always(posedge F10M)if(!reset)/同步复位端 begin F500K=0;j=0;end else begin
7、 if(j=9)/*用 j 实现计数,从 0 开始每个时钟上升沿自增1,增加到9后输出反转,实现 20 分频。这里书中是增加到 19后反转,这样得到的信号周期是原信号的 1/40,并不是 1/20,故在实验中进行了修改*/begin j=0;F500K=F500K;end else j=j+1;end /练习题:wave.v always(posedge F10M)if(!reset)begin outwave=0;j=0;end else begin if(j=200)begin /从 0 开始累加到 200 后输出置 1 j=j+1;outwave=1;end else if(j=300)
8、begin/累加到 300 时输出置 0 j=j+1;outwave=0;end else if(j=500)begin/累加到 500 时,完成一个周期,计数器清零 j=0;outwave=0;end else j=j+1;end ./练习题:mux_8.v always(addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in0 or ncs)/in0 至 in7 为 8 个数据输入端,三维寄存器 addr 为选择输入,用 case 分支完成选择 begin if(!ncs)case(addr)3b000:mout=in0;3b
9、001:mout=in1;3b010:mout=in2;3b011:mout=in3;3b100:mout=in4;3b101:mout=in5;3b110:mout=in6;3b111:mout=in7;endcase else mout=0;end 2.2.3 测试程序的核心逻辑设计/alu_test.v parameter t=5;initial begin a=$random%256;b=$random%256;opcode=3h0;repeat(t)begin#100 a=$random%256;b=$random%256;/给 a、b 随机赋值 opcode=opcode+1;en
10、d#100$stop;end /mux_8_test.v initial begin ncs=0;in0=$random%16;in7=$random%16;addr=3b000;repeat(9)/用随机数每次给数据输入端赋不同的值,观察输出结果 begin#10 in0=$random%16;in7=$random%16;addr=addr+1;end#10$stop;end 2.2.4 仿真实验关键结果及其解释 练习五仿真结果如下图所示,可以看到操作数取 0、1、2、3、4 时,分别完成了加、减、与、或、求反操作。.endmodule 3.3.3 测试程序的核心逻辑设计 timescal
11、e 1ns/100ps include sort4.v module task_Top;reg3:0 a,b,c,d;wire3:0 ra,rb,rc,rd;initial begin a=0;b=0;c=0;d=0;repeat(50)begin#100 a=$random%15;b=$random%15;c=$random%15;d=$random%15;end#100$stop;end sort4 sort4(.a(a),.b(b),.c(c),.d(d),.ra(ra),.rb(rb),.rc(rc),.rd(rd);endmodule 3.3.4 仿真实验关键结果及其解释 图 11
12、练习七仿真结果 从实验仿真结果可以看出,利用 task 非常方便的实现两数据之间的交换排序,通过在电平敏感的 always 块中多次调用,实现 4 变量的高速排序,是用函数无法实现相同的功能。另外,task 也避免了直接用一般语句来描述所引起的不易理解和综合时产生冗余逻辑的问题。.实验四、有限状态机 4.1 实验任务 1利用有限状态机进行时序逻辑的设计 4.1.1 实验要求 设计一个串行数据检测器。要求是:连续 4 个或 4 个以上为 1 时输出为 1,其他输入情况为 0。编写测试模块对设计的模块进行各种层次的仿真,并观察波形。4.1.2 模块的核心逻辑设计 module serial(x,r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北航 电子 电路设计 训练 数字 部分 实验 报告 522
限制150内