举重比赛有三名裁判,当运动员将杠铃举起后,须有两名或两名以上裁判认可,方可判定试举成功,若用A、B、C分别代表三名裁判的意见输入,同意为1,否定为0;F为裁判结果输出,试举成功时F=1,试举失败时F=0。
A | B | C | F |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
因而可以得到 F = (A&&B) || (A&&C) ||(B&&C)
module test(
input wire A,
input wire B,
input wire C,
output wire F);
reg result=0;
always @(A,B,C)
result = (A&&B) || (A&&C) ||(B&&C);
assign F = result;
endmodule
module test_tb();
wire result;
reg [3:0] count;
reg A, B, C;
reg clk;
always #5 clk=~clk;
initial begin
clk<=0;
A<=0;
B<=1;
C<=1;
count<=1'b0;
end
always @ (posedge clk) begin
if (count == 4'd2) begin
A<=~A;
end
else if(count ==4'd4)begin
B<=~B;
end
else begin
C=~C;
end
if (count==4'd4)begin
count<=4'b0;
end
else begin
count<=count+1'b1;
end
end
test u_test(
.A (A),
.B (B),
.C (C),
.F (result)
);
endmodule
当同一时刻,A、B、C中有大于等于两个为高电平时,输出为高电平。
裁判A、B、C通过按键K1、K2、K3输入自己的结果,若通过,则绿色的LED灯L2亮起;若不通过,LED不亮。
由于led是低电平驱动,所以需要对代码的最后做一点小的修改:
assign F = result;
↓ ↓ ↓
assign F = !result;
整体代码如下:
module test(
input wire A,
input wire B,
input wire C,
output wire F);
reg result=0;
always @(A,B,C)
result = (A&&B) || (A&&C) ||(B&&C);
assign F = result;
endmodule
编译没有问题后可以查看一下RTL图:
用下载线将按键接口JX22连接到JP5,将按键接口JX5连接到JP1,JTAG接口用下载线连接到电脑的USB口。
(为什么要这样接线可以参考《【FPGA实验2】二进制转为格雷码》中的【三、实验箱实验】➡️【3、引脚分配】。)
【FPGA实验1.5】举重裁判机制
Foever young,always tearful.