//定义模块
module fn_sw(
a,//定义模块的端口
b,
sel,
y
);
input a,b,sel;//定义端口的输入输出类型
output y;
reg y;//定义数据类型,reg变量只能在always语句和initial语句中被赋值
//可以用下面的三目运算符实现两路选择器,也可以用always语句实现
//使用assign时,需要将y定义成wire类型
//assign y = sel?(a^b):(a&b);
//用always语句实现
//@为敏感信号列表,当这些信号变化时,触发这个always
always@(a or b or sel)begin
if(sel==1) begin
y<=a^b;
end
else begin
y<=a&b;
end
end
endmodule
//编写测试平台 testbench
module fn_sw_tb;
reg a_,b_,sel_;//定义测试用到的端口,以及数据类型
wire y_;
fn_sw a_fn_sw(//实例化一个两路选择器模块
.a(a_),//采用匿名例化,将上面定义的端口进行连接
.b(b_),
.sel(sel_),
.y(y_)
);
initial begin//使用initial语句对端口进行不同赋值,来测试模块
a_<=0;b_<=1;sel_<=0;//初始化端口值
#10 a_<=0;b_<=1;sel_<=1;//为端口赋不同值
#10 a_<=1;b_<=0;sel_<=0;
#10 a_<=1;b_<=0;sel_<=1;
#10 $stop;
end
endmodule