8位计数器EDA课程设计报告Word文档格式.docx

上传人:b****6 文档编号:17621907 上传时间:2022-12-07 格式:DOCX 页数:25 大小:70.36KB
下载 相关 举报
8位计数器EDA课程设计报告Word文档格式.docx_第1页
第1页 / 共25页
8位计数器EDA课程设计报告Word文档格式.docx_第2页
第2页 / 共25页
8位计数器EDA课程设计报告Word文档格式.docx_第3页
第3页 / 共25页
8位计数器EDA课程设计报告Word文档格式.docx_第4页
第4页 / 共25页
8位计数器EDA课程设计报告Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

8位计数器EDA课程设计报告Word文档格式.docx

《8位计数器EDA课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《8位计数器EDA课程设计报告Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

8位计数器EDA课程设计报告Word文档格式.docx

教研室

意见

年月日

系(部)主管领导意见

长沙学院课程设计鉴定表

姓名

学号

专业

电气工程及其自动化

班级

设计题目

指导教师

瞿曌

指导教师意见:

评定等级:

教师签名:

日期:

答辩小组意见:

     答辩小组长签名:

     日期:

    

教研室意见:

教研室主任签名:

 

系(部)意见:

系主任签名:

        日期:

     

说明

课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

1、课程设计目的………………………………………………………………5

2、课程设计题目………………………………………………………………5

3、设计内容……………………………………………………………………5

3.1设计思路………………………………………………………………5

3.2设计步骤………………………………………………………………5

4、程序中各引脚的分配………………………………………………………12

5、程序结构框图…………………………………………………………………13

6、完整程序……………………………………………………………………14

7、课程设计总结………………………………………………………………21

参考文献………………………………………………………………………22

一、课程设计目的

系统提供一个50MHZ的时钟,要求用VHDL语言设计一个8位计数器,同时有一个8位led循环显示灯,当灯亮一次,数码管上就记一次数。

通过做此计数器,知道分频的概念,并且知道如何分频,同时知道什么是数码管的动态显示,怎么做出数码管的动态显示。

二、课程设计题目

8个LED循环显示、计数器的设计。

三、设计内容

1、设计思路:

由于要设计一个8个led灯循环显示的计数器。

则重要的设计部分在于让led灯循环显示,同时在显示的同时数码管的数加1;

要让led灯亮的同时,数码管上面的数字加1,则需要在同一个脉冲下完成计数器加一,led等循环亮一位。

由于系统给定的时钟是50Mhz,显然数码管和led灯不能正常工作,这就涉及到要将50mhz频率分频,将频率变小,使计数器和led灯能正常工作;

Led灯设计思路:

led灯要实现循环显示,即第一个灯亮之后,在出现一个上升沿脉冲后,第二个灯亮,第一个灯灭,来一个脉冲移动一个,并实现循环,为了实现循环,设计思路是讲来一次脉冲将最高位补到最低位,次最高位变成最高位。

数码管的设计思路:

由于数码管要求是动态显示,显然还要分出一个置位工作扫描频率,由于人的视觉暂留,频率应该大于24hz,为了数码管显示效果,我分出了1000hz的频率来扫描8位数码管的工作。

分频的设计思路:

分频是为了将50mhz的频率减小,即在50mhz(clk)出现n个上升沿之前另一个clk1不翻转,而在n个上升沿时翻转,在2n之前一直保持翻转后的状态,到2n时,计数器清零,同时再实现翻转,这样就能做出任意较小的频率实现设计。

2、设计步骤:

首先设计分频计数器,由于要有一个数码管置位工作扫描频率,还要有一个实现计数个和led灯循环显示的频率,即分频要分出两个不同的频率:

分频程序入下:

process(clk)

variablecout:

integer:

=0;

begin

IFclk'

eventandclk='

1'

then

cout:

=cout+1;

ifcout<

=25000thenclk1<

='

0'

;

elsifcout<

50000thenclk1<

elsecout:

endif;

endprocess;

BEGIN

IFcout<

=1250000thenclk2<

25000000thenclk2<

在进程中,clk为原始频率50mhz,以上两个进程是为了分出2hz频率和1000hz频率,其中count是进程中的一个变量,用来出现上升沿脉冲计数。

其中clk1是分出来的1000hz;

频率,clk2是分出来的2hz的led灯移动和数码管计数的频率;

在频率分出来后,就可以设计led灯的循环显示了,led灯循环显示的程序如下:

process(rst,start,clk2)

variablereg8:

std_logic_vector(7downto0);

variablefg:

=1;

begin

ifrst='

reg8:

=(others=>

'

);

fg:

elsifclk2'

eventandclk2='

ifstart='

iffg=1thenreg8:

="

11111110"

elsereg8:

=reg8(6downto0)&

reg8(7);

endif;

din8<

=reg8;

endprocess;

程序中,rst是复位信号,功能是在在出现rst=1是,将led回到最初始状态,从程序中看是灯全灭掉,当rst=0是,回复循环显示;

start是一个开始信号,只有start=1是,计数才开始工作;

din8是一个八位的二进制数,在硬件上直接和8个led灯连接;

fg是设计的一个标志位,目的是为了在开始来第一个脉冲时,使第一个led灯变亮,并将fg赋值为零,来第二个脉冲时,就开始循环;

当rst=0并且start=1时,Led的波形图如下:

从图中看出,在rst为0,start为1时,则led灯的显示就会出现出现循环显示,din由11111110到01111111,之后又回到11111110开始循环;

在rst=1是,将会复位,即din=“11111111”,波形如下:

从图中明显能看出,在rst为1时,本该进行循环的程序在rst=1时,将使din全部置一了,即实现你rst的功能。

在做start的功能时,start的功能是,在rst=0,start=1时,将会做led灯的循环,在rst=0,start=1时,将使其暂停循环功能,并保持当前状态不变,波形图如下:

如图所示,在start=0时,din就停留在11110111,此二进制数正好十进制是239,一直保持此状态,在start=1是,则开始循环的工作。

做完以上程序的设计,即要实现数码管的动态显示,首先要做的就是数码管的动态显示,即要不间断的扫面8个数码管的工作位,扫描置位程序如下:

process(clk1)

begin

ifclk1'

eventandclk1='

ifwei=7thenwei<

000"

elsewei<

=wei+1;

process(wei)

caseweiis

when"

=>

selout<

00000001"

001"

00000010"

010"

00000100"

011"

00001000"

100"

00010000"

101"

00100000"

110"

01000000"

111"

10000000"

whenothers=>

null;

endcase;

clk1是分出来的1khz频率,wei是设置的一个三位二进制数,从000-111,每一个状态都是置一个数码管工作,selout是一个7位二进制数,是个硬件上数码管的工作位一一对应。

在做好置位后,余下的就是数码管显示计数的问题了,数码管显示的是一个8位十进制的数,功能能实现进位,数码管计数的程序如下:

process(rst,start,clk2)

variableao0:

std_logic_vector(3downto0);

variableao1:

variableao2:

variableao3:

variableao4:

variableao5:

variableao6:

variableao7:

then

ao0:

ao1:

ao2:

ao3:

ao4:

ao5:

ao6:

ao7:

ifao0<

=9then

=ao0+1;

ifao0>

9then

ifao1=9andao2=9andao3=9andao4=9andao5=9andao6=9andao7=9then

elsenull;

9then

ifao1=9andao2=9andao3=9andao4=9andao5=9andao6=9then

=ao7+1;

ifao1=9andao2=9andao3=9andao4=9andao5=9then

=ao6+1;

ifao1=9andao2=9andao3=9andao4=9then

=ao5+1;

ifao1=9andao2=9andao3=9then

=ao4+1;

ifao1=9andao2=9then

=ao3+1;

ifao1=9then

=ao2+1;

elseao1:

=ao1+1;

co0<

=ao0;

co1<

=ao1;

co2<

=ao2;

co3<

=ao3;

co4<

=ao4;

co5<

=ao5;

co6<

=ao6;

co7<

=ao7;

程序中co0-co7是对应数码管上从低位到高位的十进制数,ao0-ao7是程序中定义的中间变量;

程序中的rst是复位信号,start是开始信号,在此的rst和start和led循环显示中的rst和start是同一信号,这样才能让led灯和数码管同步工作;

计数器的波形显示如下:

由上图看出,在start=1并且rst=0时,在出现上升沿时,co0加1,当co0到9时,在下一个上升沿将产生进位,使co1变成1,co0变成0。

在rst=1时,将产生复位,致使co0-co7全部置0,由波形可得:

显然,当产生复位信号时,全部置零了,说明程序的设计能达到预先设计的效果。

在rst=0,start=0时,根据设计,应该是数码管的数应该保持现有的状态不变,并且在start=1后,应该能继续计数,实际波形如下:

由图可以得出,在rst=0并且start=0是,co1=5,co0=3,之后,在start=1时,继续开始了计数,说明实现设计的能满足设计要求。

最后一部分就是做出数码管显示十进制数,由于每个数码管的显示都基本一样,就只有选择数码管的条件不同,在此只写出一个数码管的显示程序:

process(wei,co0,co1,co2,co3,co4,co5,co6,co7)

ifwei="

caseco0is

0000"

led7s1<

1000000"

0001"

1111001"

0010"

0100100"

0011"

0110000"

0100"

0011001"

0101"

0010010"

0110"

0000010"

0111"

1111000"

1000"

0000000"

1001"

0010000"

null;

endprocess;

在wei=“000”时,将执行由co0的状态来显示个位上的数,co0-co9对应显示十进制数上的0-9;

led7s1是一个七位二进制数,从低位到高位分别对应数码管的a,b,c,d,e,f,g管脚;

十位,千位,万位等等的显示皆如此。

四、程序中各引脚的分配如下:

引脚名称

引脚编号

连接网络

clk

J3

50MHZ

Selout[2]

G2

A6

start

M3

M1

Selout[3]

F1

A5

rst

T10

KEY

Selout[4]

F2

A4

Din[0]

R10

LED1

Selout[5]

E2

A3

Din[1]

N15

LED2

Selout[6]

G3

A2

Din[2]

U11

LED3

Selout[7]

G4

A1

Din[3]

R11

LED4

Led7s1[0]

L3

E_7SEG-A

Din[4]

U12

LED5

Led7s1[1]

L4

E_7SEG-B

Din[5]

R12

LED6

Led7s1[2]

H3

E_7SEG-C

Din[6]

U13

LED7

Led7s1[3]

H4

E_7SEG-D

Din[7]

R13

LED8

Led7s1[4]

H1

E_7SEG-E

Selout[0]

H2

A8

Led7s1[5]

L2

E_7SEG-F

Selout[1]

G1

A7

Led7s16]

K4

E_7SEG-G

五、程序结构框图:

完整的程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityjishuis

port(clk,rst,start:

instd_logic;

din8:

outstd_logic_vector(7downto0);

selout:

led7s1:

outstd_logic_vector(6downto0));

end;

architectureoneofjishuis

signalclk1,clk2:

std_logic;

signalwei:

std_logic_vector(2downto0);

signalco0:

signalco1:

signalco2:

signalco3:

signalco4:

signalco5:

signalco6:

signalco7:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1