数电实验三

  • 格式:doc
  • 大小:247.00 KB
  • 文档页数:6

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湘潭大学实验报告

课程名称数学逻辑与数字电路实验名称时序电路实验——计数器和移位寄存器_ 页数 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