VHDL3.docx
《VHDL3.docx》由会员分享,可在线阅读,更多相关《VHDL3.docx(19页珍藏版)》请在冰豆网上搜索。
VHDL3
《电子线路设计与仿真》
万年历期末大作业设计报告
学院:
自动化学院
专业:
自动化专业
班级:
2011211410
学号:
20112119
姓名:
指导老师:
唐进
2013年12月28日
目录
一、实验目的-1-
二、实验内容-1-
三、实验步骤-1-
四、实验原理-1-
五、VHDL源程序-2-
六、仿真波形图.-11-
七、管脚约束文件.-12-
八、心得体会.-12-
九、参考文献.-12-
万年历期末课程设计
一、实验目的
1、设计基于小学期数字万年历的逻辑结构。
2、掌握VHDL语言程序设计、编译、错误修改。
进一步掌握VHDL设计及文字规则。
3、掌握的ISE软件的使用。
4、熟悉EDA实验箱的各个模块。
5、进一步熟悉波形仿真以及管脚约束的查看和填写。
二、实验内容
1、在ISE中编写VHDL程序实现年、月、日、时、分、秒各模块的功能。
2、将各模块在原理图中连接起来实现万年历计时功能。
3、将年、月、日各端口引脚绑定好并下载到实验箱实现其功能,观察是否能实现相应功能效果,如是否可以进位,是否能判断闰年等等。
三、实验步骤:
1、根据试验箱的具体配置,选题
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:
std_logic;
signalflag:
integerrange1to8;
signalCounter:
IntegerRANGE1TO50;
signalfenpin28s:
std_logic;
signalas:
std_logic;
signalbs:
std_logic;
signalcouts:
std_logic;
signalT1s:
std_logic_vector(3downto0);
signalT2s:
std_logic_vector(3downto0);
signalruns:
std_logic;
signalN1s:
std_logic_vector(3downto0);
signalN2s:
std_logic_vector(3downto0);
signaly1s:
std_logic_vector(3downto0);
signaly2s:
std_logic_vector(3downto0);
signalcout1s:
std_logic;
componentclk_devideris
Port(clkin:
inSTD_LOGIC;
clkout:
outSTD_LOGIC);
endcomponent;
componentdayIS
PORT(fenpin28:
instd_logic;
a,b:
instd_logic;
T1,T2:
outstd_logic_vector(3downto0);
cout:
outstd_logic);
endcomponent;
componentdevideris
port(clk:
instd_logic;
fenpin28:
outstd_logic);
endcomponent;
componentledis
Port(key_in:
inSTD_LOGIC_VECTOR(3downto0);
light_out:
outSTD_LOGIC_VECTOR(7downto0);
clk:
inSTD_LOGIC);
endcomponent;
componentnianIS
PORT(COUT1:
INSTD_LOGIC;
N1,N2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
run:
OUTSTD_LOGIC);
endcomponent;
componentyueIS
PORT(cout,run:
INSTD_LOGIC;
Y1,Y2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
a,b:
OUTSTD_LOGIC;
COUT1:
OUTSTD_LOGIC);
endcomponent;
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='1')then
caseflagis
when1=>led_en<="01111111";result<="0010";flag<=flag+1;
when2=>led_en<="10111111";result<="0000";flag<=flag+1;
when3=>led_en<="11011111";result<=N1s;flag<=flag+1;
when4=>led_en<="11101111";result<=N2s;flag<=flag+1;
when5=>led_en<="11110111";result<=Y1s;flag<=flag+1;
when6=>led_en<="11111011";result<=Y2s;flag<=flag+1;
when7=>led_en<="11111101";result<=T1s;flag<=flag+1;
when8=>led_en<="11111110";result<=T2s;flag<=flag+1;
whenothers=>flag<=1;
endcase;
elsenull;
endif;
endprocess;
endBehavioral;
2、分频模块
(1)第一个分频模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityclk_devideris
Port(clkin:
inSTD_LOGIC;
clkout:
outSTD_LOGIC);
endclk_devider;
architectureBehavioralofclk_devideris
signalCounter:
IntegerRANGE1TO5000;
SIGNALClk:
std_logic;
begin
PROCESS(clkin)
BEGIN
IF(clkin'eventANDclkin='1')THEN
IFCounter=5000THEN
Counter<=1;
Clk<=NOTClk;
ELSE
Counter<=Counter+1;
ENDIF;
ENDIF;
ENDPROCESS;
clkout<=Clk;
endBehavioral;
(2)第二个分频模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdeviderIS
PORT(
clk:
INSTD_LOGIC;
fenpin28:
outstd_logic);
ENDdevider;
ARCHITECTUREBehavioralOFdeviderIS
SIGNALtemp:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALtmp:
INTEGERRANGE0TO49999999;
SIGNALclk_out:
STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IFclk'eventANDclk='1'THEN
IFtmp=49999999THEN
tmp<=0;
ELSE
tmp<=tmp+1;
ENDIF;
IFtmp<=24999999THEN
clk_out<='0';
ELSE
clk_out<='1';
ENDIF;
ENDIF;
ENDPROCESS;
fenpin28<=clk_out;
endBehavioral;
3、日模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdayIS
PORT(fenpin28:
instd_logic;
a,b:
instd_logic;
T1,T2:
outstd_logic_vector(3downto0);
cout:
outstd_logic);
ENDday;
ArchitectureBehavioralofdayis
signalab:
STD_LOGIC_VECTOR(1DOWNTO0);
signalQ1,Q2:
STD_LOGIC_VECTOR(3DOWNTO0);
Begin
PROCESS(fenpin28,a,b)
begin
ab<=a&b;
IFfenpin28'EVENTANDfenpin28='1'THEN
IFQ1=9THEN
Q1<="0000";
Q2<=Q2+1;
elseQ1<=Q1+1;
endif;
ifab="00"then
ifQ2=3ANDQ1=1THEN
Q2<="0000";Q1<="0001";cout<='1';
elsecout<='0';
endif;
elsifab="01"then
ifQ2=3andQ1=0THEN
Q2<="0000";Q1<="0001";cout<='1';
elsecout<='0';
endif;
elsifab="10"then
ifQ2=2ANDQ1=8then
Q2<="0000";Q1<="0001";cout<='1';
elsecout<='0';
endif;
elsifab="11"then
ifQ2=2ANDQ1=9then
Q2<="0000";Q1<="0001";cout<='1';
elsecout<='0';
endif;
elsenull;
ENDIF;
endif;
T1<=Q1;
T2<=Q2;
ENDPROCESS;
ENDBehavioral;
4、月模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
ENTITYyueIS
PORT(cout,run:
INSTD_LOGIC;
Y1,Y2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
a,b:
OUTSTD_LOGIC;
COUT1:
OUTSTD_LOGIC);
ENDyue;
ARCHITECTUREBehavioralOFyueIS
signalQ2,Q1:
STD_LOGIC_VECTOR(3DOWNTO0);
signalQ2Q1:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALa1,b1:
STD_LOGIC;
BEGIN
PROCESS(cout,run)
BEGIN
IFcout'EVENTANDcout='1'THEN
IFQ1=9THEN
Q1<="0000";Q2<=Q2+1;
ELSE
Q1<=Q1+1;
ENDIF;
IFQ2=1ANDQ1=2THEN
Q1<="0001";Q2<="0000";COUT1<='1';
ELSECOUT1<='0';
ENDIF;
endif;
endPROCESS;
PROCESS(q2,q1)
begin
Q2Q1<=Q2&Q1;
IFQ2Q1="00000001"OR
Q2Q1="00000011"OR
Q2Q1="00000101"OR
Q2Q1="00001000"OR
Q2Q1="00010000"OR
Q2Q1="00010010"
THENa1<='0';b1<='0';
ELSIFQ2Q1="00000010"THEN
IFrun='1'then
a1<='1';b1<='1';
elsea1<='1';b1<='0';
endif;
ELSEa1<='0';b1<='1';
ENDIF;
ENDPROCESS;
Y1<=Q1;Y2<=Q2;
a<=a1;b<=b1;
ENDBehavioral;
5、年模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
ENTITYnianIS
PORT(COUT1:
INSTD_LOGIC;
N1,N2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
run:
OUTSTD_LOGIC);
ENDnian;
ARCHITECTUREBehavioralOFnianIS
signalQ1,Q2,Q3:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(COUT1,Q1,Q2)
BEGIN
IFCOUT1'EVENTANDCOUT1='1'THEN
IFQ1=9THEN
IFQ2=9THEN
Q1<="0000";Q2<="0000";
ELSE
Q1<="0000";Q2<=Q2+1;
ENDIF;
ELSE
Q1<=Q1+1;
ENDIF;
Q3<=Q3+1;
IFQ3=3THEN
Q3<="0000";run<='1';
ELSErun<='0';
ENDIF;
endif;
endPROCESS;
N1<=Q1;N2<=Q2;
endBehavioral;
6、数码管动态显示模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityledis
Port(key_in:
inSTD_LOGIC_VECTOR(3downto0);
light_out:
outSTD_LOGIC_VECTOR(7downto0);
clk:
inSTD_LOGIC);
endled;
architectureBehavioralofledis
begin
process(clk)
begin
if(clk'eventandclk='1')then
case(key_in)is
when"0000"=>light_out<="00111111";
when"0001"=>light_out<="00000110";
when"0010"=>light_out<="01011011";
when"0011"=>light_out<="01001111";
when"0100"=>light_out<="01100110";
when"0101"=>light_out<="01101101";
when"0110"=>light_out<="01111101";
when"0111"=>light_out<="00000111";
when"1000"=>light_out<="01111111";
when"1001"=>light_out<="01101111";
whenothers=>light_out<="ZZZZZZZZ";
--whenothers=>NULL;
endcase;
endif;
endprocess;
endBehavioral;
六、仿真波形图
图2时钟分频模块仿真波形图
图
图3LED显示模块仿真波形图
七、管脚约束
管脚约束文件如下:
八、心得体会
万年历的大作业,让我从中收获很多,感触也很多。
通过完成大作业,我对ISE又有了更深的理解。
以前有很多不知道的东西,在完成作业的过程中大部分的问题都得到了解决。
这次实训,我不仅仅在知识上得到很大程度的提升,对VHDL的编程操作更加熟悉,而且,分析问题和解决问题的能力得到很大的提升。
最后,很感谢我的指导老师。
感谢她对我的悉心指导,在遇到瓶颈,止步不前时能给我们指明方向,帮忙解决问题。
谢谢老师!
九、参考文献
[1]肖特著.《VHDL大学实用教程》电子工业出版社2010年
[2]潘松黄继业著.《EDA技术实用教程》科学出版社2010年
[3]张丕状著.《基于VHDL的CPLD\FPGA开发与应用》电子工业出版社2009年
[4]邢建平著.《VHDL程序设计高等学校教材》清华大学出版社2008年