《实验八 交通灯控制电路的设计.docx》由会员分享,可在线阅读,更多相关《实验八 交通灯控制电路的设计.docx(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 可编程逻辑设计实验八报告学院:物理与信息工程学院专业:通信工程年级:2007级班级:二班学号:110700221姓名:林明明 指导老师:杨秀芝实验八 交通灯控制电路的设计一、实验目的:进一步学习复杂数字电路的设计方法,提高利用硬件描述语言进行电路设计的技巧和熟练程度。二、实验要求及原理:1、 满足图1顺序工作流程。图中设南北方向的红、黄、绿灯分别为NSR、NSY、NSG,东西方向的红、黄、绿灯分别为EWR、EWY、EWG。它们的工作方式有些必须是并行进行的,即南北方向绿灯亮,东西方向红灯亮;南北方向黄灯亮,东西方向红灯亮;南北方向红灯亮,东西方向绿灯亮;南北方向红灯亮,东西方向黄红灯亮。南北
2、方向绿灯亮,东西方向红灯亮(5t)南北方向黄灯亮,东西方向红灯亮(1t)南北方向红灯亮,东西方向绿灯亮(5t)南北方向红灯亮,东西方向黄灯亮(1t)图1 交通灯顺序工作流程图2、 应满足两个方向的工作时序:即东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,南北方向亮红灯时间应等于东西方向亮黄、绿灯时间之和。时序流程图2所示。图2中,假设每个单位时间为3秒,则南北、东西方向绿、黄、红灯亮时间分别15秒、3秒、18秒,一次循环为36秒。其中红灯亮的时间为绿灯、黄灯亮的时间之和。1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6NSGNSYNSREWREWGEWYt5t
3、6tt图2 交通灯时序工作流程图3、 十字路口要有数字显示,作为时间提示,以便人们更直观地把握时间。具体为:当某方向红灯亮时,置显示器为某值,然后以每秒减1计数方式方式工作,直至减到数为“0”,十字路口红、绿灯交换,一次工作循环结束,进入下一步某方向地工作循环。例如:当南北方向从黄灯转换成红灯时,置南北方向数字显示为24,并使数显计数器开始减“1”计数,当减到“0”,时,此时红灯灭,而南北方向的绿灯亮;同时,东西方向的红灯亮,并置东西方向的数显为24。三、实验内容:1、根据实验要求及原理1、2画出交通指示灯控制电路原理框图。提示:两个方向的控制电路可以共用一个24进制计数器实现。2、用VHDL
4、硬件描述语言层次化设计方法进行顶层文件和各模块电路的设计。3、用QuartusII对设计进行编译、综合、仿真,给出仿真波形和时序分析数据(不包括数码显示部分)。4、通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。管脚锁定:clk: clk1 43 clk1start: PIO23 30 SW1NSG PIO19 29 LED12 NSY PIO20 28 LED11NSR PIO21 27 LED10EWG PIO22 LED3EWY PIO12 LED2EWR LED15、画出完整的交通灯控制电路原理框图(含数码显示部分)。6、修改上述内容2的设计,增加数码显示部分。注意
5、:两方向的计数要求分别显示在数码管1、2和数码管7、8上。7、用MAX_plus对设计进行编译、综合、仿真,给出仿真波形和时序分析数据。8、再次将设计下载到实验电路上进行硬件测试。 新增管脚锁定:A(6): PIO6 11 SEG g A(5): PIO5 10 SEG fA(4): PIO4 9 SEG eA(3): PIO3 8 SEG dA(2): PIO2 7 SEG cA(1): PIO1 6 SEG bA(0): PIO0 5 SEG a*S(2): 80*S(1): 79*S(0): 78四、思考题:1、控制电路除用有限状态机实现外,还可以采用什么方法实现?2、如果增加夜间显示(
6、即全部黄灯闪烁),电路该怎样设计?实验结果:交通灯控制电路原理框图:顶层电路的VHDL描述:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic isport(clk,start:in std_logic;NSG,NSY,NSR,EWG,EWY,EWR:out std_logic;ledNS,ledEW:out std_logic_vector(7 downto 0)end;architecture behav of traffic iscomponent NSEWport
7、(clk,start:in std_logic;NSG,NSY,NSR,EWG,EWY,EWR:out std_logicend component;component led7sport(clock,start:in std_logic;ledns,ledew:out std_logic_vector(7 downto 0)end component;signal clk0,clk1,clk2,clknsr,clkewr:std_logic;beginu1:NSEW port map(clk=clk,start=start,NSG=NSG,NSY=NSY,NSR=NSR,EWG=EWG,EW
8、Y=EWY,EWR=EWR);u2:led7s port map(clock=clk,start=start,ledns=ledNS,ledew=ledEW);end;各模块电路的VHDL描述:模块clock的VHDL描述library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock isport(clk,start:in std_logic;clk0,clk1,clk2:out std_logicend clock;architecture behav of clock isbegin
9、process(clk,start)variable cql:std_logic_vector(6 downto 0);beginif clkevent and clk=1 thenif start=1then if cql0);end if;if cql24 thenclk1=1;else clk123 and cql48 thenclk2=1;else clk20 THEN CQI:=CQI-1;ELSE CQI:=1001;END IF;END IF;END IF;END IF;IF CQI=0 THEN COUT=1;ELSE COUT=0;END IF;CQ=CQI;END PROC
10、ESS;END BEHAV;模块NSG的VHDL描述library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity NSG isport(clk,start:in std_logic;cq:out std_logic_vector(3 downto 0);oout:out std_logicend;architecture one of NSG isbeginprocess(clk,start)variable cqi:std_logic_vector(3 downto 0);beginif clk
11、event and clk=1 then if start=1 thenif cqi0);end if;end if;if cqi5 then oout=1;else oout=0;end if;end if;cq=cqi;end process;end one;模块NSR的VHDL描述library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity NSR isport(clk,start:in std_logic;cq:out std_logic_vector(3 downto 0);oout:o
12、ut std_logicend;architecture one of NSR isbeginprocess(clk,start)variable cqi:std_logic_vector(3 downto 0);beginif clkevent and clk=1 then if start=1 thenif cqi0);end if;end if;if cqi6 then oout=0;else oout=1;end if;end if;cq=cqi;end process;end one;模块NSEW的VHDL描述library ieee;use ieee.std_logic_1164.
13、all;use ieee.std_logic_unsigned.all;entity NSEW isport(clk,start:in std_logic;NSG,NSY,NSR,EWG,EWY,EWR:out std_logicend;architecture one of NSEW isbeginprocess(clk,start)variable cqi:std_logic_vector(5 downto 0);beginif clkevent and clk=1and start=1 then if cqi0);end if;if cqi21 then NSG=1;else NSG20
14、 and cqi25 then NSY=1;else NSY=0;end if;if cqi25 then EWR=1;else EWR24 and cqi49 then NSR=1;else NSR24 AND cqi45 then EWG=1;else EWG44 AND CQI49 then EWY=1;else EWY=0;end if;end if;end process;end one;模块led7s的VHDL描述:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity led7
15、s isport(clock,start:in std_logic;ledns,ledew:out std_logic_vector(7 downto 0)end;architecture behav of led7s is signal cqi : std_logic_vector(7 downto 0);signal cql : std_logic_vector(7 downto 0);signal cnt6: std_logic_vector(7 downto 0);signal clk : std_logic;beginclk = clock ;process(clk)beginif
16、clkevent and clk=1 thenif start=1thenif cnt647 then cnt6=cnt6+1; else cnt632 then cqi=cqi-1;elsif cqi=32 then cqi16 then cqi=cqi-1;elsif cqi=16 then cqi0 then cqi=cqi-1;elsif cqi=0 and cnt6=0then cqi32 then cql=cql-1;elsif cql=32 then cql16 then cql=cql-1;elsif cql=16 then cql0 then cql=cql-1;elsif
17、cql=0 and cnt6=24then cql=00100100;end if;end if;end if;end process;ledew=cqi;ledns=cql;end;交通灯工作时序仿真波形:测试结果及分析:(1)东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,南北方向亮红灯时间应等于东西方向亮黄、绿灯时间之和.(2)当某方向红灯亮时,置显示器为某值,然后以每秒减1计数方式方式工作,直至减到数为“0”,十字路口红、绿灯交换,一次工作循环结束,进入下一步某方向地工作循环。例如:当东西方向从黄灯转换成红灯时,置东西方向数字显示为24,并使数显计数器开始减“1”计数,当减到“0”,时,此时红灯灭,而东西方向的绿灯亮;同时,南北方向的红灯亮,并置南北方向的数显为24。【回答问题】1、控制电路除用有限状态机实现外,还可以采用什么方法实现?2、如果增加夜间显示(即全部黄灯闪烁),电路该怎样设计?答:1. 还可以用进程语句实现,用一个十二进制的计数器作为控制模块,则EWR、EWG、EWY、NSR、NSG、NSY在计数器不同输出的时候有相应的输出。2. 把黄灯输出信号EWY、NSY作为使能端,接到一个锁存器上,锁存器的输入时一个频率较高的信号,输出接黄色LED。当EWY、NSY=1时,黄灯闪烁。
限制150内