模可变计数器设计

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

模可变计数器设计

(一)实验目的

1、进一步熟悉实验装置和QuartusⅡ软件的使用;

2、进一步熟悉和掌握EDA设计流程;

3、学习简单组合、时序电路的EDA设计;

4、学习计数器中二进制码到BCD码的转换技巧;

5、学习实验装置上数码管的输出方法。

(二)设计要求

完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:

1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的

数,没按下时模为100-199之间(具体数值自行确定)的数;

2、计数结果用三位数码管十进制显示。

(三)主要仪器设备

3、微机1台

4、QuartusII集成开发软件1套

5、EDA实验装置1套

(四)实验步骤

主要有三个模块

1:一个模20和模119的计数器

2:数码管的显示

3:BCD的调整

源程序:

module count (clk,m,en,rst,a,sel,SG,d);

input clk,m,en,rst;

output [7:0] SG;

output [2:0] sel;

output a;

(* synthesis, keep *) reg clk1;

(* synthesis, keep *) wire [3:0] gw,sw,bw;

/*(* synthesis, keep *) */reg [3:0]a;

reg [11:0] q;

reg [11:0] model;

reg [7:0] cnt,SG;

reg [2:0] sel;

reg [0:0]d;

output [0:0]d;

always @(posedge clk)

begin cnt=cnt+1;

if (cnt==200) begin clk1=1'b1; cnt=0; end

else clk1=1'b0; //200分频,CLK为数码管扫描频率,CLK1为计数频率

if (sel<2) sel=sel+1; else sel=0; end //sel为数码管选择

always @(sel) begin

case (sel)

0: a=bw; //0数码管为百位

1: a=sw; //1数码管为十位

2: a=gw; //2数码管为个位

default: a=0;

endcase

case (a)

0:SG<=8'b00111111; 1:SG<=8'b00000110;

2:SG<=8'b01011011; 3:SG<=8'b01001111;

4:SG<=8'b01100110; 5:SG<=8'b01101101;

6:SG<=8'b01111101; 7:SG<=8'b00000111;

8:SG<=8'b01111111; 9:SG<=8'b01101111; //8段译码值

default: SG=8'b11111111;

endcase end

always @(m)

if (m) model=12'b000000100000; //模值20

else model=12'b000100011001; //模值119

assign gw=q[3:0];

assign sw=q[7:4];

assign bw=q[11:8];

always @(posedge clk1,negedge rst)

begin

if (!rst) q=0;

else if (en)

begin

if (q

begin

if (gw==9) begin q=q+7; if (sw==9) q=q+96; end //BCD调整

else q=q+1;

end

else q=0;

end

end

always @(q)

if(q

else d<=1;

endmodule

波形仿真:

Clk1是计数频率,每来一个clk1信号q计数一次

如图所示:rst=1有效时开始计数clk为扫描频率sel=0时数码管显示百位a=0

sel=1时数码管显示十位a=1

sel=2时数码管显示个位a=3

m=1 模20计数器

m=0 模119计数器

管脚分配:

SG[0] PIN_F13

SG[1] PIN_F14

SG[2] PIN_F15

SG[3] PIN_E15

SG[4] PIN_F16

SG[5] PIN_F17

SG[6] PIN_E18

SG[7] PIN_F18

clk PIN_C13

en PIN_H8

m PIN_J9

rst PIN_C5

sel[0] PIN_G18

sel[1] PIN_G17

sel[2] PIN_G16

d[0] PIN_G13

(五)实验心得

本实验主要是三大模块的编写,第一次的实验在老师给的参考代码下进行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够计数的模块,用m来控制模值的变化m=1时模值为20 m=0时模值为119;二是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行BCD调整,并且q是一个是十二位的寄存器,通过把gw=q[3:0]; sw=q[7:4]; bw=q[11:8]赋值的方法;一个个的显示在数码管上,由于clk的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分配也是比较关键的!一开始我就把个位和百位显示的值搞反了

相关文档
最新文档