内容发布更新时间 : 2024/9/12 23:39:11星期一 下面是文章的全部内容请认真阅读。
实验二 含异步清零和同步使能的加法计数器
一、 实验目的
1、 了解二进制计数器的工作原理。
2、 进一步熟悉QUARTUSII软件的使用方法和VHDL输入。
3、时钟在编程过程中的作用。
二、 实验原理
二进制计数器中应用最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:
在时钟上升沿的情况下,检测使能端是否允许计数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,使计数值清零,继续进行检测和计数。其工作时序如图3-1所示:
图3-1 计数器的工作时序
三、 实验内容
本实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关K1表示使能端信号,用复位开关S1表示复位信号,用LED模块的LED1~LED11来表示计数的二进制结果。实验LED亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。通过输入不同的值模拟计数器的工作时序,观察计数的结果。实验箱中的拨动开关、与FPGA的接口电路,LED灯与FPGA的接口电路以及拨动开关、LED与FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。
数字时钟信号模块的电路原理如图3-2所示,表3-1是其时钟输出与FPGA的管脚连接表。
图3-2 数字时钟信号模块电路原理
信号名称 DIGITAL-CLK 对应FPGA管脚名 A14 说明 数字时钟信号送至FPGA的A14 表3-1 数字时钟输出与FPGA的管脚连接表
按键开关模块的电路原理如图3-3所示,表3-2是按键开关的输出与FPGA的管脚连接表。
图3-3 按键开关模块电路原理
信号名称 S[0] S[1] S[2] S[3] S[4] S[5] S[6] S[7] FPGA I/O名称 PIN_AF5 PIN_AH6 PIN_AH7 PIN_AH8 PIN_AG10 PIN_AG11 PIN_AH14 PIN_AG7 核心板接口管脚号 JP1_91 JP1_93 JP1_95 JP1_97 JP1_99 JP1_101 JP1_90 JP1_92 功能说明 ‘S1’ Switch ‘S2’ Switch ‘S3’ Switch ‘S4’ Switch ‘S5’ Switch ‘S6’ Switch ‘S7’ Switch ‘S8’ Switch S[8] S[9] S[10] S[11] PIN_AG8 PIN_AF9 PIN_AH10 PIN_AH11 JP1_94 JP1_96 JP1_98 JP1_100 ‘S9’ Switch ‘S10’ Switch ‘S11’ Switch ‘S12’ Switch 表3-2 按键开关与FPGA的管脚连接表
四、 实验步骤
1、 打开QUARTUSII软件,新建一个工程。
2、 建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。
3、 按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中
提供的示例程序。
4、 编写完VHDL程序后,保存起来。方法同实验一。
5、 对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED与FPGA的管脚连接表(表1-1、表1-2)或
参照附录进行管脚分配。表3-3是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
端口名 CLK EN RET CQ0 CQ1 CQ2 CQ3 CQ4 CQ5 CQ6 CQ7 CQ8 CQ9 CQ10 COUT 使用模块信号 数字信号源 拨动开关K1 按键开关S1 LED灯LED1 LED灯LED2 LED灯LED3 LED灯LED4 LED灯LED5 LED灯LED6 LED灯LED7 LED灯LED8 LED灯LED9 LED灯LED10 LED灯LED11 LED灯LED12 对应FPGA管脚 PIN_A14 PIN_AH12 PIN_AF5 PIN_AE8 PIN_J22 PIN_M24 PIN_L24 PIN_L23 PIN_H23 PIN_H24 PIN_F24 PIN_E24 PIN_F22 PIN_E22 PIN_F21 COUT为进位信号 计数输出 说 明 时钟为1HZ 使能信号 复位信号 表3-3 端口管脚分配表
7、 用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自
己的编程思想一致。
五、 实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源的时钟选择为1HZ,使拨动开关K1置为高电平(使拨动开关向上),四位LED会按照实验原理中依次被点亮,当加法器加到9时,LED12(进位信号)被点亮。当复位键(按键开关的S1键)按下后,计数被清零。如果拨动开关K1置为低电平(拨动开关向下)则加法器不工作。
六、 实验报告
1、 绘出仿真波形,并作说明。
2、 写出在VHDL编程过程中需要说明的规则。
3、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。 4、 改变时钟频率,看实验现象会有什么改变,试解释这一现象。
实验代码:
//二进制计数器,时间间隔是1s
module counter (Clk, Rst_n, En_n, Cout, led) ;
//同步使能,异步清零
always @ (posedge Clk, negedge Rst_n)
begin
if(Rst_n == 1'b0)
input Clk; //系统时钟1Hz
input Rst_n; //全局复位,低电平有效 input En_n; //使能信号,高电平有效
output Cout; //进位信号 output [3:0] led;
reg [3:0] led; reg Cout;
begin end
led <= 4'd0; Cout <= 1'b0;
else if(En_n == 1'b1)
begin
if(led == 4'b1001)
begin Cout <= 1'b1; led <= 4'd0; end
else
led <= led +1'b1;
if(led == 4'b0000)
Cout <= 1'b0;
end
end
endmodule
/*另一种解决进位信号的方法,
就是为9(1001)的时候进位信号为1, 其他时候进位信号为0。
Cout<= led[0] & ~led[1] & ~led[2] & led[3];*/