news 2026/3/29 19:49:42

篮球计时器FPGA设计:Verilog语言实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
篮球计时器FPGA设计:Verilog语言实现

篮球计时器fpga设计 verilog语言编写 支持quartus,modelsim,vivado设计 1.数码管显示每小节12分钟倒计时 2.数码管显示24s倒计时 3.数码管显示两队比分 4.按键加分(加一,加二,加三) 5.设有小节比赛开始结束按键,按下后,12分钟计数器重新计数,分数仍然保持不变 6.全局结束按键,按下后一切归零 7.暂停按键,按下后24s和12分钟计时器均暂停计时

在FPGA开发的世界里,实现一个篮球计时器是个有趣且具有实际应用价值的项目。今天咱就唠唠如何用Verilog语言打造一个满足多种需求的篮球计时器,并且它还能在Quartus、Modelsim、Vivado等常见设计平台上运行。

1. 数码管显示每小节12分钟倒计时

首先,咱们得有个计数器来记录时间。12分钟也就是$12\times60 = 720$秒,咱们用Verilog写个计数器模块。

module count_12min ( input wire clk, // 时钟信号 input wire rst, // 复位信号 input wire start, // 开始信号 output reg [9:0] sec // 秒数,最大720,10位足以 ); always @(posedge clk or posedge rst) begin if (rst) begin sec <= 10'd720; // 复位时初始化为12分钟 end else if (start) begin if (sec > 10'd0) begin sec <= sec - 1; // 每秒减1 end end end end

这段代码定义了一个count_12min模块,它接收时钟clk、复位rst和开始start信号。在时钟上升沿或者复位信号有效时,会根据条件对sec进行操作。复位时,sec被初始化为720,开始计时后,如果sec大于0,每秒减1。

2. 数码管显示24s倒计时

类似地,对于24秒倒计时,我们也写个计数器。

module count_24s ( input wire clk, input wire rst, input wire start, output reg [4:0] sec_24 // 秒数,最大24,5位足以 ); always @(posedge clk or posedge rst) begin if (rst) begin sec_24 <= 5'd24; end else if (start) begin if (sec_24 > 5'd0) begin sec_24 <= sec_24 - 1; end end end end

这个count_24s模块和前面12分钟倒计时的模块思路一样,只是计时范围变成了24秒。

3. 数码管显示两队比分

比分显示也得有计数器。咱们假设每队比分最多99分。

module score_counter ( input wire clk, input wire rst, input wire add_1, // 加1分信号 input wire add_2, // 加2分信号 input wire add_3, // 加3分信号 output reg [5:0] score // 比分,最大99,6位足以 ); always @(posedge clk or posedge rst) begin if (rst) begin score <= 6'd0; end else begin if (add_1) begin score <= score + 1; end else if (add_2) begin score <= score + 2; end else if (add_3) begin score <= score + 3; end end end end

scorecounter模块根据add1add2add3信号来增加比分,复位时比分清零。

4. 按键加分(加一,加二,加三)

前面比分计数器模块里已经体现了按键加分的逻辑,当对应的add1add2add_3信号有效时,比分就会相应增加。在实际电路连接中,这些信号就来自按键。

5. 设有小节比赛开始结束按键,按下后,12分钟计数器重新计数,分数仍然保持不变

我们得在顶层模块里处理这个逻辑。假设我们有个顶层模块basketball_timer

module basketball_timer ( input wire clk, input wire rst_global, // 全局复位 input wire rst_quarter, // 小节复位 input wire start_quarter, // 小节开始 input wire pause, // 暂停 input wire add_1_team1, add_2_team1, add_3_team1, input wire add_1_team2, add_2_team2, add_3_team2, output wire [9:0] sec_12min, output wire [4:0] sec_24, output wire [5:0] score_team1, output wire [5:0] score_team2 ); count_12min u1 ( .clk(clk), .rst(rst_quarter), .start(start_quarter), .sec(sec_12min) ); count_24s u2 ( .clk(clk), .rst(rst_global | pause), .start(1'b1), .sec_24(sec_24) ); score_counter u3 ( .clk(clk), .rst(1'b0), .add_1(add_1_team1), .add_2(add_2_team1), .add_3(add_3_team1), .score(score_team1) ); score_counter u4 ( .clk(clk), .rst(1'b0), .add_1(add_1_team2), .add_2(add_2_team2), .add_3(add_3_team2), .score(score_team2) ); endmodule

在这个顶层模块里,count12min模块的复位信号连接到rstquarter,当小节复位按键按下,12分钟计数器重新计数。而比分计数器的复位信号一直为0,保证分数不会因为小节复位而清零。

6. 全局结束按键,按下后一切归零

在顶层模块里,count24s模块的复位信号连接了rstglobal,当全局结束按键按下(rstglobal有效),24秒计数器复位。同时比分计数器也可以通过修改代码,在rstglobal有效时复位,就能实现全局结束按键按下后一切归零。

module score_counter ( input wire clk, input wire rst, input wire rst_global, // 新增全局复位信号 input wire add_1, input wire add_2, input wire add_3, output reg [5:0] score ); always @(posedge clk or posedge rst or posedge rst_global) begin if (rst_global) begin score <= 6'd0; end else if (rst) begin score <= 6'd0; end else begin if (add_1) begin score <= score + 1; end else if (add_2) begin score <= score + 2; end else if (add_3) begin score <= score + 3; end end end end

7. 暂停按键,按下后24s和12分钟计时器均暂停计时

在顶层模块里,count_24s模块的复位信号连接了pause,当暂停按键按下,pause信号有效,24秒计数器暂停计时。对于12分钟倒计时模块,我们可以稍微修改下代码。

module count_12min ( input wire clk, input wire rst, input wire start, input wire pause, // 新增暂停信号 output reg [9:0] sec ); always @(posedge clk or posedge rst) begin if (rst) begin sec <= 10'd720; end else if (start &&!pause) begin // 只有start有效且pause无效时才计时 if (sec > 10'd0) begin sec <= sec - 1; end end end end

这样就实现了暂停按键按下后,24秒和12分钟计时器均暂停计时的功能。

通过这些Verilog模块的组合,咱们就实现了一个功能丰富的篮球计时器,并且能在常见的FPGA设计平台上大展身手啦!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/20 3:27:53

LAMB Optimizer实战:大batch训练稳定性提升

LAMB Optimizer实战&#xff1a;大batch训练稳定性提升 在当今的大模型时代&#xff0c;训练一个千亿参数的Transformer不再稀奇&#xff0c;但如何让这样的庞然大物稳定地“跑起来”&#xff0c;却是每个AI工程师都头疼的问题。尤其是当团队试图通过增大 batch size 来加速训练…

作者头像 李华
网站建设 2026/3/21 5:56:39

Huggingface 214页训练手册:揭露构建世界级大模型的秘密

《The Smol Training Playbook: The Secrets to Building World-Class LLMs》由 Hugging Face 团队于 2025 年 10 月 30 日发布&#xff0c;详情见https://huggingface.co/spaces/HuggingFaceTB/smol-training-playbook&#xff0c;聚焦SmolLM3&#xff08;3B 参数多语言推理模…

作者头像 李华
网站建设 2026/3/20 3:27:49

学长亲荐8个AI论文软件,助你搞定本科生毕业论文!

学长亲荐8个AI论文软件&#xff0c;助你搞定本科生毕业论文&#xff01; AI 工具如何成为论文写作的得力助手 对于大多数本科生而言&#xff0c;撰写毕业论文是一项既紧张又充满挑战的任务。从选题、开题到资料收集、撰写初稿&#xff0c;再到修改润色和查重降重&#xff0c;…

作者头像 李华
网站建设 2026/3/20 3:27:47

微电网优化调度:多目标与改进粒子群算法的魅力

微电网优化调度作为智能电网优化的重要组成部分&#xff0c;对降低能耗、环境污染具有重要 意义。 微电网的发展目标既要满足电力供应的基本需求&#xff0c;又要提高经济效益和环境保护。 对此&#xff0c; 提出了一种综合考虑微电网系统运行成本和环境保护成本的并网模式下微…

作者头像 李华
网站建设 2026/3/19 16:56:42

PyTorch模型转TensorFlow全流程实操记录

PyTorch模型转TensorFlow全流程实操记录 在深度学习项目从实验走向落地的过程中&#xff0c;一个常见的现实挑战悄然浮现&#xff1a;研究团队用 PyTorch 快速验证了某个高精度模型&#xff0c;而工程团队却被告知——“请把它部署到生产环境”。问题来了&#xff1a;我们的服务…

作者头像 李华
网站建设 2026/3/18 2:48:38

Apple Silicon M系列芯片上的TensorFlow性能表现

Apple Silicon M系列芯片上的TensorFlow性能表现 在人工智能开发日益向边缘和终端设备迁移的今天&#xff0c;越来越多的数据科学家开始思考一个问题&#xff1a;是否可以在不依赖云端GPU集群的情况下&#xff0c;在自己的MacBook上高效训练一个中等规模的深度学习模型&#xf…

作者头像 李华