VHDL 汽车尾灯报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验项目名称:汽车尾灯的设计
一、实验目的
掌握VHDL程序设计方法
二、实验内容和要求
共6个尾灯,汽车正常行驶时,6个灯全灭;
左转时,左边3个灯从右到左依次亮灭;
右转时,右边3个灯从左到右依次亮灭;
刹车时,车灯全亮;故障时,全部闪烁。
在软件工具平台上,进行VHDL语言的各模块编程输入、编译实现和仿真验证。
三、设计思想
首先设置5种状态,即正常行驶“000”,左转“001”,右转“010”,刹车“011”,故障“100”,这里用CONTROL的三位二进制来表示汽车的行驶状态。然后6个二极管和5个状态一一对应,并依据引入的时钟信号在上升沿发光二极管发生响应并循环,直到改变状态。这里用LAMP6S表示6个发光二极管的状态。
四、源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CAR IS
PORT(CLK:IN STD_LOGIC;--normaldriving:000, left:001, right:010, brake:011, breakdown:100 CONTROL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
LAMP6S:BUFFER STD_LOGIC_VECTOR(5 DOWNTO 0):="000000");
END;
ARCHITECTURE one OF CAR IS
SIGNAL LK:STD_LOGIC:='1';
SIGNAL CONTORL:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(CLK,CONTROL)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
CASE CONTROL IS
WHEN "000"=>LAMP6S<="000000";--normaldriving
WHEN "001"=> CASE LAMP6S IS
WHEN "000000"=>LAMP6S<="001000";
WHEN "001000"=>LAMP6S<="010000";
WHEN "010000"=>LAMP6S<="100000";
WHEN OTHERS=>LAMP6S<="001000";
END CASE;
WHEN "010"=> CASE LAMP6S IS
WHEN "000000"=>LAMP6S<="000100";
WHEN "000100"=>LAMP6S<="000010";
WHEN "000010"=>LAMP6S<="000001";
WHEN OTHERS=>LAMP6S<="000100";
END CASE;
WHEN "011"=>LAMP6S<="111111";--brake
WHEN "100" =>LK<=NOT(LK);IF LK='1' THEN LAMP6S<="000000";
ELSE LAMP6S<="111111";
END IF;
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;
END;
仿真波形如下:
其中LAMP6S中的345是左转灯,左转时(CONTROL为001),左边3个灯从右到左依次亮灭,而右边灯全灭;012是右转灯,右转时(CONTROL为010),右边3个灯从左到右依次亮灭,而左边灯全灭;刹车时(CONTROL为011),车灯全亮;故障时(CONTROL为100),全部闪烁。正常行驶时(CONTROL为000),灯全灭。
五、总结
通过本次实验,我们更进一步地掌握了VHDL程序设计方法,并熟悉了利用双重case语句来实现多重循环的要求。