VHDL3Word文件下载.docx
《VHDL3Word文件下载.docx》由会员分享,可在线阅读,更多相关《VHDL3Word文件下载.docx(19页珍藏版)》请在冰点文库上搜索。
![VHDL3Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/48ec8515-6183-428c-b9e0-a97b20c02f79/48ec8515-6183-428c-b9e0-a97b20c02f791.gif)
2、设计万年历的基本逻辑思路
3、创建工程,创建新文件,编写万年历的程序
4、编译程序,检查错误
5、添加管脚约束
6、波形仿真7、综合、实现、下载
8、完成实验报告与总结
四、实验原理
万年历原理
秒、分是60进制,时是24进制,日31天由月1.3.5.7.8.10.12控制,日28/29由2月和润年控制,日30由月4.6.9.11控制。
原理如下图:
图1万年历结构模块图
五、VHDL程序
1、主程序
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.NUMERIC_STD.ALL;
useIEEE.std_logic_unsigned.all;
entitymainis
Port(clk:
inSTD_LOGIC;
light:
outSTD_LOGIC_VECTOR(7downto0);
cpld_en:
outSTD_LOGIC_VECTOR(1downto0);
led_en:
outSTD_LOGIC_VECTOR(7downto0));
endmain;
architectureBehavioralofmainis
signalresult:
std_logic_vector(3downto0);
signalclknew:
std_logic;
signalclknew_s:
signalflag:
integerrange1to8;
signalCounter:
IntegerRANGE1TO50;
signalfenpin28s:
signalas:
signalbs:
signalcouts:
signalT1s:
signalT2s:
signalruns:
signalN1s:
signalN2s:
signaly1s:
signaly2s:
signalcout1s:
componentclk_devideris
Port(clkin:
clkout:
outSTD_LOGIC);
endcomponent;
componentdayIS
PORT(fenpin28:
instd_logic;
a,b:
T1,T2:
outstd_logic_vector(3downto0);
cout:
outstd_logic);
componentdevideris
port(clk:
instd_logic;
fenpin28:
outstd_logic);
componentledis
Port(key_in:
inSTD_LOGIC_VECTOR(3downto0);
light_out:
clk:
inSTD_LOGIC);
componentnianIS
PORT(COUT1:
INSTD_LOGIC;
N1,N2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
run:
OUTSTD_LOGIC);
componentyueIS
PORT(cout,run:
Y1,Y2:
a,b:
OUTSTD_LOGIC;
COUT1:
begin
cpld_en<
="
01"
;
u1:
clk_deviderportmap(clk,clknew);
u2:
deviderportmap(clk,fenpin28s);
u3:
ledportmap(result,light,clknew_s);
u4:
dayportmap(fenpin28s,as,bs,T1s,T2s,couts);
u5:
nianportmap(COUT1s,N1s,N2s,runs);
u6:
yueportmap(couts,runs,Y1s,Y2s,as,bs,COUT1s);
process(clknew)
BEGIN
IF(clknew'
eventANDclknew='
1'
)THEN
IFCounter=10THEN
Counter<
=1;
clknew_s<
=NOTclknew_s;
ELSE
Counter<
=Counter+1;
ENDIF;
ENDIF;
ENDPROCESS;
process(clknew_s)
begin
if(clknew_s'
eventandclknew_s='
)then
caseflagis
when1=>
led_en<
01111111"
result<
0010"
flag<
=flag+1;
when2=>
10111111"
0000"
when3=>
11011111"
=N1s;
when4=>
11101111"
=N2s;
when5=>
11110111"
=Y1s;
when6=>
11111011"
=Y2s;
when7=>
11111101"
=T1s;
when8=>
11111110"
=T2s;
whenothers=>
flag<
=1;
endcase;
elsenull;
endif;
endprocess;
endBehavioral;
2、分频模块
(1)第一个分频模块
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityclk_devideris
endclk_devider;
architectureBehavioralofclk_devideris
IntegerRANGE1TO5000;
SIGNALClk:
std_logic;
PROCESS(clkin)
IF(clkin'
eventANDclkin='
IFCounter=5000THEN
Clk<
=NOTClk;
clkout<
=Clk;
(2)第二个分频模块
ENTITYdeviderIS
PORT(
clk:
ENDdevider;
ARCHITECTUREBehavioralOFdeviderIS
SIGNALtemp:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALtmp:
INTEGERRANGE0TO49999999;
SIGNALclk_out:
STD_LOGIC;
BEGIN
PROCESS(clk)
IFclk'
eventANDclk='
THEN
IFtmp=49999999THEN
tmp<
=0;
ELSE
=tmp+1;
ENDIF;
IFtmp<
=24999999THEN
clk_out<
='
0'
ENDPROCESS;
fenpin28<
=clk_out;
3、日模块
ENTITYdayIS
ENDday;
ArchitectureBehavioralofdayis
signalab:
STD_LOGIC_VECTOR(1DOWNTO0);
signalQ1,Q2:
STD_LOGIC_VECTOR(3DOWNTO0);
Begin
PROCESS(fenpin28,a,b)
ab<
=a&
b;
IFfenpin28'
EVENTANDfenpin28='
IFQ1=9THEN
Q1<
Q2<
=Q2+1;
elseQ1<
=Q1+1;
endif;
ifab="
00"
then
ifQ2=3ANDQ1=1THEN
Q2<
Q1<
0001"
cout<
elsecout<
endif;
elsifab="
then
ifQ2=3andQ1=0THEN
;
cout<
10"
ifQ2=2ANDQ1=8then
11"
ifQ2=2ANDQ1=9then
elsenull;
ENDIF;
T1<
=Q1;
T2<
=Q2;
ENDBehavioral;
4、月模块
ENTITYyueIS
PORT(cout,run:
ENDyue;
ARCHITECTUREBehavioralOFyueIS
signalQ2,Q1:
STD_LOGIC_VECTOR(3DOWNTO0);
signalQ2Q1:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALa1,b1:
STD_LOGIC;
PROCESS(cout,run)
IFcout'
EVENTANDcout='
IFQ1=9THEN
IFQ2=1ANDQ1=2THEN
COUT1<
ELSECOUT1<
endPROCESS;
PROCESS(q2,q1)
Q2Q1<
=Q2&
Q1;
IFQ2Q1="
00000001"
OR
Q2Q1="
00000011"
00000101"
00001000"
00010000"
00010010"
THENa1<
b1<
ELSIFQ2Q1="
00000010"
THEN
IFrun='
a1<
elsea1<
ELSEa1<
Y1<
Y2<
a<
=a1;
b<
=b1;
5、年模块
ENTITYnianIS
PORT(COUT1:
ENDnian;
ARCHITECTUREBehavioralOFnianIS
signalQ1,Q2,Q3:
PROCESS(COUT1,Q1,Q2)
IFCOUT1'
EVENTANDCOUT1='
IFQ2=9THEN
ELSE
Q3<
=Q3+1;
IFQ3=3THEN
run<
ELSErun<
N1<
N2<
6、数码管动态显示模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityledis
endled;
architectureBehavioralofledis
process(clk)
if(clk'
eventandclk='
)then
case(key_in)is
when"
=>
light_out<
00111111"
00000110"
01011011"
0011"
01001111"
0100"
01100110"
0101"
01101101"
0110"
01111101"
0111"
00000111"
1000"
1001"
01101111"
whenothers=>
ZZZZZZZZ"
--whenothers=>
NULL;
endif;
endprocess;
六、仿真波形图
图2时钟分频模块仿真波形图
图
图3LED显示模块仿真波形图
七、管脚约束
管脚约束文件如下:
八、心得体会
万年历的大作业,让我从中收获很多,感触也很多。
通过完成大作业,我对ISE又有了更深的理解。
以前有很多不知道的东西,在完成作业的过程中大部分的问题都得到了解决。
这次实训,我不仅仅在知识上得到很大程度的提升,对VHDL的编程操作更加熟悉,而且,分析问题和解决问题的能力得到很大的提升。
最后,很感谢我的指导老师。
感谢她对我的悉心指导,在遇到瓶颈,止步不前时能给我们指明方向,帮忙解决问题。
谢谢老师!
九、参考文献
[1]肖特著.《VHDL大学实用教程》电子工业出版社2010年
[2]潘松黄继业著.《EDA技术实用教程》科学出版社2010年
[3]张丕状著.《基于VHDL的CPLD\FPGA开发与应用》电子工业出版社2009年
[4]邢建平著.《VHDL程序设计高等学校教材》清华大学出版社2008年