广西科技大学EDA课程设计 基于VHDL的交通灯控制器设计

广西科技大学(筹)课程设计 基于VHDL的交通灯控制器设计

八、参考文献

1. 潘松,黄继业. EDA技术实用教程(第二版)[M]. 北京:北京航空航天大学出

版社,1990

2. 刘欲晓,方强,黄宛宁等.EDA技术与VHDL电路开发应用实践[M].北京:

电子工业出版社,2009

3. 谭会生,瞿遂春等.EDA技术综合应用实例与分析[M].西安:西安电子科技

大学出版社.2004.

12

广西科技大学(筹)课程设计 基于VHDL的交通灯控制器设计

九、附录

交通灯控制器的VHDL有限状态机程序如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY traffic_ctrl IS GENERIC(

green1_cnt:INTEGER:=30; yellow1_cnt:INTEGER:=5; green2_cnt:INTEGER:=20; yellow2_cnt:INTEGER:=5 ); PORT(

clk: IN STD_LOGIC; rst: IN STD_LOGIC; lgt1_red: OUT STD_LOGIC; lgt1_yellow: OUT STD_LOGIC; lgt1_green: OUT STD_LOGIC; lgt2_red: OUT STD_LOGIC; lgt2_yellow: OUT STD_LOGIC; lgt2_green: OUT STD_LOGIC );

END ENTITY traffic_ctrl;

ARCHITECTURE rtl OF traffic_ctrl IS TYPE states IS (st0,st1,st2,st3);

SIGNAL state:states:=st0;

SIGNAL cnt:integer range 0 to 30:=1; SIGNAL cnt_enb:std_logic:='0';

13

广西科技大学(筹)课程设计 基于VHDL的交通灯控制器设计

BEGIN

PROCESS(clk,rst) BEGIN

IF(rst='1')THEN state<=st0; cnt<=1;

ELSIF(rising_edge(clk))THEN IF(cnt_enb='1')THEN cnt<=cnt+1; ELSE cnt<=1; END IF; CASE state IS WHEN st0=>

IF(cnt=green1_cnt) THEN state<=st1; ELSE state<=st0; END IF; WHEN st1=>

IF(cnt=yellow1_cnt) THEN state<=st2; ELSE state<=st1; END IF; WHEN st2=>

IF(cnt=green2_cnt)THEN state<=st3; ELSE state<=st2; END IF; WHEN st3=>

14

广西科技大学(筹)课程设计 基于VHDL的交通灯控制器设计

IF(cnt=yellow2_cnt) THEN state<=st0; ELSE state<=st3; END IF; END CASE; END IF; END PROCESS;

PROCESS(state) BEGIN

CASE state IS WHEN st0=> lgt1_red<='0'; lgt1_yellow<='0'; lgt1_green<='1'; lgt2_red<='1'; lgt2_yellow<='0'; lgt2_green<='0'; cnt_enb<='1';

IF(cnt=green1_cnt)THEN cnt_enb<='0'; END IF; WHEN st1=> lgt1_red<='0'; lgt1_yellow<='1'; lgt1_green<='0'; lgt2_red<='1'; lgt2_yellow<='0'; lgt2_green<='0'; cnt_enb<='1';

IF(cnt=yellow1_cnt)THEN

15

广西科技大学(筹)课程设计 基于VHDL的交通灯控制器设计

cnt_enb<='0'; END IF; WHEN st2=> lgt1_red<='1'; lgt1_yellow<='0'; lgt1_green<='0'; lgt2_red<='0'; lgt2_yellow<='0'; lgt2_green<='1'; cnt_enb<='1';

IF(cnt=green2_cnt)THEN cnt_enb<='0'; END IF; WHEN st3=> lgt1_red<='1'; lgt1_yellow<='0'; lgt1_green<='0'; lgt2_red<='0'; lgt2_yellow<='1'; lgt2_green<='0'; cnt_enb<='1';

IF(cnt=yellow2_cnt)THEN cnt_enb<='0'; END IF; END CASE; END PROCESS;

END rtl;

16

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4