尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

篮球计时器FPGA设计:Verilog语言实现
📅 发布时间:2026/6/19 4:55:10

篮球计时器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模块根据add1、add2、add3信号来增加比分,复位时比分清零。

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

前面比分计数器模块里已经体现了按键加分的逻辑,当对应的add1、add2、add_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设计平台上大展身手啦!

相关新闻

  • 针刺热失控硬壳三元镍钴锰酸锂电池NCM系列的Comsol模拟计算探索
  • 自监督学习SimCLR:TensorFlow 2.x复现
  • PHP CORS 携带 Cookie 详解:为什么你一登录就跨域失败?

最新新闻

  • 武汉买猫买狗去哪看?梦宠山庄实地体验分享 - 园友3800037
  • 从零到一:Jetlinks物联网平台服务器部署实战与避坑指南
  • (转)一次ANSYS EM 2023R1 “Request name electronics_desktop does not exist in the licensing pool.“的离谱解决记录
  • 面试被问“你的缺点是什么”,90%的应届生都答错了!(附满分话术)
  • Spring Cloud Alibaba 最佳实践:基于 Spring Boot 4.0 的完整微服务示例项目
  • 三步掌握AI斗地主:如何用DouZero智能助手提升你的游戏胜率

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号