一、实验要求
用设计一拔河游戏机,要求如下:电路使用15个发光二极管表示拔河的“电子绳”,开机后只有中间一个发亮,此即拔河的中心点。游戏双方各持一个按钮,迅速地、不断地按动产生脉冲,谁按的快,亮点就向谁的一方移动,每按一次,亮点移动一次。亮点一到任一方的终端发光二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后亮点才恢复到中心。由裁判下达比赛命令后,双方才能输入信号,否则,输入无效。
二、实验代码
源代码
module tug_of_war
(
input clk, reset_n, p1_btn, p2_btn, referee_cmd,
output reg[14:0] leds
);
parameter CENTER_LED = 7;
parameter WAIT_CMD = 4'd0;
parameter WAIT_INPUT = 4'd1;
parameter RUNNING = 4'd2;
parameter P1_WIN = 4'd3;
parameter P2_WIN = 4'd4;
parameter OUTPUT_HOLD = 4'd5;
reg [3:0] state;
reg [14:0] counter;
always @(posedge clk, negedge reset_n) begin
if (~reset_n) begin
counter <= 15'd0;
leds <= 15'b000000010000000;
state <= WAIT_CMD