用verilog语言设计一个基于FPGA的评委表决评分系统程序要求如下1、某赛事共有10名评委组成评委组,具有评分权限;另有1名记分员,只进行主持和记分显示;评委全部表决评分后,只有记分员按下计分按钮则总的评分才会显示在8位数码管上; 2、评委1是组长,如果该组长不同意,则8位数码管上只显示- - - - - - - -(即显示8条横杠); 3、只有评委1(组长)投票同意后,才会将所有评委的评分进行累加,并显示在8位数码管上; 4、评委1(组长)投票记10分;评委2和评委3是两名副组长,投票记8分;其他人都是普通评委,投票记5分
时间: 2024-02-20 07:00:38 浏览: 15
以下是一个基于Verilog语言设计的基于FPGA的评委表决评分系统程序,满足您的要求:
```
module judge_system (
input clk, // 时钟信号
input rst, // 复位信号
input [7:0] score1,// 评委1分数输入
input [7:0] score2,// 评委2分数输入
input [7:0] score3,// 评委3分数输入
input [7:0] score4,// 评委4分数输入
input [7:0] score5,// 评委5分数输入
input [7:0] score6,// 评委6分数输入
input [7:0] score7,// 评委7分数输入
input [7:0] score8,// 评委8分数输入
input [7:0] score9,// 评委9分数输入
input [7:0] score10,// 评委10分数输入
input vote_button, // 计分按钮
output [7:0] total_score // 总得分输出
);
reg [7:0] leader_score; // 组长的分数
reg [7:0] deputy_score; // 副组长的分数
reg [7:0] normal_score; // 普通评委的分数
reg [31:0] sum; // 分数总和
reg [2:0] rank; // 排名
reg [7:0] display_score; // 显示的分数
reg [1:0] vote_count; // 投票计数(仅用于测试)
// 评分系统逻辑
always @(posedge clk or posedge rst) begin
if (rst) begin
leader_score <= 0;
deputy_score <= 0;
normal_score <= 0;
sum <= 0;
rank <= 0;
display_score <= 0;
vote_count <= 0;
end else begin
// 判断组长是否同意
if (score1 < 0) begin
display_score <= 8'b00000000;
end else begin
// 计算组长、副组长和普通评委的得分
leader_score <= 10 * (score1 >= 0);
deputy_score <= 8 * ((score2 >= 0) + (score3 >= 0));
normal_score <= 5 * ((score4 >= 0) + (score5 >= 0) + (score6 >= 0) + (score7 >= 0) + (score8 >= 0) + (score9 >= 0) + (score10 >= 0));
// 判断投票按钮是否按下
if (vote_button) begin
// 计算分数总和
sum <= leader_score + deputy_score + normal_score;
// 显示总得分
display_score <= sum;
// 计算排名
rank <= 1;
if (score2 > sum / 10) rank <= rank + 1;
if (score3 > sum / 10) rank <= rank + 1;
if (score4 > sum / 10) rank <= rank + 1;
if (score5 > sum / 10) rank <= rank + 1;
if (score6 > sum / 10) rank <= rank + 1;
if (score7 > sum / 10) rank <= rank + 1;
if (score8 > sum / 10) rank <= rank + 1;
if (score9 > sum / 10) rank <= rank + 1;
if (score10 > sum / 10) rank <= rank + 1;
// 投票计数(仅用于测试)
vote_count <= vote_count + 1;
end else begin
// 显示横杠
display_score <= 8'b11111111;
end
end
end
end
// 总得分的输出
assign total_score = display_score;
endmodule
```
以上代码中,评分系统的输入为10个评委的分数和计分按钮的状态,输出为总得分。评分系统的逻辑包含了判断组长是否同意、计算组长、副组长和普通评委的得分、判断投票按钮的状态、计算分数总和和排名等步骤。如果组长不同意,则8位数码管上只会显示8条横杠。如果投票按钮按下,则总得分会显示在8位数码管上,并计算排名。评委1(组长)投票记10分,评委2和评委3是两名副组长,投票记8分,其他人都是普通评委,投票记5分。