本课程旨在通过设计一款24秒篮球比赛倒计时器,教授学生FPGA的基础知识和应用技巧,结合实际项目提升动手能力和逻辑思维。
篮球进攻24秒倒计时器系统由5CEBA4F23C7N FPGA现场可编程逻辑器件、按键模块、LED模块、数码管显示模块、时钟模块五部分组成。
### 篮球进攻24秒倒计时器设计
#### 一、系统概述与设计方案
本项目旨在开发一个基于FPGA技术的篮球进攻24秒倒计时器,适用于大学课程或工程项目。该系统的控制核心是5CEBA4F23C7N型号的现场可编程门阵列芯片,能够实现高度灵活的数字逻辑设计。此外,系统还包括按键模块、LED模块、数码管显示模块和时钟模块等组成部分。
#### 二、系统组成及工作原理
**1. 系统组成**
- **5CEBA4F23C7N FPGA芯片**:作为系统的控制中心,负责接收外部输入信号并进行逻辑处理。
- **按键模块**:用于用户交互,包括但不限于复位、暂停和回秒等功能。
- **LED模块**:用于显示特定状态。例如,在倒计时结束时所有LED灯会亮起。
- **数码管显示模块**:展示具体的倒计时间数值。
- **时钟模块**:提供稳定的50MHz基准时钟信号,用作系统内部的时序参考。
**2. 工作原理**
- **初始化**:启动后,用户可以通过按键将数码管设置为初始值24秒,并且LED熄灭。
- **暂停与继续**:比赛中需要暂停(如球员轮换)的情况下,可以使用按键使倒计时停止。完成操作后再按一次按钮让倒计时恢复运行。
- **小数点显示**:当时间剩余8秒以下时,数码管会开始显示小数点后两位数字以提醒玩家注意时间紧迫性。
- **回秒功能**:进攻方投篮未中但抢到前场篮板的情况下可将倒计时重置为14秒,从而延长进攻机会。
- **倒计时结束**:当倒计时时钟归零,数码管外圈和LED灯全部点亮表示球权转换。
#### 三、程序设计与实现
**3. 程序设计**
该部分主要包括以下几个方面:
- **时钟分频器**:使用50MHz的基准时钟信号生成10ms周期脉冲。
- **状态机设计**:涵盖系统的所有工作模式,如初始化、暂停/继续运行等不同操作逻辑。
- **显示控制**:管理数码管和LED的状态以确保清晰地传达当前状况给用户。
- **用户接口处理**:解析用户的按键输入,并相应调整系统的功能行为。
**4. 主程序流程图**
- **复位状态**:初始化为24秒,所有LED熄灭。
- **正常运行**:根据时钟信号更新倒计时时长。
- **暂停模式**:此时停止时间计算。
- **回秒操作**:满足特定条件(如抢到前场篮板)后重置时间为14秒开始新的进攻周期。
- **结束状态**:当剩余时间归零,数码管和LED全亮表示比赛进入下一个阶段。
#### 四、Verilog HDL代码示例
以下是简化版的Verilog代码片段以展示倒计时器的基本逻辑实现:
```verilog
module miao_24(
input clk, rst, pause, button,
input [3:0] data_tens, data_ones,
output reg [6:0] seg_a, seg_b, seg_c, seg_d, seg_e, seg_f,
output reg [9:0] led,
output reg [3:0] tens, ones
);
定义时钟分频计数器
reg [25:0] cnt;
分频模块
always @(posedge clk or negedge rst)
if (!rst)
cnt <= 0;
else
cnt <= (cnt == 25d499_999) ? 0 : (cnt + 1);
主逻辑模块
always @(posedge clk or negedge rst)
if (!rst)
{tens, ones} <= h24; // 初始化为24秒
else if (pause == 1b1)
tens <= tens;
else begin
倒计时更新
if (cnt < 25d499_999)
{tens, ones} <= {tens, ones};
else if (button == 1b1) // 回秒操作
{tens, ones} <= data_tens;
else begin
更新倒计时值
tens <= tens - 1;
end
endmodule
```