VHDL3.docx

上传人:b****2 文档编号:2432185 上传时间:2023-05-03 格式:DOCX 页数:19 大小:111.30KB
下载 相关 举报
VHDL3.docx_第1页
第1页 / 共19页
VHDL3.docx_第2页
第2页 / 共19页
VHDL3.docx_第3页
第3页 / 共19页
VHDL3.docx_第4页
第4页 / 共19页
VHDL3.docx_第5页
第5页 / 共19页
VHDL3.docx_第6页
第6页 / 共19页
VHDL3.docx_第7页
第7页 / 共19页
VHDL3.docx_第8页
第8页 / 共19页
VHDL3.docx_第9页
第9页 / 共19页
VHDL3.docx_第10页
第10页 / 共19页
VHDL3.docx_第11页
第11页 / 共19页
VHDL3.docx_第12页
第12页 / 共19页
VHDL3.docx_第13页
第13页 / 共19页
VHDL3.docx_第14页
第14页 / 共19页
VHDL3.docx_第15页
第15页 / 共19页
VHDL3.docx_第16页
第16页 / 共19页
VHDL3.docx_第17页
第17页 / 共19页
VHDL3.docx_第18页
第18页 / 共19页
VHDL3.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VHDL3.docx

《VHDL3.docx》由会员分享,可在线阅读,更多相关《VHDL3.docx(19页珍藏版)》请在冰点文库上搜索。

VHDL3.docx

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年

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2