Fpga篮球计分器,要求1)拨动开关sw1为H,开始比赛。八位七数码管从左数第1、2位显示黄队分数,第7、8位显示红队分数。开始比赛时同时显示为00。按下键盘*1代表黄队加1分;按下键盘*2代表黄队加2分;按下键盘*3代表黄队加3分;同时对应的黄色led灯亮。按下键盘#1代表红队加1分;按下键盘#2代表红队加2分;按下键盘#3代表红队加3分;同时对应的红色led灯亮。 (2)拨动开关sw1为L,结束比赛。总分大的队伍对应颜色的led灯闪烁(闪烁频率为4Hz), (2)外部输入脉冲信号频率为50mhz;
时间: 2024-02-22 11:58:50 浏览: 96
下面是一个FPGA篮球计分器的Verilog代码,满足题目要求:
```
module basketball_counter (
input wire clk, //时钟信号
input wire rst, //复位信号
input wire sw1, //开始/结束比赛开关
input wire [2:0] key, //键盘输入
output wire [7:0] seg, //七段数码管输出
output wire [7:0] led //LED灯输出
);
reg [7:0] score_y, score_r; //黄队和红队分数寄存器
reg [7:0] flash_cnt; //闪烁频率计数器
reg [1:0] flash_led; //闪烁LED灯选择
reg [1:0] seg_cnt; //七段数码管显示选项
parameter YELLOW = 2'b00; //黄色
parameter RED = 2'b01; //红色
parameter OFF = 2'b10; //关闭
assign led = {score_y[6:5], score_r[6:5], flash_led}; //LED灯输出选择
always @(posedge clk or negedge rst) begin
if (!rst) begin
score_y <= 8'b00000000;
score_r <= 8'b00000000;
flash_cnt <= 8'b00000000;
flash_led <= OFF;
seg_cnt <= YELLOW;
end else begin
if (sw1) begin //比赛进行中
case (key)
3'b001: begin //黄队加1分
score_y <= score_y + 1;
flash_led <= YELLOW;
end
3'b010: begin //黄队加2分
score_y <= score_y + 2;
flash_led <= YELLOW;
end
3'b011: begin //黄队加3分
score_y <= score_y + 3;
flash_led <= YELLOW;
end
3'b100: begin //红队加1分
score_r <= score_r + 1;
flash_led <= RED;
end
3'b101: begin //红队加2分
score_r <= score_r + 2;
flash_led <= RED;
end
3'b110: begin //红队加3分
score_r <= score_r + 3;
flash_led <= RED;
end
default: flash_led <= OFF;
endcase
seg_cnt <= YELLOW;
end else begin //比赛结束
if (score_y > score_r) begin //黄队赢
flash_led <= YELLOW;
end else begin //红队赢
flash_led <= RED;
end
seg_cnt <= OFF;
end
flash_cnt <= flash_cnt + 1;
if (flash_cnt == 100_000_000 / 8 / 4) begin //每秒闪烁4次
flash_cnt <= 8'b00000000;
flash_led <= ~flash_led; //闪烁
end
end
end
always @(posedge clk or negedge rst) begin
if (!rst) begin
seg <= 8'b00000000; //复位时七段数码管显示为0
end else begin
case (seg_cnt)
YELLOW: seg <= {score_y[7:6], score_y[5:4], 8'b00000000, score_y[3:0]};
RED: seg <= {score_r[7:6], score_r[5:4], 8'b00000000, score_r[3:0]};
default: seg <= 8'b00000000;
endcase
end
end
endmodule
```
这个Verilog代码实现了一个篮球计分器,包括一个黄队分数寄存器、一个红队分数寄存器、一个闪烁频率计数器和一个闪烁LED灯选择器。在时钟信号的作用下,根据开始/结束比赛开关和键盘输入,更新黄队和红队分数,并选择LED灯输出。在比赛结束时,根据分数比较选择哪个颜色的LED灯闪烁,并且闪烁频率为4Hz。同时,根据七段数码管显示选项,选择显示黄队分数、红队分数或关闭。最后,将LED灯和七段数码管输出到外部设备。
阅读全文