数电实验三

更新时间:2023-10-12 07:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

湘 潭 大 学 实 验 报 告

课程名称 数学逻辑与数字电路 实验名称 时序电路实验 ——计数器和移位寄存器 _ 页数 6 专业 计算机科学与技术 班级_ 二班_ 学号 2014551442 姓名 肖尧 实验日期_ 2016/5/14_

一、实验目的

1.验证同步十六位计数器的功能。

2.设计一个8位双向移位寄存器,理解移位寄存器的工作原理,掌握串入/并出端口控制的描述方法。

3.进一步熟悉Quartus II的Verilog HDL文本设计流程,掌握组合电路的设计仿真和硬件测试。

4.初步掌握Quartus II基于LPM宏模块的设计流程与方法,并由此引出基于LPM模块的许多其他实用数学系统的自动设计技术。 二、实验要求

1.用 Quartus II的Verilog HDL进行计数器的设计与仿真 2.用LPM宏模块设计计数器。

3.用Quartus II的Verilog HDL进行8位双向移位寄存器设计 4.在实验系统上进行硬件测试,验证这两个设计的功能。 5.写出实验报告。 三、实验原理

计数器能记忆脉冲的个数,主要用于定时、分频、产生节拍脉冲及进行数字运算等。加法计数器每输入一个CP脉冲,加法计数器的计数值加1.十六进制计数即从0000一直计数到1111;当计数到1111时,若再来一个CP脉冲,则回到0000,同时产生进位1。

同步十六进制计数器设计采用if-else语句对计数器的输出分别进行赋值,能实现对输入脉冲的计数,并具有使能和异步清零功能。

移位寄存器不仅具有存储代码的功能,而且在移位脉冲作用下,还有左移、右移等功能。设计一个8位二进制双向移位寄存器,能实现数据保持、右移、左移、并行置入和并行输出等功能。移位寄存器有三种输入方式:8位并行输入、1位左移串行输入、1位右移串行输入;有一种输出方式:8位并行输出。双向移位寄存器工作过程如下:

(1)当1位数据从左移串行输入端输入时,首先进入内部寄存器最高位,并在并行输出口最高位输出,后由同步时钟的上升沿触发向左移位。

(2)当1位数据从右移串行输入端输入时,首先进入内部寄存器最低位,并在并行输出口最低位输出,后由同步时钟的上升沿触发向右移位。 四、实验内容 1.利用Quartus II完成计数器、8位双向移位寄存器的文本编辑输入和仿真测试,给出仿真波形。 2. 用LPM宏模块设计计数器 3.给他们进行引脚锁定,然后硬件下载测试。 五、实验环境与设备 Quartus II以及进行硬件测试的实验箱。 六、实验代码设计(含符号说明)

计数器Verilog HDL设计:

module count(en,clk,clr,cout,outy);

input en,clk,clr;//en为使能输入,clk为时钟变量,clr为清零标志 output [3:0] outy;//输出结果 output cout;//进位标志输出 reg [3:0] outy; always @ (posedge clk or posedge clr) begin if(clr) outy <= 4'b0000; else if(en) begin if(outy==4'b1111) outy <= 4'b0000; else outy <= outy+1'b1; end end assign cout=((outy==4'b1111)&en) ? 1 : 0; endmodule

module decl7s(a,led7s);

input [3:0] a;//4位2进制输入 output [6:0] led7s;//用七位译码管显示四位二进制的值 reg [6:0] led7s;//输出需要定义为reg always @(a) case(a) 4'b0000:led7s<=7'b0111111; 4'b0001:led7s<=7'b0000110; 4'b0010:led7s<=7'b1011011; 4'b0011:led7s<=7'b1001111; 4'b0100:led7s<=7'b1100110; 4'b0101:led7s<=7'b1101101; 4'b0110:led7s<=7'b1111101; 4'b0111:led7s<=7'b0000111; 4'b1000:led7s<=7'b1111111; 4'b1001:led7s<=7'b1101111; 4'b1010:led7s<=7'b1110111; 4'b1011:led7s<=7'b1111100; 4'b1100:led7s<=7'b0111001; 4'b1101:led7s<=7'b1011110;

4'b1110:led7s<=7'b1111001; 4'b1111:led7s<=7'b1110001; default:led7s<=7'b0000000; endcase endmodule

我的引脚锁定情况为:如下图

计数器基于LPM模块设计:

module decl7s(a,led7s);

input [3:0] a;//4位2进制输入 output [6:0] led7s;//用七位译码管显示四位二进制的值 reg [6:0] led7s;//输出需要定义为reg always @(a) case(a) 4'b0000:led7s<=7'b0111111; 4'b0001:led7s<=7'b0000110; 4'b0010:led7s<=7'b1011011; 4'b0011:led7s<=7'b1001111; 4'b0100:led7s<=7'b1100110; 4'b0101:led7s<=7'b1101101; 4'b0110:led7s<=7'b1111101; 4'b0111:led7s<=7'b0000111; 4'b1000:led7s<=7'b1111111; 4'b1001:led7s<=7'b1101111; 4'b1010:led7s<=7'b1110111; 4'b1011:led7s<=7'b1111100; 4'b1100:led7s<=7'b0111001; 4'b1101:led7s<=7'b1011110; 4'b1110:led7s<=7'b1111001; 4'b1111:led7s<=7'b1110001; default:led7s<=7'b0000000; endcase

endmodule

我的引脚锁定情况为:如下图

移位寄存器代码设计如下:

module shift2_register8(clr,clk,srsi,slsi,din,dout,s);

input clr,clk,srsi,slsi;//clr为清零标志,clk为时钟变量,srsi为右移输入,slsi为左移输入 input [7:0]din;//待移位的8位二进制输入 input [1:0]s;//选择控制变量 output [7:0]dout;//输出变化情况 reg [7:0]dout;//输出要先定义reg always @ (negedge clr or posedge clk) begin if(!clr) dout <= 8'b00000000; else if(s == 2'b01) begin dout[0] <= dout[1]; dout[1] <= dout[2]; dout[2] <= dout[3]; dout[3] <= dout[4]; dout[4] <= dout[5]; dout[5] <= dout[6]; dout[6] <= dout[7]; dout[7] <= slsi; end else if(s == 2'b10) begin dout[7] <= dout[6]; dout[6] <= dout[5]; dout[5] <= dout[4]; dout[4] <= dout[3]; dout[3] <= dout[2]; dout[2] <= dout[1]; dout[1] <= dout[0]; dout[0] <= srsi; end else if(s == 2'b11) dout[7:0] = din[7:0]; end endmodule 我的引脚锁定为:

七、实验检验与测试 计数器Verilog HDL设计无错误,存在五个警告,可运行进行数据测试:

计数器基于LPM模块设计无错误,存在四个警告,可运行进行数据测试:

移位寄存器代码设计无错误,存在四个警告,可运行进行数据测试:

八、测试数据 计数器Verilog HDL设计数据测试(仿真)情况如下:

由于此实验结果是在7位译码管显示,仿真结果有所偏差,可在试验箱上进行下载进行更为直观的数据测试,试验箱测试成功。 计数器基于LPM模块设计数据测试(仿真)情况如下:

由于此实验结果是在7位译码管显示,仿真结果有所偏差,可在试验箱上进行下载进行更为直观的数据测试,试验箱测试成功。 移位寄存器数据测试(仿真)情况如下:

可知数据测试成功,该实验成功,可在试验箱上进行下载进行更为直观的数据测试,试验箱测试成功。

九、实验过程中出现的问题及处理情况(包括实验现象、原因分析、排故障的方法等)

1.在进行计数器实验的时候不明白其做法,似乎前面一般就已经完成了本次实验目的,解决方法:在助教的帮助下明白,本次试验是用两种方法完成同一个功能,需要自行领悟两种方法之间的区别。

2.试验箱内部有问题,现象和仿真不相符,解决方法:换引脚绑定,在另外的译码管上进行显示。

3.第二种模块化实现的方式不太明白,按照书本操作完成该次实验,但是不太明白其真实含义,待解决。

由于此实验结果是在7位译码管显示,仿真结果有所偏差,可在试验箱上进行下载进行更为直观的数据测试,试验箱测试成功。 移位寄存器数据测试(仿真)情况如下:

可知数据测试成功,该实验成功,可在试验箱上进行下载进行更为直观的数据测试,试验箱测试成功。

九、实验过程中出现的问题及处理情况(包括实验现象、原因分析、排故障的方法等)

1.在进行计数器实验的时候不明白其做法,似乎前面一般就已经完成了本次实验目的,解决方法:在助教的帮助下明白,本次试验是用两种方法完成同一个功能,需要自行领悟两种方法之间的区别。

2.试验箱内部有问题,现象和仿真不相符,解决方法:换引脚绑定,在另外的译码管上进行显示。

3.第二种模块化实现的方式不太明白,按照书本操作完成该次实验,但是不太明白其真实含义,待解决。

本文来源:https://www.bwwdw.com/article/g8lf.html

Top