名称:汽车速度表VHDL代码数码管显示车速超速警告(代码在文末下载)
软件:QuartusII
语言:VHDL
代码功能:
设计一个汽车速度表。车轮每转一圈会产生一个脉冲,每个脉冲代表1米的距离,根据单位时间的脉冲数可推算出汽车的速度。
要求:
(1)模拟产生车轮运转产生的脉冲信号并对其计数,用按键选择脉冲信号的不同频率。
(2)每隔10秒读取一次脉冲计数器,并据此计算车速;
(3)用数码管显示车速,单位Kmh;
(4)给出超速警告。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在21EDA EPM240-CPLD学习板验证,开发板如下,其他开发板可以修改管脚适配:
21EDA EPM240-CPLD学习板使用说明书(1).pdf
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
管脚
5. Testbench
6. 仿真图
按键模块
控制模块
速度模块
报警模块
显示模块
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --速度计数模块 ENTITY speed IS PORT ( clk : IN STD_LOGIC;--输入时钟1000Hz pulse : IN STD_LOGIC;--传感器脉冲信号,每个脉冲1米 clk_en : IN STD_LOGIC;--输出10s使能信号 latch : IN STD_LOGIC;--输出锁存信号 rst : IN STD_LOGIC;--输出清零 speed_num : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--输出速度值 ); END speed; ARCHITECTURE behave OF speed IS SIGNAL cnt : STD_LOGIC_VECTOR(16 DOWNTO 0) := "00000000000000000"; SIGNAL cnt_lat : STD_LOGIC_VECTOR(16 DOWNTO 0) := "00000000000000000"; SIGNAL speed_num_buf : STD_LOGIC_VECTOR(23 DOWNTO 0); BEGIN PROCESS (clk, rst) BEGIN IF (rst = '1') THEN cnt <= "00000000000000000"; ELSIF (clk'EVENT AND clk = '1') THEN--传感器脉冲计数 IF (pulse = '1') THEN cnt <= cnt + "00000000000000001";--传感器脉冲计数 END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (latch = '1') THEN cnt_lat <= cnt;--输出锁存信号 END IF; END IF; END PROCESS; --速度换算:1 米/秒(米每秒)=3.6 千米/时(千米每时) --10s对应距离为cnt_lat米,速度为cnt_lat/10(米每秒) --输出速度值cnt_lat*92/256; speed_num_buf <= cnt_lat * "1011100";--*92/256 speed_num<=speed_num_buf(15 DOWNTO 8); --speed_num<=speed_num_buf(11 DOWNTO 4); END behave;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=273
643