1、经过40秒,ABL由B“100010”变为B“100001”,再经过5秒,ABL变为B“010100”,再经过40秒,S变为B“001100”,再经过5秒,ABL变为B“100010” 如此循环下去。南北、东西方向的红绿灯按表一表二变化。表一 交通灯状态转换表东西(A)方向红灯绿灯黄灯45秒40秒5秒南北(B)方向表二 交通灯状态转换表ABL备注1100100长时间亮红灯100010初始状态状态1: 100010持续40秒,转到状态2状态2: 100001持续5秒,转到状态3状态3: 010100持续40秒,转到状态4状态4: 001100持续5秒,转到状态1注:S的六位分别对应东西(A)方向
2、的红绿黄和南北(B)方向的红绿黄,1表示亮,0表示灭。三、模块设计及仿真1、顶层文件的设计顶层原理图设计可以依据系统框图进行,由反馈控制,倒计时,数码管显示,信号灯显示模块(jtd_ctrl,jtd_time,jtd_xs,jtd_light)五部分组成。其顶层原理图如图2所示。图2 顶层原理图顶层文件的仿真波形图如图3所示:图3 顶层文件的仿真波形2、状态控制模块(jtd_ctrl)的设计状态控制模块根据倒计时模块(jtd_time)的输出信号和1Hz的时钟信号,产生系统的状态机,控制其他部分的协调工作。该模块的源文件程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_
3、1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTD_CTRL IS PORT(CLK:IN STD_LOGIC; CTR: IN STD_LOGIC; AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END JTD_CTRL;ARCHITECTURE JTD OF JTD_CTRL ISSIGNAL Q:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINPROCESS(CLK,AT,BT,CTR)IF CTR=1 THEN Q
4、=00;ELSEIF CLKEVENT AND CLK = THEN IF(AT = X01)OR(BT = X) THEN Q=Q+1; ELSE Q=Q;END IF;END PROCESS;SEND JTD;状态控制模块的仿真波形如图4所示:图4 状态控制模块的仿真波形图3、倒计时模块(jtd_time)的设计倒计时模块用来设定A和B两个方向计时器的初值,并为数码管显示模块提供倒计时时间。倒计时模块源文件程序如下:ENTITY JTD_TIME IS M: S:IN STD_LOGIC_VECTOR(1 DOWNTO 0);OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
5、;END JTD_TIME;ARCHITECTURE JTD_1 OF JTD_TIME ISSIGNAL ATI:STD_LOGIC_VECTOR(7 DOWNTO 0):=XSIGNAL BTI:SIGNAL ART,AGT,AYT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL BRT,BGT,BYT:ART45AGT40AYT05BRTBGTBYTPROCESS(CLK,M,S,CTR)IF M= THEN ATIATINULL;END CASE; THEN IF ATI /= XIF ATI(3 DOWNTO 0)=0000 ATI(3 DOWNTO 0)10
6、01 ATI(7 DOWNTO 4)=ATI(7 DOWNTO 4)-1;ELSE ATI(3 DOWNTO 0)=ATI(3 DOWNTO 0)-1;=ATI(7 DOWNTO 4); THEN BTI=BTI;BTI=BGT;=BYT;=BRT;IF BTI /= XIF BTI(3 DOWNTO 0)= BTI(3 DOWNTO 0) BTI(7 DOWNTO 4)=BTI(7 DOWNTO 4)-1;ELSE BTI(3 DOWNTO 0)=BTI(3 DOWNTO 0)-1;=BTI(7 DOWNTO 4);ATBTEND JTD_1;倒计时模块的仿真波形图如图5所示:图5 倒计时模
7、块的仿真波形图4、数码管显示模块(jtd_xs)的设计显示模块用来显示倒计时时间。采用动态扫描显示,通过分位程序,控制四个数码管的显示时间。数码管显示模块的源文件程序为:ENTITY JTD_XS ISPORT (CLK1K: LED1,LED2,LED3,LED4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END JTD_XS;ARCHITECTURE JTD_3 OF JTD_XS ISSIGNAL OU1,OU2,OU3,OU4:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SL:PROCESS(CLK1K)IF CLK1KEVENT A
8、ND CLK1K=IF SL= THEN SLELSE SL=SL+1;PROCESS(SL,AT,BT)CASE SL ISOU1=BT(3 DOWNTO 0);OU2=BT(7 DOWNTO 4);OU3=AT(3 DOWNTO 0);OU4=AT(7 DOWNTO 4);LED1=OU1;LED2=OU2;LED3=OU3;LED4=OU4;END JTD_3;数码管显示模块的仿真波形图如图6所示:图6 数码管显示模块的仿真波形图5、信号灯显示模块(jtd_light)的设计通过控制模块的输出的状态控制信号,控制六个信号灯的亮灭。信号灯显示模块的源文件程序为:ENTITY JTD_LIG
9、HT ISPORT(M: ABL:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END JTD_LIGHT;ARCHITECTURE JTD_2 OF JTD_LIGHT ISSIGNAL LT:STD_LOGIC_VECTOR(5 DOWNTO 0);PROCESS(S,M) THEN LT100100LT100010100001010100001100ABL=LT;END JTD_2;信号灯显示模块的仿真波形图如图7所示:图7 信号灯显示模块的仿真波形图三、引脚映射本次设计我们采用GW48 EDA实验箱,选择芯片EP1K30TC144-1,选择模式3,引脚映射如表三所示
10、:表三 引脚映射NodePinABL0212ABL1223ABL2234ABL3265ABL4276ABL575481269LED104110LED114211LED126512LED136713LED206814LED216915LED227016LED237217LED307318LED317819LED327920LED3380LED4081LED4182LED428324LED438625四、编程下载在实验箱上选择clock2为1Hz,clock0为1024Hz,模式选择模式3,引脚锁定如表三所示。下载后,结果显示正确,六个信号灯依次为东西方向的红绿黄和南北方向的红绿黄。两个方向上的数
11、码管显示的时间完全吻合。键1为紧急状态控制开关,按下键1时,两路信号灯都为红灯,时间暂停,再次按下键1,恢复原状态,继续计时。键2为清零开关,按下键2时,两路信号灯从初始状态开始计时,结果证实调试成功。五、实验总结通过紧张的实验,我完成了设计任务用VHDL设计交通灯控制器。通过本次课程设计的学习,我深深地体会到设计课的重要性和目的性。为了完成项目,我在网络上找到了许多相关资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。对软件设计流程有了更深刻的理解,掌握了MAX+plus的使用。将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。本次EDA课程设计的目的和意义,通过设计交通灯控制器,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,巩固和综合运用所学过的原理知识,提高分析、解决实际问题的独立工作能力。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1