VHDL设计——交通红绿灯控制器模块

设计一个交通红绿灯控制器模块,实现主干道和支路之间红绿黄灯的信号转换。
在这里插入图片描述
在这里插入图片描述
Design Block:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TRAFFIC IS
	PORT(CLK,RST:IN STD_LOGIC;
		NSLIGHTS,WELIGHTS:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END TRAFFIC;
ARCHITECTURE BEHAV OF TRAFFIC IS
TYPE STATES IS (S0,S1,S2,S3);
	ATTRIBUTE ENUM_ENCODING:STRING;
	ATTRIBUTE ENUM_ENCODING OF STATES:TYPE IS "one-hot/gray";
	SIGNAL C_ST,N_ST:STATES:=S0;
	SIGNAL TIME0:STD_LOGIC_VECTOR(6 DOWNTO 0);
	BEGIN
	COUNT:PROCESS(CLK,RST)
	VARIABLE T:STD_LOGIC_VECTOR(6 DOWNTO 0);
		BEGIN
		IF RST='1' THEN T:=(OTHERS=>'0');
		ELSIF CLK'EVENT AND CLK='1' THEN 
			IF(T<68) THEN T:=T+1;
			ELSE T:=(OTHERS=>'0');
			END IF;
		END IF;
		TIME0<=T;
	END PROCESS COUNT;
	COM:PROCESS(C_ST,TIME0)
		BEGIN
		CASE C_ST IS
		WHEN S0 => NSLIGHTS<="010";WELIGHTS<="100";
			IF TIME0=39 THEN N_ST<=S1;
			ELSE N_ST<=S0;
			END IF;
		WHEN S1 => NSLIGHTS<="001";WELIGHTS<="100";
			IF TIME0=43 THEN N_ST<=S2;
			ELSE N_ST<=S1;
			END IF;
		WHEN S2 => NSLIGHTS<="100";WELIGHTS<="010";
			IF TIME0=63 THEN N_ST<=S3;
			ELSE N_ST<=S2;
			END IF;
		WHEN S3 => NSLIGHTS<="100";WELIGHTS<="001";
			IF TIME0=67 THEN N_ST<=S0;
			ELSE N_ST<=S3;
			END IF;
		END CASE;
	END PROCESS COM;
	REG:PROCESS(CLK,RST)
		BEGIN
		IF RST='1' THEN C_ST<=S0;
		ELSIF CLK'EVENT AND CLK='1' THEN C_ST<=N_ST;
		END IF;
	END PROCESS REG;
END BEHAV;

Test Bench:

LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;                                
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TRAFFIC_vhd_tst IS
END TRAFFIC_vhd_tst;
ARCHITECTURE TRAFFIC_arch OF TRAFFIC_vhd_tst IS                                                  
SIGNAL CLK1 : STD_LOGIC;
SIGNAL RST1 : STD_LOGIC;
SIGNAL NS : STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL WE : STD_LOGIC_VECTOR(2 DOWNTO 0);
CONSTANT CLK_P:TIME:=1 us;
COMPONENT TRAFFIC
	PORT(CLK,RST:IN STD_LOGIC;
		NSLIGHTS,WELIGHTS:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END COMPONENT;
BEGIN
	i1 : TRAFFIC PORT MAP(CLK => CLK1, RST => RST1, NSLIGHTS => NS, WELIGHTS => WE);
	PROCESS
		BEGIN
		CLK1<='0'; WAIT FOR CLK_P;
		CLK1<='1'; WAIT FOR CLK_P;
	END PROCESS;
	RST1<='1','0' AFTER 2 us;
END TRAFFIC_arch;

仿真波形图:
在这里插入图片描述

  • 7
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值