基于FPGA的辩论赛系统设计-8名选手-正反两方-支持单选手评分-正反两方评分总和

基于FPGA的辩论赛系统设计

  • 功能描述
  • 一、系统概述
  • 二、仿真波形
  • 视频


功能描述

1.答辩倒计时功能,当正反任意一方开始答辩后,倒计时30S。在倒计时最后10S后,LED灯开始闪烁。
2.答辩评分和计分功能,当答辩方结束答辩后,评委可以通过按键进行评分,基础分数为10分(满分),可以通过按键减少分数,最后通过确认按键确定评分。同时正方和反方的评分总数可以通过按键进行显示,达到一个计分的功能。
3.请看vcr

一、系统概述

控制模块:负责状态切换,应用状态机
数码管数据显示:负责显示数据切换
按键消抖:防止按键抖动
变量声明

module control(input       clk,input       rst_n,input       key_start,input       key_score,input       key_down,output  wire      led_time,output  wire      led_score,output  reg       led_display_score,output  reg       led_time_warnning,output  reg       flag_po_ne,output  wire[3:0]  display_count,output  reg [7:0]  score,output  reg [7:0]  data_time,output  reg [7:0]  po_score,output  reg [7:0]  ne_score);parameter   IDLE        =8'd0;parameter   DABIAN        =8'd1;parameter   TALK_1        =8'd2;parameter   TEST_1        =8'd3;parameter   TALK_2        =8'd4;parameter   TEST_2        =8'd5;parameter   TALK_3        =8'd6;parameter   TEST_3        =8'd7;parameter   TALK_4        =8'd8;parameter   TEST_4        =8'd9;reg     [4:0]   state;reg     [25:0]  count;reg     [3:0]   po_count;reg     [3:0]   ne_count;reg     [7:0]   po_1_score;reg     [7:0]   po_2_score;reg     [7:0]   po_3_score;reg     [7:0]   po_4_score;reg     [7:0]   ne_1_score;reg     [7:0]   ne_2_score;reg     [7:0]   ne_3_score;reg     [7:0]   ne_4_score;

倒计时 还剩10秒 灯闪烁 还有其他一些指示灯

  assign led_time=(state==TALK_1 || state==TALK_2 || state==TALK_3 || state==TALK_4)?1'b1:1'b0;assign led_score=(state==TEST_1 || state==TEST_2|| state==TEST_3|| state==TEST_4)?1'b1:1'b0;assign display_count=(flag_po_ne==1'b0)?po_count:ne_count;always @(posedge clk or negedge rst_n) beginif(!rst_n) beginled_time_warnning<=1'b0;endelse if(data_time<=8'h10 && count==25000000 || count==49999999)beginled_time_warnning<=~led_time_warnning;endelse if(data_time >8'h10)beginled_time_warnning<=1'b0;endelse beginled_time_warnning<=led_time_warnning;endend

展示总积分的标志

 always @(posedge clk or negedge rst_n) beginif(!rst_n) beginled_display_score<=1'b0;endelse if(led_time==1'b0 && led_score==1'b0 && key_score==1'b1)beginled_display_score<=~led_display_score;endelse beginled_display_score<=led_display_score;endend

正反方交替进行 正反方次数各自累加

always @(posedge clk or negedge rst_n) beginif(!rst_n) beginpo_count<=4'd0;ne_count<=4'd0;endelse if((state==TEST_1 || state==TEST_2|| state==TEST_3|| state==TEST_4)&& key_start==1'b1&&flag_po_ne==1'b0)beginpo_count<=po_count+1;endelse if((state==TEST_1 || state==TEST_2|| state==TEST_3|| state==TEST_4)&& key_start==1'b1&&flag_po_ne==1'b1)beginne_count<=ne_count+1;endelse if(state==IDLE)beginpo_count<=4'd0;ne_count<=4'd0;endend

总分计算

 always @(posedge clk or negedge rst_n) beginif(!rst_n) beginne_score<=8'h40;po_score<=8'h40;endelse if(state== DABIAN)beginne_score<=8'h40;po_score<=8'h40;endelse if((state==TEST_1 || state==TEST_2|| state==TEST_3|| state==TEST_4)&& key_down==1'b1&& flag_po_ne==1'b0)beginif(po_score[3:0]==4'h0 && po_score[7:4]>4'h0)beginpo_score[3:0]<=4'h9;po_score[7:4]<=po_score[7:4]-4'd1;endelse if(po_score[3:0]>4'h0 && po_score[7:4]>=4'h0)beginpo_score[3:0]<=po_score[3:0]-4'd1;po_score[7:4]<=po_score[7:4];endelse if(po_score[3:0]==4'h0 && po_score[7:4]==4'h0)beginpo_score[3:0]<=po_score[3:0];po_score[7:4]<=po_score[7:4];endendelse if((state==TEST_1 || state==TEST_2|| state==TEST_3|| state==TEST_4)&& key_down==1'b1&& flag_po_ne==1'b1)beginif(ne_score[3:0]==4'h0 && ne_score[7:4]>4'h0)beginne_score[3:0]<=4'h9;ne_score[7:4]<=ne_score[7:4]-4'd1;endelse if(ne_score[3:0]>4'h0 && ne_score[7:4]>=4'h0)beginne_score[3:0]<=ne_score[3:0]-4'd1;ne_score[7:4]<=ne_score[7:4];endelse if(ne_score[3:0]==4'h0 && ne_score[7:4]==4'h0)beginne_score[3:0]<=ne_score[3:0];ne_score[7:4]<=ne_score[7:4];endendend

单人评分

always @(posedge clk or negedge rst_n) beginif(!rst_n) beginscore<=8'h10;endelse if(state==TALK_1 || state==TALK_2|| state==TALK_3|| state==TALK_4)beginscore<=8'h10;endelse if((state==TEST_1 || state==TEST_2|| state==TEST_3|| state==TEST_4)&& key_down==1'b1)beginif(score[3:0]==4'h0 && score[7:4]>4'h0)beginscore[3:0]<=4'h9;score[7:4]<=score[7:4]-4'd1;endelse if(score[3:0]>4'h0 && score[7:4]>=4'h0)beginscore[3:0]<=score[3:0]-4'd1;score[7:4]<=score[7:4];endelse if(score[3:0]==4'h0 && score[7:4]==4'h0)beginscore[3:0]<=score[3:0];score[7:4]<=score[7:4];endendend

倒计时30S 记得把count改成49999999 应该就是1秒

 always @(posedge clk or negedge rst_n) beginif(!rst_n) begindata_time<=8'h30;endelse if(count==499 && (state==TALK_1 || state==TALK_2|| state==TALK_3|| state==TALK_4))beginif(data_time[3:0]==4'h0 && data_time[7:4]>4'h0)begindata_time[3:0]<=4'h9;data_time[7:4]<=data_time[7:4]-4'd1;endelse if(data_time[3:0]>4'h0 && data_time[7:4]>=4'h0)begindata_time[3:0]<=data_time[3:0]-4'd1;data_time[7:4]<=data_time[7:4];endelse if(data_time[3:0]==4'h0 && data_time[7:4]==4'h0)begindata_time[3:0]<=data_time[3:0];data_time[7:4]<=data_time[7:4];endendelse if(state==TEST_1 || state==TEST_2|| state==TEST_3|| state==TEST_4)begindata_time<=8'h30;endend    always @(posedge clk or negedge rst_n) beginif(!rst_n) begincount<=26'd0;endelse if(state==TALK_1 || state==TALK_2|| state==TALK_3|| state==TALK_4)beginif(count<499)begincount<=count+1;endelse begincount<=26'd0;endendelse begincount<=26'd0;endend

状态机切换 ,好像有一些用不到的、、

always @(posedge clk or negedge rst_n) beginif(!rst_n) beginstate <= IDLE;po_1_score<=8'h10;po_2_score<=8'h10;po_3_score<=8'h10;po_4_score<=8'h10;ne_1_score<=8'h10;ne_2_score<=8'h10;ne_3_score<=8'h10;ne_4_score<=8'h10;flag_po_ne<=1'b0;endelse begincase(state)IDLE:beginif(key_start==1'b1)beginstate<=DABIAN;endelse beginstate<=IDLE;endendDABIAN:beginstate<=TALK_1;endTALK_1:beginif(data_time==8'h00)beginstate<=TEST_1;endelse beginstate<=TALK_1;endendTEST_1:beginif(key_start==1'b1 && po_count==0)beginstate<=TALK_2;flag_po_ne<=~flag_po_ne;po_1_score<=score;endelse if(key_start==1'b1 && po_count==2)beginstate<=TALK_2;flag_po_ne<=~flag_po_ne;po_3_score<=score;endelse beginstate<=TEST_1;endendTALK_2:beginif(data_time==8'h00)beginstate<=TEST_2;endelse beginstate<=TALK_2;endendTEST_2:beginif(key_start==1'b1 && ne_count==0)beginstate<=TALK_3;flag_po_ne<=~flag_po_ne;ne_1_score<=score;endelse if(key_start==1'b1 && ne_count==2)beginstate<=TALK_3;flag_po_ne<=~flag_po_ne;ne_3_score<=score;endelse beginstate<=TEST_2;endendTALK_3:beginif(data_time==8'h00)beginstate<=TEST_3;endelse beginstate<=TALK_3;endendTEST_3:beginif(key_start==1'b1 && po_count==1)beginstate<=TALK_4;flag_po_ne<=~flag_po_ne;po_2_score<=score;endelse if(key_start==1'b1 && po_count==3)beginstate<=TALK_4;flag_po_ne<=~flag_po_ne;po_4_score<=score;endelse beginstate<=TEST_3;endendTALK_4:beginif(data_time==8'h00)beginstate<=TEST_4;endelse beginstate<=TALK_4;endendTEST_4:beginif(key_start==1'b1 && ne_count==1)beginstate<=TALK_1;flag_po_ne<=~flag_po_ne;ne_2_score<=score;endelse if(key_start==1'b1 && ne_count==3)beginstate<=IDLE;flag_po_ne<=~flag_po_ne;po_4_score<=score;endelse beginstate<=TEST_4;endenddefault:state<=IDLE;endcaseendendendmodule

按键消抖模块 还有数码管模块在我其他文章里面有,去复制一下吧,上面是一个模块,全部连起来就是。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/12/25 22:38:47
// Design Name: 
// Module Name: top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module top(input       sys_clk,input       rst_n,input       key_start,input       key_dowm,input       key_score,output  wire    [3:0]   LED,output	wire	[5:0]	sel,output	wire	[7:0]	dig);wire            button1_negedge;wire            button2_negedge;wire            button3_negedge;wire            flag_po_ne;wire            led_time;wire            led_score;wire            led_display_score;wire	[3:0]	count;wire	[3:0]	display_count;wire	[7:0]	po_score;wire	[7:0]	ne_score;wire	[7:0]	data_time;wire	[7:0]	score;wire	[7:0]	display_data;wire	[23:0]	din;wire	[23:0]	seg_data;wire	[23:0]	display_score;assign LED={led_time,flag_po_ne,led_display_score,led_time_warnning};assign display_data=(led_time==1'b1)?data_time:(led_score==1'b1)?score:8'hDD;assign count=(led_score==1'b1)?display_count:4'hD;assign din={display_data,4'hD,count,8'hDD};assign display_score={4'h0,po_score,4'h1,ne_score};assign seg_data=(led_display_score==1'b1)?display_score:din;control u_control(.clk(sys_clk),.rst_n(rst_n),.key_start(key_start),.key_score(key_score),.key_down(key_down),.score(score),.po_score(po_score),.ne_score(ne_score),.flag_po_ne(flag_po_ne),.display_count(display_count),.led_display_score(led_display_score),.led_time(led_time),.led_time_warnning(led_time_warnning),.led_score(led_score),.data_time(data_time));key_debounce u_key_debounce1
(.sys_clk(sys_clk),.rst_n(rst_n),.key(key_start),.button_negedge(button1_negedge) //Key falling edgz
);key_debounce u_key_debounce2
(.sys_clk(sys_clk),.rst_n(rst_n),.key(key_dowm),.button_negedge(button2_negedge) //Key falling edgz
);key_debounce u_key_debounce3
(.sys_clk(sys_clk),.rst_n(rst_n),.key(key_score),.button_negedge(button3_negedge) //Key falling edgz
);seg_ctrl u_seg_ctrl( .clk(sys_clk)		,.rst_n(rst_n)	,.din(seg_data)		,//输入6位数码管显示数据,每位数码管占4位.point_n(6'b111111) ,//输入小数点控制位.sel(sel)	,//输出位选.dig(dig)  //输出段选
);	endmodule

二、仿真波形

当主持人无操作时,无法进行辩论赛,倒计时、评分、计分功能无法显示;当主持人按下答辩开关,第一及第二个数码管显示30秒倒计时,并且开始倒计时,当倒计时10S后,LED灯闪烁报警;依次按照正方1辩,反方1辩,正方2辩,反方2辩,正方3辩,反方3辩,正方4辩,反方4辩顺序进行辩论。辩论完时,评委进行选手评分,第一个和第二个数码管显示选手的当前分数(满分10分),随后第三数码管显示横杠,第四个数码管显示选手编号。评委可以通过按键手动进行减分,确定好分数后按下确认键。结束答辩后,展示评分阶段,数码管显示:0(代表正方)-正方分数-1(代表反方)-反方分数。
在这里插入图片描述

视频

基于FPGA的辩论赛计分器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OceanBase】使用 Superset 连接 OceanBase 数据库并进行数据可视化分析

文章目录 前言一、前提条件二、操作步骤2.1 准备云主机实例2.2 安装docker-compose2.3 使用docker-compose安装Superset2.3.1 克隆 Superset 的 GitHub 存储库2.3.2 通过 Docker Compose 启动 Superset 2.4 开通 OB Cloud 云数据库2.5 获取连接串2.6 使用 Superset 连接 OceanB…

打造三甲医院人工智能矩阵新引擎(二):医学影像大模型篇--“火眼金睛”TransUNet

一、引言 1.1 研究背景与意义 在现代医疗领域,医学影像作为疾病诊断与治疗的关键依据,发挥着不可替代的作用。从传统的X射线、CT(计算机断层扫描)到MRI(磁共振成像)等先进技术,医学影像能够直观呈现人体内部结构,为医生提供丰富的诊断信息,涵盖疾病识别、病灶定位、…

计算机缺失x3daudio1 7.dll怎么修复?

电脑运行时常见问题解析与修复策略&#xff1a;以“x3daudio1_7.dll缺失”为例 在软件开发与日常电脑维护的广阔领域中&#xff0c;我们时常会遇到各种系统报错和文件问题。这些问题不仅影响我们的工作效率&#xff0c;还可能对数据安全构成潜在威胁。作为一位经验丰富的软件开…

WPF区域导航+导航参数使用+路由守卫+导航日志

背景&#xff1a;使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的&#xff0c;不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel&#xff1a; private object body;public object Body {get { retu…

通过纯文字引导DeepSeek编写一个简单的聊天机器人~

为进一步验证DeepSeek的代码能力 和 自然语言理解力&#xff0c;我花费了大约1个半小时的时间&#xff0c;和DeepSeek仅通过文字对话&#xff0c;编写出一个简单的聊天机器人。 以下是最终运行效果、生成代码、引导沟通过程示例&#xff1a; 一、最终运行效果&#xff1a; 二…

C/C++中new/delete与malloc/free的区别及对象管理

C/C++中new/delete与malloc/free的区别及对象管理 在C/C++编程中,动态内存管理是一个核心且复杂的话题,其中new、delete、malloc和free是四个经常用于此目的的工具。尽管它们都涉及到内存的分配和释放,但它们在处理对象时的方式和效果却大相径庭。本文将通过示例来说明这些工…

安卓入门十一 常用网络协议四

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; MQTT是一种轻量级的、发布/订阅模式的消息传输协议。它被设计用于在低带宽或不稳定网络环境下&#xff0c;实现物联网设备之间的可靠通信。 4.1 MQTT详细介绍 发布/订阅模式&#xff1a;MQTT 使用发布/订…

ansible-Ad-hoc命令行模式

一. 简述&#xff1a; ansible的ad-hoc是一个概念性的名字&#xff0c;是相对于ansible playbook而言。类似于&#xff1a;通过命令行来执行一些简单的&#xff0c;一次性的playbook任务(通俗点就是通过命令行执行一些简单的,而又不需要将命令特殊保存起来的任务)。Ansible提供…

UE5AI感知组件

官方解释&#xff1a; AI感知系统为Pawn提供了一种从环境中接收数据的方式&#xff0c;例如噪音的来源、AI是否遭到破坏、或AI是否看到了什么。 AI感知组件&#xff08;AIPerception Component&#xff09;是用于实现游戏中的非玩家角色&#xff08;NPC&#xff09;对环境和其…

[SAP ABAP] SMARTFORMS表单开发

使用事务码SMARTFORMS进入到SMARTFORMS开发界面进行表单开发 SMARTFORMS表单开发相关资料 [SMARTFORMS] 创建样式模板https://blog.csdn.net/Hudas/article/details/144946341?spm1001.2014.3001.5501[SMARTFORMS] 创建FORMhttps://blog.csdn.net/Hudas/article/details/144…

倍思氮化镓充电器分享:Super GaN伸缩线快充35W

快节奏的时代,在旅游、办公等场景下,一款高效、便捷的充电器可以让我们的生活更便捷、高效。今天就给大家推荐一款倍思氮化镓充电器——Super GaN伸缩线快充35W。它具备多重亮点,可以满足我们在许多场景下的充电需求,成为我们的得力助手。 倍思氮化镓Super GaN伸缩线快充35W的亮…

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…

xr-frame 通过shader去除视频背景色,加载透明视频

目录 前言 实现思路 获取 XR 框架系统&#xff1a; 注册自定义效果 创建效果对象 渲染通道配置 着色器代码 顶点着色器 片元着色器&#xff08;颜色分量g达到条件的片元将被透透明&#xff09; effect-removeBlack 完整代码 wxml中使用 前言 实现了一个用于注册自定…

fnm教程

常用命令 // 查看所有远程可供安装的 Node 版本 fnm list-remote// 安装某一 Node 版本 fnm install <version>// 切换某一 Node 版本 fnm use <version>// 查看当前使用的 Node 版本 fnm current// 查看所有已安装的 Node 版本 fnm list// 删除某一 Node 版本 fn…

物体切割效果

1、物体切割效果是什么 在游戏开发中&#xff0c;物体切割效果就是物体看似被切割、分割或隐藏一部分的视觉效果。 这种效果常用与游戏和动画中&#xff0c;比如角色攻击时的切割效果&#xff0c;场景中的墙壁切割效果等等。 2、物体切割效果的基本原理 在片元着色器中判断片…

接口测试Day06-UnitTest框架

UnitTest 是开发人员用来实现 “单元测试” 的框架。测试工程师&#xff0c;可以在自动化 “测试执行” 时使用。 使用 UnitTest 的好处&#xff1a; 方便管理、维护测试用例。提供丰富的断言方法。生成测试报告。&#xff08;需要插件 HTMLTestReport&#xff09; UnitTest框架…

《learn_the_architecture_-_trustzone_for_aarch64_102418_0101_03_en》学习笔记

1.TrustZone是Arm A-profile架构中安全架构的名称。TrustZone首次在Armv6K中引入&#xff0c;Armv7-A和Armv8-A也支持。TrustZone提供两个执行环境&#xff0c;它们之间具有系统范围的硬件强制隔离。在Arm架构中&#xff0c;有两种安全状态&#xff1a;安全和非安全。在EL0、EL…

小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式

这一节目标是实现底部推荐商品的结构和样式&#xff0c;由于这里要求横向滚动&#xff0c;所以需要使用上节介绍的 scroll-view 功能&#xff0c;并使用 scroll-x 属性支持横向滚动&#xff0c;推荐商品区域中的每一个商品是一个单独的 view&#xff0c;每个view 中需要写三个组…

【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程

前言 &#x1f31f;&#x1f31f;本期讲解关于spring aop的入门介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

数据结构(AVL树)

BST的退化 仔细观察BST你会发现&#xff0c;虽然他有良好的“搜索”特性&#xff0c;也就是&#xff1a;你可以利用其节点之间的大小关系&#xff0c;很容易地从根节点开始往下走找到你要的节点&#xff0c;但他却无法保证这种搜索所需要的时间的长短&#xff0c;因为建立BST时…