EDA湘潭大学职业技术学院.docx

上传人:b****5 文档编号:26433994 上传时间:2023-06-19 格式:DOCX 页数:19 大小:153.32KB
下载 相关 举报
EDA湘潭大学职业技术学院.docx_第1页
第1页 / 共19页
EDA湘潭大学职业技术学院.docx_第2页
第2页 / 共19页
EDA湘潭大学职业技术学院.docx_第3页
第3页 / 共19页
EDA湘潭大学职业技术学院.docx_第4页
第4页 / 共19页
EDA湘潭大学职业技术学院.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

EDA湘潭大学职业技术学院.docx

《EDA湘潭大学职业技术学院.docx》由会员分享,可在线阅读,更多相关《EDA湘潭大学职业技术学院.docx(19页珍藏版)》请在冰豆网上搜索。

EDA湘潭大学职业技术学院.docx

EDA湘潭大学职业技术学院

湘潭大学职业技术学院

机电系

 

EDA技术基础课程设计报告

 

课题名称:

十字路口交通灯控制器

姓名:

田湘

学号:

20119201117

专业班级:

应用电子技术1班

系(院):

机电系

指导老师:

冷爱莲

完成时间:

2013年12月15日

 

目录

 

1.总体设计3

1.1设计总体思路3

1.2总体框图4

2.单元电路设计4

2.1控制模块4

2.2计数模块7

2.2.15进制递减计数器的VHDL源文件7

2.2.235进制递减计数器的VHDL源文件9

2.2.330进制递减计数器的VHDL源文件11

2.3显示模块13

3.总电路设计16

3.1仿真结果16

3.2仿真结果分析17

4.总结与体会18

5.参考文献19

 

1.总体设计

1.1设计总体思路

用FPGA为核心器件,用VHDL为设计手段设计制作一个十字路口交通管理器。

该管理器控制甲、乙两道(乙道为主干道)的左转灯、直行灯和等待黄灯,用以指挥车辆有序安全通过。

交通管理器示意图如图所示:

图1-1交通管理示意图

图中R1、G1、Y1分别表示甲道左转、直行、等待灯(灭表示通行,亮表示禁止);R2、Y2、G2分别表示乙道左转、直行、等待灯(灭表示通行,亮表示禁止)。

定时器分别确定甲道和乙道左转及直行的通行时间和等待黄灯亮的时间。

具体设计要求如下:

用四位数码显示器分别显示甲乙两道左转、直行、等待时间(每边两位);其计时间隔为1S。

交通灯控制器工作流程如下:

甲道左转通行(甲道直行禁止,乙道全禁止)30S-等待(甲黄灯亮)5S-甲道直行通行(甲道左转禁止,乙道全禁止)35S--等待(甲黄灯亮)5S-乙道左转通行(乙道直行禁止,甲道全禁止)30S-等待(乙黄灯亮)5S-乙道直行通行(乙道左转禁止,甲道全禁止)5S-重复……因此,我设置7个状态,用w0到w4控制状态的转换。

c1到c5、b1到b5控制计数器计数。

同时,c1到c5控制数码管显示方式。

1.2总体框图

图1-2总体框图

2.单元电路设计

2.1控制模块

控制模块是整个模块的核心。

控制着各种状态之间的转换,从而实现设计要求实现的功能。

控制模块的VHDL源文件如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYjiaotongIS

PORT(

clk:

INSTD_LOGIC;

c1,c2,c3,c4,c5,b1,b2,b3,b4,b5:

OUTSTD_LOGIC;

w0,w1,w2,w3,w4:

INSTD_LOGIC;

R1,R2:

OUTSTD_LOGIC;

Y1,Y2:

OUTSTD_LOGIC;

G1,G2:

OUTSTD_LOGIC;

reset:

INSTD_LOGIC);

ENDjiaotong;

ARCHITECTUREaOFjiaotongIS

TYPESTATE_SPACEIS(S0,S1,S2,S3,s4,s5,s6,s7);

SIGNALstate:

STATE_SPACE;

BEGIN

PROCESS(clk)

BEGIN

IF(reset='1')THEN

state<=S0;

ELSIF(clk'eventandclk='1')THEN

CASEstateis

WHENs0=>IF(w0='1')THENstate<=s1;--30s

ENDIF;

b1<='0';IF(w0='0')THENb1<='1';

ENDIF;

WHENs1=>IF(w1='1')THENstate<=s2;--5s

ENDIF;

b2<='0';IF(w1='0')THENb2<='1';

ENDIF;

WHENs2=>IF(w2='1')THENstate<=s3;--35s

ENDIF;

b3<='0';IF(w2='0')THENb3<='1';

ENDIF;

WHENs3=>IF(w1='1')THENstate<=s4;--5s

ENDIF;

b2<='0';IF(w1='0')THENb2<='1';

ENDIF;

WHENs4=>IF(w3='1')THENstate<=s5;--30s

ENDIF;

b4<='0';IF(w3='0')THENb4<='1';

ENDIF;

WHENs5=>IFw1='1'THENstate<=s6;--5s

ENDIF;

b2<='0';IF(w1='0')THENb2<='1';

ENDIF;

WHENs7=>IF(w1='1')THENstate<=s0;--5s

ENDIF;

b2<='0';IF(w1='0')THENb2<='1';

ENDIF;

ENDCASE;

ENDIF;

ENDPROCESS;

c1<='1'whenstate=s0else'0';

c2<='1'whenstate=s1orstate=s3orstate=s5orstate=s7else'0';

c3<='1'whenstate=s2else'0';

c4<='1'whenstate=s4else'0';

c5<='1'whenstate=s6else'0';

R1<='0'whenstate=s0else'1';

G1<='0'whenstate=s2else'1';

Y1<='0'whenstate=s1orstate=s3else'1';

R2<='0'whenstate=s4else'1';

G2<='0'whenstate=s6else'1';

Y2<='0'whenstate=s5orstate=s7else'1';

ENDa;

2.2计数模块

计数模块主要是为实现各种状态的计数时间。

这里需要的计数器的计数范围为0-35。

计到35后,下一个时钟沿回复到0,开始下一轮计数。

此外,当检测到特殊情况(EMI=‘1’)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。

图2.1计数器模块

2.2.15进制递减计数器的VHDL源文件

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYjcnt5IS

PORT

(clk:

INSTD_LOGIC;

cr:

INSTD_LOGIC;

EN2:

INSTD_LOGIC;

J1:

OUTSTD_LOGIC;

q1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDjcnt3;

ARCHITECTUREaOFjcnt5IS

SIGNALbcd1n:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(clk,cr)

BEGIN

IF(cr='0')THEN

bcd1n<="0101";

ELSIF(EN2='1')THEN

IF(clk'EVENTANDclk='1')THEN

IF(bcd1n=0)THEN

bcd1n<="0000";

ELSE

bcd1n<=bcd1n-1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

q1<=bcd1n;

PROCESS(bcd1n)

BEGIN

J1<='0';

if(bcd1n=0)THEN

J1<='1';

ENDIF;

ENDPROCESS;

enda;

2.2.235进制递减计数器的VHDL源文件

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYjcnt35IS

PORT

(clk:

INSTD_LOGIC;

cr:

INSTD_LOGIC;

EN3:

INSTD_LOGIC;

J2:

OUTSTD_LOGIC;

q1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

y10:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDjcnt35;

ARCHITECTUREaOFjcnt35IS

SIGNALbcd1n:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALvcd10n:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(clk,cr)

BEGIN

IF(cr='0')THEN

bcd1n<="0101";--J1<='1';

ELSIF(EN3='1')THEN

IF(clk'EVENTANDclk='1')THEN

IF(bcd1n=0andvcd10n/=0)THEN

bcd1n<="1001";

ELSif(bcd1n=0andvcd10n=0)THEN

bcd1n<="0000";

ELSE

bcd1n<=bcd1n-1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

q1<=bcd1n;

y10<=vcd10n;

PROCESS(clk,cr)

BEGIN

IF(cr='0')THEN

vcd10n<="0011";--J1<='1';

ELSIF(EN3='1')THEN

IF(clk'EVENTANDclk='1')THEN

IF(bcd1n=0)THEN

IF(vcd10n=0)THEN

vcd10n<="0000";

ELSE

vcd10n<=vcd10n-1;

ENDIF;

ENDIF;

ENDIF;ENDIF;

ENDPROCESS;

PROCESS(bcd1n,vcd10n)

BEGIN

J2<='0';

if(bcd1n=0andvcd10n=0)THEN

J2<='1';

ENDIF;

ENDPROCESS;

enda;

2.2.330进制递减计数器的VHDL源文件

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYjcnt30IS

PORT

(clk:

INSTD_LOGIC;

cr:

INSTD_LOGIC;

EN4:

INSTD_LOGIC;

J3:

OUTSTD_LOGIC;

q1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

y10:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDjcnt30;

ARCHITECTUREaOFjcnt30IS

SIGNALbcd1n:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALvcd10n:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(clk,cr)

BEGIN

IF(cr='0')THEN

bcd1n<="0000";--J1<='1';

ELSIF(EN4='1')THEN

IF(clk'EVENTANDclk='1')THEN

IF(bcd1n=0andvcd10n/=0)THEN

bcd1n<="1001";

ELSif(bcd1n=0andvcd10n=0)THEN

bcd1n<="0000";

ELSE

bcd1n<=bcd1n-1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

q1<=bcd1n;

y10<=vcd10n;

PROCESS(clk,cr)

BEGIN

IF(cr='0')THEN

vcd10n<="0011";--J1<='1';

ELSIF(EN4='1')THEN

IF(clk'EVENTANDclk='1')THEN

IF(bcd1n=0)THEN

IF(vcd10n=0)THEN

vcd10n<="0000";

ELSE

vcd10n<=vcd10n-1;

ENDIF;

ENDIF;

ENDIF;ENDIF;

ENDPROCESS;

PROCESS(bcd1n,vcd10n)

BEGIN

J3<='0';

if(bcd1n=0andvcd10n=0)THEN

J3<='1';

ENDIF;

ENDPROCESS;

enda;

2.3显示模块

显示模块是把计数模块传过来的数字转变成对应的十进制数显示出来。

显示模块的VHDL源文件如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsm1IS

PORT(

b1,b2,b3,b4,b5:

INSTD_LOGIC;

Q0:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q2:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q3:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q4:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q5:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q6:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q7:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q8:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CLK:

INSTD_LOGIC;

SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);--段控制信号输出

BT:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));--位控制信号输出

END;

ARCHITECTUREoneOFsm1IS

SIGNALCN:

integerrange0to4;

SIGNALCNT2:

STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALA:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

P1:

PROCESS(CN)

BEGIN

IF(b1='1')THENCN<=0;ENDIF;

IF(b2='1')THENCN<=1;ENDIF;

IF(b3='1')THENCN<=2;ENDIF;

IF(b4='1')THENCN<=3;ENDIF;

IF(b5='1')THENCN<=4;ENDIF;

CASECNIS

WHEN0=>

CASECNT2IS

WHEN"00"=>BT<="00000001";A<=Q0;

WHEN"01"=>BT<="00000010";A<=Q1;

WHENOTHERS=>NULL;

ENDCASE;

WHEN1=>BT<="10000000";A<=Q2;

WHEN2=>

CASECNT2IS

WHEN"00"=>BT<="00000001";A<=Q3;

WHEN"01"=>BT<="00000010";A<=Q4;

WHENOTHERS=>NULL;

ENDCASE;

WHEN3=>

CASECNT2IS

WHEN"00"=>BT<="00000100";A<=Q5;

WHEN"01"=>BT<="00001000";A<=Q6;

WHENOTHERS=>NULL;

ENDCASE;

WHEN4=>

CASECNT2IS

WHEN"00"=>BT<="00000100";A<=Q7;

WHEN"01"=>BT<="00001000";A<=Q8;

WHENOTHERS=>NULL;

ENDCASE;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP1;

P2:

PROCESS(A)

BEGIN

CASEAIS

WHEN"0000"=>SG<="0111111";WHEN"0001"=>SG<="0000110";

WHEN"0010"=>SG<="1011011";WHEN"0011"=>SG<="1001111";

WHEN"0100"=>SG<="1100110";WHEN"0101"=>SG<="1101101";

WHEN"0110"=>SG<="1111101";WHEN"0111"=>SG<="0000111";

WHEN"1000"=>SG<="1111111";WHEN"1001"=>SG<="1101111";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP2;

P3:

PROCESS(CLK)

BEGIN

IF(clk'EVENTANDclk='1')THEN

CNT2<=CNT2+1;

ENDIF;

ENDPROCESSP3;

END;

 

3.总电路设计

3.1仿真结果

总电路作为顶层模块,将计数模块、控制模块和显示模块(sm1)连接起来,加入输入输出,构成顶层文件。

电路图如下:

图3-1总体电路图

 

仿真波形如下:

图3-2电路总体仿真

如图3-1和图3-2所示,在clk端输入2ns的信号,在clk1端输入1ns的扫描频率,在reset端输入按钮低电平信号,仿真得到图3-2波形,计时器开始计时,指示灯轮流变换。

3.2仿真结果分析

通过设定clk值以及start和EMI的初值,就可以得到如上所示的仿真波形图。

由仿真波形图可以看出波形是由start初值信号触发而显示出各个状态的。

EMI高电平信号输入时,所有交通灯都变为红灯状态(符合任务书的要求)。

由仿真波形图还可以清楚的看出各时间段每个交通灯的状态。

要得到正确的仿真波形图就不许设定合适的时间信号clk值。

如果clk值设置的太小则交通灯状态变化得太快无法分辨,如果clk值设置得太大则交通灯状态转换缓慢,效果不明显。

其次,要设定start初值,如果没有设定start初值就不可能触发而得到仿真图。

最后,就是要设置一EMI高电平信号来检测紧急情况下的交通灯的状态。

4.总结与体会

经过这两周EDA课程设计以后,我发现我们在课本里学到的知识是很少的,若想学到很多的知识必须自己去查阅大量的书籍。

虽然这次课程设计中我们要用到自己以前熟悉的软件,但是时间较久,自己必须重新了解和学习软件的用法。

这次课程设计的目的,就是用所学的知识设计一个实用的系统,熟悉MAX+plusII软件使用,提高EDA技术的实际应用能力。

它培养学生综合运用所学知识,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

通过这次课程设计,不仅让我了解怎么去设计程序,更重要的还让我学会了怎么样和别人合作。

课程设计虽然很难做,其实最重要的是你去不去做的问题,再难做的事情只要你努力了就会有结果,开始,我没有查找资料,对软件也不熟悉,也没有和同学一起讨论。

而是一下子就开始去设计,单打独斗。

每一天自己打开软件弄个半天,然而总是得不出想要的结果,也不知道接下来要干什么。

后来,和同学一起讨论,找资料。

终于我自己的思路也慢慢清晰了。

最后经过不断努力,终于完成了任务,也许做得不是很完美,但我觉得经过这两周,我得到了很大的收获。

 

5.参考文献

1.康华光主编.电子技术基础(数字部分),高等教育出版社。

2.阎石主编.电子技术基础(数字部分),清华大学出版社。

3.陈大钦主编,电子技术基础实验,高等教育出版社。

4.彭介华主编,电子技术课程设计指导,高等教育出版社。

5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。

6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。

7.MAX+plusⅡ入门

8.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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