名称:基于FPGA的拔河游戏机VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
拔河游戏机
功能:设计一个拔河游戏机,利用实验箱上的16个LED指示灯,开始时中间的LED灯亮,设置两个按键,代表拔河双方,有效按键会使LED向自己的方向偏移,直到越过某个LED灯后即为胜利,游戏自动结束。设置开始按键,由裁判按下开始按键后,游戏开始
发挥:添加数码管显示当前LED灯显示位置及结束后显示胜利方
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
6. Testbench
7. 仿真图
整体仿真图
按键消抖模块
控制模块
显示模块
部分代码展示:
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity bahe is port ( -- CLOCK CLK: in std_logic; reset_n : IN STD_LOGIC;--复位信号,低有效 key1_in: in std_logic;--选手1 key2_in: in std_logic;--选手2 -- LED led : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--16个led SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--数码管位选 seg_select : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选 ); end bahe; architecture behav of bahe is signal Button1 : STD_LOGIC;--选手1 signal Button2 : STD_LOGIC;--选手2 signalposition_H : STD_LOGIC_VECTOR(3 DOWNTO 0);--16个led位置十位 signalposition_L : STD_LOGIC_VECTOR(3 DOWNTO 0);--16个led位置个位 signalwiner : STD_LOGIC_VECTOR(1 DOWNTO 0);--胜利方 --按键消抖模块 component key_jitter IS PORT ( clkin : IN STD_LOGIC;--50M key_in : IN STD_LOGIC;--按键输入 key_negedge : OUT STD_LOGIC--按键下降沿输出 ); END component; --控制模块 component bahe_ctrl IS PORT ( clk : IN STD_LOGIC;--标准时钟 reset_n : IN STD_LOGIC;--复位信号,低有效 shift1 : IN STD_LOGIC;--选手1 shift2 : IN STD_LOGIC;--选手2 position_H : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--16个led位置十位 position_L : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--16个led位置个位 winer : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--胜利方 led : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--16个led ); END component; --显示模块 component display IS PORT ( clk : IN STD_LOGIC; position_H : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--16个led位置十位 position_L : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--16个led位置个位 winer : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--胜利方 SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--数码管位选 seg_select : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选 ); END component; begin --按键消抖模块 U1_key_jitter: key_jitter PORT MAP( clkin =>CLK, --50M key_in =>key1_in, --按键输入 key_negedge =>Button1--按键下降沿输出 ); --按键消抖模块 U2_key_jitter: key_jitter PORT MAP( clkin =>CLK, --50M key_in =>key2_in, --按键输入 key_negedge =>Button2--按键下降沿输出 ); --控制模块 U_bahe_ctrl: bahe_ctrl PORT MAP( clk =>CLK,--标准时钟 reset_n =>reset_n,--复位信号,低有效 shift1 =>Button1,--选手1 shift2 =>Button2,--选手2 position_H=>position_H, position_L=>position_L, winer=>winer, led =>led--16个led ); --显示模块 U_display: display PORT MAP( clk =>clk, position_H=>position_H, position_L=>position_L, winer=>winer, SEL =>SEL,--数码管位选 seg_select=>seg_select--数码管段选 ); end behav;
源代码
扫描文章末尾的公众号二维码