09VHDL语言课程设计秒表设计.docx
《09VHDL语言课程设计秒表设计.docx》由会员分享,可在线阅读,更多相关《09VHDL语言课程设计秒表设计.docx(16页珍藏版)》请在冰点文库上搜索。
![09VHDL语言课程设计秒表设计.docx](https://file1.bingdoc.com/fileroot1/2023-8/19/cb2f934f-edb7-4acc-9c99-105a516aca7a/cb2f934f-edb7-4acc-9c99-105a516aca7a1.gif)
09VHDL语言课程设计秒表设计
VHDL语言课程设计-秒表设计
一、试验目的:
秒表的逻辑结构比较简单,它主要由、显示译码器、分频器、十进制计数器、报警器和六进制计数器组成。
在整个秒表中最关键是如何获得一个精确的100Hz计时脉冲,除此之外,整个秒表还需要一个启动信号和一个归零信号,以便能够随时启动及停止。
秒表有六个输出显示,分别为百分之一秒,十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之对应,6个个计数器全为BCD码输出,这样便于同时显示译码器的连接。
当计时达60分钟后,蜂鸣器鸣响10声。
二、结构组成:
1、四个十进制计数器:
用来分别对百分之一秒、十分之秒、秒和分进行计数;
2、两个6进制计数器:
用来分别对十秒何时分进行计数;
3、分频率器:
用来产生100Hz的计数脉冲;
4、显示译码器:
完成对显示译码的控制。
三、硬件要求:
1、主芯片EP1K100QC208—3;
2、6位八段扫描共阴极数码显示管;
3、二个按键开关(归零,启动)。
四、实验内容及步骤:
1、根据电路特点,将此设计电路分成若干模块,规定每个模块的功能和各个模块之间的接口,然后再将各个模块和起来联试。
2、了解软件各元件管理层次含义,以及模块元件之间的连接概念,对不同目录下的统一设计如何融合。
3、适配划分前后的仿真内容有何不同概念,仿真信号对象有何不同。
4、安适配划分的管脚定位,同相关功能块元件之间的连接概念。
5、所有模块用VHDL语言描述。
五、实验源代码如下:
1.分频器代码:
将2.5MHz脉冲变成100Hz
libraryieee;
useieee.std_logic_1164.all;
entitydivis
port(clr,clk:
inbit;q:
bufferbit);
enddiv;
architectureaofdivis
signalcounter:
integerrange0to12499;
begin
process(clr,clk)
begin
if(clk='1'andclk'event)then
ifclr='1'then
counter<=0;
elsifcounter=12499then
counter<=0;
q<=notq;
else
counter<=counter+1;
endif;
endif;
endprocess;
enda;
2.十进制计数器代码:
原理为加法计数器,计数十时由cout进位
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount10is
port(clr,start,clk:
inbit;
cout:
outbit;
daout:
outstd_logic_vector(3downto0));
endcount10;
architectureaofcount10is
signaltemp:
std_logic_vector(3downto0);
begin
process(clk,clr)
begin
ifclr='1'then
temp<="0000";
cout<='0';
elsif(clk'eventandclk='1')then
ifstart='1'then
iftemp>="1001"then
temp<="0000";
cout<='1';
else
temp<=temp+1;
cout<='0';
endif;
endif;
endif;
daout<=temp;
endprocess;
enda;
3.六进制计数器代码:
原理为加法计数器,计数六时由cout进位。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityc6is
port(clr,start,clk:
inbit;
daout:
outstd_logic_vector(3downto0);
cout:
outstd_logic);
endc6;
architectureaofc6is
signaltemp:
std_logic_vector(3downto0);
begin
process(clk,clr)
begin
ifclr='1'then
temp<="0000";
cout<='0';
elsif(clk'eventandclk='1')then
ifstart='1'then
iftemp>="0101"then
temp<="0000";
cout<='1';
else
temp<=temp+1;
cout<='0';
endif;
endif;
endif;
endprocess;
daout<=temp;
enda;
4.报警器代码:
当记时到一小时时,报警器报警,并响十声。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityalarm1is
port(clk,I:
instd_logic;
q:
outstd_logic);
endalarm1;
ARCHITECTUREaOFalarm1 IS
signaln:
integerrange0TO20;
signalq0:
std_logic;
begin
process(clk)
begin
if(clk='1'andclk'event)then
ifi='0'then
q0<='0';
n<=0;
elsif(n<=19andi='1')then
q0<=notq0;
n<=n+1;
else
q0<='0';
endif;
endif;
endprocess;
q<=q0;
ENDa;
5.数据选择和数码管选择模块代码:
其功能是选择个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。
libraryieee;
useieee.std_logic_1164.all;
USEieee.std_logic_UNSIGNED.all;
entityseltimeis
port(clr,clk:
inbit;
dain0,dain1,dain2,dain3,dain4,dain5:
instd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0);
daout:
outstd_logic_vector(3downto0));
endseltime;
architectureaofseltimeis
signaltemp:
integerrange0to5;
begin
process(clk)
begin
if(clr='1')then
daout<="0000";
sel<="000";
temp<=0;
elsif(clk='1'andclk'event)then
iftemp=5thentemp<=0;
elsetemp<=temp+1;
endif;
casetempis
when0=>sel<="000";daout<=dain0;
when1=>sel<="001";daout<=dain1;
when2=>sel<="010";daout<=dain2;
when3=>sel<="011";daout<=dain3;
when4=>sel<="100";daout<=dain4;
when5=>sel<="101";daout<=dain5;
endcase;
endif;
endprocess;
enda;
6.数码管驱动模块代码:
数码管驱动电路,驱动数码管发光。
libraryieee;
useieee.std_logic_1164.all;
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architectureaofdeledis
begin
process(num)
begin
casenumis
when"0000"=>led<="0111111";-----------3FH
when"0001"=>led<="0000110";-----------06H
when"0010"=>led<="1011011";-----------5BH
when"0011"=>led<="1001111";-----------4FH
when"0100"=>led<="1100110";-----------66H
when"0101"=>led<="1101101";-----------6DH
when"0110"=>led<="1111101";-----------7DH
when"0111"=>led<="0100111";-----------27H
when"1000"=>led<="1111111";-----------7FH
when"1001"=>led<="1101111";-----------6FH
whenothers=>led<="0000000";-----------00H
endcase;
endprocess;
enda;
六、课程设计总结
通过秒表设计实验,加深了对VHDL语言设计程序的了解。
学会了层次设计概念,将程序分为若干模块,分别完成各个模块,最后再将各个模块连接起来。
培养同学之间的合作精神。
七、秒表原理图
缺少
八、参考文献:
马淑华,高原编著《电子设计自动化》,北京邮电大学出版社.2006
卢毅,赖杰编著《VHDL与数字电路设计》.2001
Я我☆地盘∮
如果可以如果,我愿一切依在......
主页博客相册|个人档案|好友|i贴吧
查看文章
VHDL_秒表设计
2008年12月12日星期五21:
56
软件:
QuartusII7.2(32-Bit)
硬件:
AlteraDE2Board CycloneⅡEP2C35F672C6
要求:
DesignandimplementacircuitontheDE2boardthatactsasatime-of-dayclock.Itshoulddisplaythehour(from0to23)onthe7-segmentdisplaysHEX7−6,theminute(from0to60)onHEX5−4andthesecond(from0to60)onHEX3−2.UsetheswitchesSW15−0topresetthehourandminutepartsofthetimedisplayedbytheclock.
由于时间关系,具体解释说明不多写...
---------------------------------------------------------------------------------
--秒表
--最小时间间隔为10毫秒,24小时最大显示
--具有预置按钮Preset,设定初始时间(xx小时xx分钟)
---------------------------------------------------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
USEieee.std_logic_UNSIGNED.ALL;
ENTITYtimerIS
PORT(Clk,Clear,Enable,Preset:
INSTD_LOGIC;
SW:
INSTD_LOGIC_VECTOR(15DOWNTO0);
LEDR:
OUTSTD_LOGIC_VECTOR(17DOWNTO0); --redLEDs
HEX0:
OUTSTD_LOGIC_VECTOR(0TO6);--10毫秒
HEX1:
OUTSTD_LOGIC_VECTOR(0TO6);--100毫秒
HEX2:
OUTSTD_LOGIC_VECTOR(0TO6);--1秒
HEX3:
OUTSTD_LOGIC_VECTOR(0TO6);--10秒
HEX4:
OUTSTD_LOGIC_VECTOR(0TO6);--1分钟
HEX5:
OUTSTD_LOGIC_VECTOR(0TO6);--10分钟
HEX6:
OUTSTD_LOGIC_VECTOR(0TO6);--1小时
HEX7:
OUTSTD_LOGIC_VECTOR(0TO6)--10小时
);
ENDtimer;
ARCHITECTUREBehaviorOFtimerIS
COMPONENTbit4_7seg_0toF
PORT(Data:
INSTD_LOGIC_VECTOR(3DOWNTO0);
Display:
OUTSTD_LOGIC_VECTOR(0TO6));
ENDCOMPONENT;
COMPONENTcount60_set--60进制counter
PORT(Clk,Clear,Enable,Preset:
INSTD_LOGIC;
SW:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Q0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
Q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
cout0:
OUTSTD_LOGIC;
cout1:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTcount24_set--24进制counter
PORT(Clk,Clear,Enable,Preset:
INSTD_LOGIC;
SW:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Q0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
Q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
cout0:
OUTSTD_LOGIC;
cout1:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTcount10_set--10进制counter
PORT(Clk,Clear,Enable,Preset:
INSTD_LOGIC;
SW:
INSTD_LOGIC_VECTOR(3DOWNTO0);
Q0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
cout:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTLPM_500KHz
PORT(aclr:
INSTD_LOGIC;
clock:
INSTD_LOGIC;
cnt_en:
INSTD_LOGIC;
cout:
OUTSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(18DOWNTO0));
ENDCOMPONENT;
SIGNALClk_temp,Clk_ms100,Clk_sec,Clk_min,Clk_hour,Clk_day:
STD_LOGIC;
SIGNALEnable_100ms,Enable_sec,Enable_min,Enable_h:
STD_LOGIC;
SIGNALhour1,hour0,min1,min0,sec1,sec0,ms100,ms10:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
LEDR<=Clear&Enable&SW;
Enable_100ms<=Clk_tempANDClk_ms100;
Enable_sec<=Enable_100msANDClk_sec;
Enable_min<=Enable_secANDClk_min;
Enable_h<=Enable_minANDClk_hour;
M_p:
LPM_500KHzPORTMAP(clock=>Clk,aclr=>Clear,cnt_en=>Enable,cout=>Clk_temp);--50M分频
M_10ms:
count10_setPORTMAP(Clk=>Clk,Clear=>Clear,Enable=>Clk_temp,Preset=>Preset,
SW=>"0000",Q0=>ms10,cout=>Clk_ms100);
M_100ms:
count10_setPORTMAP(Clk=>Clk,Clear=>Clear,Enable=>Enable_100ms,Preset=>Preset,
SW=>"0000",Q0=>ms100,cout=>Clk_sec);
M_s:
count60_setPORTMAP(Clk=>Clk,Clear=>Clear,Enable=>Enable_sec,Preset=>Preset,
SW=>"00000000",Q0=>sec0,Q1=>sec1,cout1=>Clk_min);
M_min:
count60_setPORTMAP(Clk=>Clk,Clear=>Clear,Enable=>Enable_min,Preset=>Preset,
SW=>SW(7DOWNTO0),Q0=>min0,Q1=>min1,cout1=>Clk_hour);
M_h:
count24_setPORTMAP(Clk=>Clk,Clear=>Clear,Enable=>Enable_h,Preset=>Preset,
SW=>SW(15DOWNTO8),Q0=>hour0,Q1=>hour1,cout1=>Clk_day);
M_H0:
bit4_7seg_0toFPORTMAP(Data=>