本程序包括功能模块和testbench。
本程序的功能模块实现的是一个带优先级的数据选择器(低位优先级高)。
本程序说明的问题:
1、casez的敏感表达式的值中“?”代替的位表示不考虑;
2、casez会将激励信号z判断为与四值信号(0、1、x、z)都相等。
代码如下:
1、功能模块:
//mux.v
module mux(out,a,b,c,d,select);
output[1:0] out;
input[1:0] a,b,c,d;
input[3:0] select;
reg[1:0] out;
always @(select or a or b or c or d)
begin
casez(select)
4'b???1:out=a;
4'b??1?:out=b;
4'b?1??:out[1:0]=c[1:0];
4'b1???:out[1:0]=d[1:0];//加不加[1:0]都行
default: out[1:0]=2'bxz;
endcase
end
endmodule
2、testbench
mux_tb.v
`timescale 10ns/1ns
module mux_tb;
wire[1:0] out;//out必须是wire型
reg[1:0] a,b,c,d;
reg[3:0] select;
mux mux(out,a,b,c,d,select);
initial
begin
a=0;b=