`timescale 1 ns / 100ps
module exx(reset,button0,button1,led,lamp,number);
input reset;
input[24:1] button0; //灭灯按钮
input[24:1] button1; //爆灯按钮
output[24:1] led; //灭灯
output reg lamp; //爆灯
output[4:0] number; //爆灯女嘉宾号码
reg[24:1] led;
reg[4:0] number;
integer i;
reg flag; //爆灯标志位只有一次机会
always @(reset or button0 or button1)
if (!reset)
begin
led = 24'b11111111_11111111_11111111;
lamp = 0;
number=0;
flag=1;
end
else
begin
for(i=1;i<=24;i=i+1)
begin
if(button0[i]==0) led[i]=0; //按下灭灯按钮,灭灯
if(led[i]==1&button1[i]==0&flag) //本人未灭灯且flag有效按下爆灯按钮
begin
flag=0; //flag失效
lamp=1; //爆灯
number=i; //显示爆灯女嘉宾编号
end
end
end
endmodule
module exx_tst( );
reg reset;
reg[24:1] button0;
reg[24:1] button1;
wire[24:1] led;
wire lamp;
wire number;
exx myexx(reset,button0,button1,led,lamp,number);
initial
begin
reset=0;
button0 = 24'b11111111_11111111_11111111;//初始化灭灯按钮,按下为0,弹起为1
button1 = 24'b11111111_11111111_11111111;//初始化爆灯按钮,按下为0,弹起为1
#10; reset=1;
#80; button0 = 24'b00000000_00000000_10100001;//0灭灯按钮,3人留灯分别为1 3 8号女嘉宾
#80; button0 = 24'b11111111_11111111_11111111;//灭灯后按钮弹起恢复为1,但LED灯保持灭
#10; button1 = 24'b11111111_11111111_11111011;//3号女嘉宾灭灯后后悔想按爆灯按钮button1,发现无法爆灯
#80; button1 = 24'b11111111_11111111_11111111;//按钮弹起
#80; button1 = 24'b11111111_11111111_11011111;//6号女嘉宾按下爆灯按钮button1,爆灯,number显示为6
#80; button1 = 24'b11111111_11111111_01111111;//8号女嘉宾按下爆灯按钮button1,number依然显示为6
#80; reset=0; //重新复位
end
endmodule

本文介绍了一个使用Verilog语言实现的相亲选择逻辑模块。该模块通过输入按钮信号来模拟相亲过程中的“灭灯”和“爆灯”操作,并记录下最后“爆灯”的女嘉宾编号。文章通过具体的代码示例展示了如何设计这种逻辑电路。
2396

被折叠的 条评论
为什么被折叠?



