名称:基于FPGA的汽车尾灯设计VHDL代码ISE仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
汽车尾灯设计
设计左转、右转、刹车、紧急刹车对应的汽车尾灯状态
1. 工程文件
2. 程序文件
3. 元件例化
4. 程序编译
5. Testbench仿真激励文件
6. 仿真图
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --尾灯控制模块 ENTITY backlight IS PORT ( clk : IN STD_LOGIC; left_btn : IN STD_LOGIC;--左转 right_btn : IN STD_LOGIC;--右转 middle_btn : IN STD_LOGIC;--刹车 critical_btn : IN STD_LOGIC;--紧急刹车 led : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END backlight; ARCHITECTURE trans OF backlight IS SIGNAL left_cnt : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; SIGNAL left_light : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000000"; SIGNAL right_cnt : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; SIGNAL right_light : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000000"; SIGNAL stop_cnt : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; SIGNAL stop_light : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000000"; SIGNAL double_cnt : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; SIGNAL double_light : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000000"; BEGIN PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (left_btn = '1' AND right_btn = '0') THEN--左转时 left_cnt <= left_cnt + "01";--计数器累加 ELSE left_cnt <= "00"; END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN CASE left_cnt IS WHEN "00" => left_light <= "0000000";--左边尾灯向左流水 WHEN "01" => left_light <= "0010000"; WHEN "10" => left_light <= "0100000"; WHEN "11" => left_light <= "1000000"; WHEN OTHERS => NULL; END CASE; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (left_btn = '0' AND right_btn = '1') THEN--右转时 right_cnt <= right_cnt + "01";--计数器累加 ELSE right_cnt <= "00"; END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN CASE right_cnt IS WHEN "00" => right_light <= "0000000";--右边尾灯右流水 WHEN "01" => right_light <= "0000100"; WHEN "10" => right_light <= "0000010"; WHEN "11" => right_light <= "0000001"; WHEN OTHERS => NULL; END CASE; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (middle_btn = '1' AND critical_btn = '1') THEN--紧急刹车 stop_cnt <= stop_cnt + "01";--计数器累加 ELSE stop_cnt <= "00"; END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN CASE stop_cnt IS WHEN "00" => stop_light <= "0001000";--中间亮,两边闪烁 WHEN "01" => stop_light <= "1111111"; WHEN "10" => stop_light <= "0001000"; WHEN "11" => stop_light <= "1111111"; WHEN OTHERS => NULL; END CASE; END IF; END PROCESS;
源代码
扫描文章末尾的公众号二维码