1、五、各模块功能介绍1.顶层原理图及基本原理如图1-1所示,系统时钟(48M)经过分频得到1HZ方波,为状态机和计数器提供时钟,lsdsn5.0六位总线分别表示主干道和支干道的绿灯、黄灯、红灯。ledsn5:主干道绿灯,ledsn4:主干道黄灯,ledsn3:主干道红灯,ledsn2:支干道绿灯,ledsn1:支干道黄灯,ledsn0:支干道红灯。当系统复位后,如果s输入一个低电平(主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒)状态机进入s0,主控电路c45输出一个高电平使能45s倒计时计数器(此时主干道绿灯亮,支干道红灯亮);当计数结束后,45s倒计时计数器
2、的cout输出一个进位信号,使状态机进入下一个状态s1,此时主控电路(状态机)c545输出一个高电平使能主干道5s倒计时计数器(此时主干道黄灯亮,支干道红灯亮);当计数结束后,5s倒计时计数器的cout输出一个进位信号,使状态机进入下一个状态s2,此时主控电路c25输出一个高电平使能25s倒计时计数器(此时主干道红灯亮,支干道绿灯亮);当计数结束后,25s倒计时计数器的cout输出一个进位信号,使状态机进入下一个状态s3,此时主控电路c525输出一个高电平使能支干道5s倒计时计数器(干道红灯亮,支干道黄灯亮);当计数结束后, 5s倒计时计数器的cout输出一个进位信号,使状态机重新进入下一个状
3、态s0,依次循环.当系统复位后,如果s输入一个高电平(主干道处于常允许通行的状态),此时状态机一直保持在s0状态。图1-1 顶层原理图图1-2 s=0时原理图仿真结果 当s=0时,表示主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,从仿真波形图上可以看到,ledsn5.0分别表示主干道绿、黄、红灯,支干道绿、黄、红灯,当复位后,主干道绿灯(ledsn5=1),支干道红灯(ledsn0=1);计满45秒后进入下个状态,主干道黄灯(ledsn4=1),支干道红灯(ledsn0=1);计满5秒后进入下个状态,主干道红灯(ledsn3=1),支干道绿灯(ledsn2=
4、1);计满25秒后进入下个状态,主干道红灯(ledsn3=1),支干道黄灯(ledsn1=1);计满5秒后进入下个状态,主干道绿灯(ledsn5=1),支干道红灯(ledsn0=1),依次循环.(sg和bt为译码电路的仿真结果,在此可以忽略)图1-3 s=1时原理图仿真结果当s=1时,表示主干道处于常允许通行的状态,此时从仿真图上可以看到状态一直保持在主干道绿灯(ledsn5=1),支干道红灯(ledsn0=1)。2.分频器如图2-1所示,这次交通灯的设计用到了两个分频器,一个是将系统时钟进行48M分频得到1HZ的时钟提供给状态机和计数器;另一个分频器是将系统时钟进行48K分频得到1KHZ的时
5、钟,给数码管动态显示模块作为扫频时钟用。这里采用的是事先写好的通用程序,分频系数可以根据具体需要进行修改,在此只给出原理图及VHDL源代码。图2-1 分频器原理图其VHDL代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.NUMERIC_BIT.ALL;-包含移位函数等.ENTITY int_div2 ISGENERIC ( F_DIV:Integer:=48000;-分频系数 F_DIV_WIDTH:=32-分频
6、计数器宽度 );PORT( clock : IN STD_LOGIC; clock_out: OUT STD_LOGICEND;ARCHITECTURE one OF int_div2 ISSIGNAL clk_p_r: STD_LOGIC;-上升沿输出时钟SIGNAL clk_n_r:-下降沿输出时钟SIGNAL count_p: STD_LOGIC_VECTOR(f_div_width-1 DOWNTO 0);-上升沿脉冲计数器SIGNAL count_n:-下降沿脉冲计数器-SIGNAL f_div_width_r:STD_LOGIC_VECTOR(f_div_width-1 DOWNT
7、O 0);SIGNAL clock_out_r:STD_LOGIC;SIGNAL full_div_p:-上升沿计数满标志SIGNAL half_div_p:-上升沿计数半满标志SIGNAL full_div_n:-下降沿计数满标志SIGNAL half_div_n:-下降沿计数半满标志BEGINclock_out=clock_out_r;-clock_out=clock WHEN (F_DIV=1) ELSE (clk_p_r=1 AND clk_n_r=) WHEN (F_DIV(0)=) clk_p_r); -判断计数标志位置位与否.full_div_p= WHEN (count_pF_
8、DIV-1) ELSE 0;half_div_p(F_DIV/2 )-1) ELSE full_div_n WHEN (count_nF_DIV -1) ELSE half_div_n(F_DIV/2)-1) ELSE PROCESS(clock)-上升沿脉冲计数-VARIABLE i:Integer RANGE 0 TO 31; IF RISING_EDGE(clock)THEN IF full_div_p= THEN count_p=count_p+1; IF (half_div_p=) THEN clk_p_r); clk_p_r= END IF; END IF;END PROCESS;
9、PROCESS(clock)-下降沿脉冲计数 IF FALLING_EDGE(clock)THEN IF full_div_n= count_n=count_n+1; IF half_div_n= clk_n_r clk_n_r PROCESS(clock) IF F_DIV= 1 THEN clock_out_r=clock; IF (F_DIV REM 2) =1 THEN clock_out_r= clk_p_r AND clk_n_r;=clk_p_r;3.主控电路(状态机)主控电路是一个单进程的Moore型有限状态机,状态转换图如图3-1所示。图3-1 状态转换图每种状态说明如下:原
10、状态目的状态转换条件状态输出s0s1s=1且s45=1ledsn=100001c45c25c545c525s2s545=1010001s3s25=1001100s525=1001010状态机原理图如图3-2所示。图3-2 状态机原理图状态机仿真结果如图3-3所示。图3-3 状态机仿真结果从仿真结果可以看到,满足状态转换条件后,状态机就会从现在的状态转移到下一个状态,具体的转换结果与上表相同。library ieee;use ieee.std_logic_1164.all;entity traffic is port(CLK,RST,s,s45,s25,s545,s525:in std_logi
11、c; c45,c25,c545,c525:out std_logic; ledsn:out std_logic_vector(5 downto 0);end traffic;architecture one of traffic is type sx is(s0,s1,s2,s3); signal current_state:sx; begin process(RST,CLK) if RST= then current_stateif s= then current_state elsif s45=s1; else current_stateend if; ledsnif s545=s2; when s2=if s25=s3; when s3=if s525= ledsn c450 then CQI:=CQI-1;cout else CQI: CQa2a1-0000001-1000010-2000011-3000100-4000101-5000110-6000111-7001000-8001001-9-10001011-11-12001101-13001110-14001111-15010000-16 when
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1