数电实验三
- 格式:doc
- 大小:247.00 KB
- 文档页数:6
湘潭大学实验报告
课程名称数学逻辑与数字电路实验名称时序电路实验——计数器和移位寄存器_ 页数 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