基于FPGA的乒乓球比赛

配套FPGA开发板(含该设计的工程代码):https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-4676525296.4.6e8950ed57YPhv&id=17848039135

代码文件说明

路径: lab1文件夹里面

顶层文件

按键消抖

Led控制

数码管显示

约束文件

仿真modelsim工程

硬件

时钟信号

按键

数码管

Led

仿真

开始按键消抖模块

    状态机型消抖电路

状态机型消抖电路采用有限状态机的设计方法来描述与实现,状态机有S0,S1,S2,s3,s4,s5,6种状态,在S0状态下key_out输出为低电平,并以clk时钟信号的频率采样按键输入信号,如果key_in='0',则保持在S0状态,并继续采样按键输入信号的状态,如果key_in='1',则转入S1状态;在S1状态下key_out输出仍为低电平,继续采样按键输入信号的状态,如果key_in='1',则转入S2状态,如果key_in='0'则转入S0状态;在S2状态下继续采样按键输入信号的状态,如果key_in='1',则保持在S2状态,key_out输出正脉冲。……..。如果key_in='0',则转入S5状态,key_out输出低电平。由仿真波形图验证功能正常。

左方选手按键消抖模块

状态机型消抖电路

状态机型消抖电路采用有限状态机的设计方法来描述与实现,状态机有S0,S1,S2,s3,s4,s5,6种状态,在S0状态下key_out输出为低电平,并以clk时钟信号的频率采样按键输入信号,如果key_in='0',则保持在S0状态,并继续采样按键输入信号的状态,如果key_in='1',则转入S1状态;在S1状态下key_out输出仍为低电平,继续采样按键输入信号的状态,如果key_in='1',则转入S2状态,如果key_in='0'则转入S0状态;在S2状态下继续采样按键输入信号的状态,如果key_in='1',则保持在S2状态,key_out输出正脉冲。……..。如果key_in='0',则转入S5状态,key_out输出低电平。由仿真波形图验证功能正常。

右方选手按键消抖模块

状态机型消抖电路

状态机型消抖电路采用有限状态机的设计方法来描述与实现,状态机有S0,S1,S2,s3,s4,s5,6种状态,在S0状态下key_out输出为低电平,并以clk时钟信号的频率采样按键输入信号,如果key_in='0',则保持在S0状态,并继续采样按键输入信号的状态,如果key_in='1',则转入S1状态;在S1状态下key_out输出仍为低电平,继续采样按键输入信号的状态,如果key_in='1',则转入S2状态,如果key_in='0'则转入S0状态;在S2状态下继续采样按键输入信号的状态,如果key_in='1',则保持在S2状态,key_out输出正脉冲。……..。如果key_in='0',则转入S5状态,key_out输出低电平。由仿真波形图验证功能正常。

Led控制模块

    Clk_1s控制led灯的流动速度,初始化时led为11111111,表示没有一个灯会亮,在start按键有效后,先由左方选手开球,则led灯为0111111,表示先由左方选手开球,如果这时左方选手按下按键,则led灯开始流动起来,由"0111111"~"11111110"开始流动起来,表示球开始移动,当led灯为"11111110"时,如果右方选手没有按下按键的话,则表示右方选手没有接到球,这时score_a为"0001",表示这时左方选手得到1分,由仿真波形图验证功能正常。

数码管显示模块

位选信号

本设计采用共阳数码管,即位选低电平有效,需要使用3位数码管显示3位的学号,所以需要位宽为3bit的位选信号,并且将位选信号设置为低电平;

段选信号

本设计采用共阳数码管,数码管的段选信号为8bit,数码管的段选对应实物图如下:

一个数码管有八段:A,B,C,D,E,F ,G,H,DP,即由八个发光二极管组成,; 因为发光二极管导通的方向是一定的(导通电压一般取为1.7V),这八个发光二极管的公共端有两种: +5V(即为共阳极数码管)、接地(即为共阴极数码管),其中共阳极每个段均有0导通,而共阴极则1导通发光,所以共阳极数码管和共阴极数码管显然是不同的,段选码表如下图所示:

仿真

    当双方分数都为0时,数码管的段位为C0,对应的数码管显示数字为0。仿真功能验证正确。

    当左方选手得到1分时,score_a为0001,数码管段位为 "f9",对应显示的数码管为1,表示左方选手得到1分,而右方选手得到0分,score_b为0000,数码管段位为 "c0",对应显示的数码管为0。仿真功能验证正常。

整体仿真

初始化时led为11111111,表示没有一个灯会亮,在start按键有效后,先由左方选手开球,则led灯为0111111,表示先由左方选手开球,如果这时左方选手按下按键,则led灯开始流动起来,由"0111111"~"11111110"开始流动起来,表示球开始移动,数码管段位为"C0",表示双方都没有得分,对应数码管显示都是0分。当led灯为"11111110"时,如果右方选手没有按下按键的话,则表示右方选手没有接到球,这时score_a为"0001",表示这时左方选手得到1分,由仿真波形图验证功能正常。

    当左方选手得到1分时,score_a为0001,数码管段位为 "f9",对应显示的数码管为1,表示左方选手得到1分,而右方选手得到0分,score_b为0000,数码管段位为 "c0",对应显示的数码管为0。仿真功能验证正常。

原文地址:https://www.cnblogs.com/logic3/p/8469572.html