名称:骑行码数表设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
骑行码数表设计
设计一个骑行码速表,其功能要求如下:
1、速度和距离:码速表可以实时显示骑行速度和行驶距离,帮助骑行者了解自己的骑行表现。
2、时间管理:记录骑行时间,帮助骑行者制定和调整训练计划。
其余功能根据自己调研情况自由发挥。
提示:
1、使用频率为10Hz的时钟信号(频率太高耗电量高),做一个时钟,用于时间管理。
2、设置按钮,用于显示切换,时钟设置、数据清零、轮毂尺寸设置等,一个供系统“复位”用。
3、显示使用OLED显示屏。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1、工程文件
2、程序文件
3、程序编译
4、RTL图
5、Testbench
6、仿真图
整体仿真图
上图可以看出,总共骑行3分26秒,骑行距离478米。计算的骑行速度为2.3米每秒
分频器模块
模式设置模块
轮毂尺寸设置模块
控制模块
显示模块
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ???USE?ieee.std_logic_arith.all; --?控制模块 ENTITY?control?IS ???PORT?( ??????clk_in??????:?IN?STD_LOGIC;?--?10Hz时钟输入 ??????reset???????:?IN?STD_LOGIC;?--?重置信号 ??Wheel_pulse?:?IN?STD_LOGIC;--车轮脉冲,骑行一圈对应一个脉冲 ??????start_key???:?IN?STD_LOGIC;?--开始骑行按键 ??????end_key?????:?IN?STD_LOGIC;?--?停止骑行按键 ??????clk_1Hz?????:?IN?STD_LOGIC;?--?1Hz时钟信号 ??perimeter???:?IN?STD_LOGIC_VECTOR(11?DOWNTO?0);--轮毂周长(单位cm) ??speed???????:?OUT?STD_LOGIC_VECTOR(11?DOWNTO?0);--速度(米每秒) ??all_distance?:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--里程(米) ??????hour_time???:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);?--?小时输出 ??????minute_time?:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);?--?分钟输出 ??????second_time?:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)??--?秒输出 ???); END?control; ARCHITECTURE?bahave?OF?control?IS SIGNAL?time_en????????:?STD_LOGIC; ???SIGNAL?hour???????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";?--?小时信号 ???SIGNAL?minute?????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";?--?分钟信号 ???SIGNAL?second?????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";?--?秒信号 ??? ???SIGNAL?hour_int???????????:?integer;?--?小时信号 ???SIGNAL?minute_int?????????:?integer;?--?分钟信号 ???SIGNAL?second_int?????????:?integer;?--?秒信号 ??? ???SIGNAL?distance???:??STD_LOGIC_VECTOR(15?DOWNTO?0);--路程 ???SIGNAL?distance_int???:??integer;--路程 ???SIGNAL?distance_int_100???:??integer;--路程(米) ???SIGNAL?total_second????:?integer?:=?0;? ???SIGNAL?speed_int?:??integer;--速度 ??? BEGIN --控制计时使能信号 ???PROCESS?(clk_in) ???BEGIN ??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN?--?检测到时钟上升沿 ?????????IF?(reset?=?'1')?THEN? ????????????time_en?<=?'0';?--?计时使能 ?????????ELSIF(start_key?=?'1')THEN time_en?<=?'1';?--?开始计时使能 ELSIF(end_key?=?'1')THEN time_en?<=?'0';?--?停止计时使能 END?IF; END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1527