对于简单的Verilog描述的4选1多路选择器(无延迟)测试的疑问

使用modelsim模拟

4选1多路选择器
moduleMUX4x1 (Z , D0 , D1 , D2 , D3 , S0, S1) ;
output Z; //端口说明
input D0 , D1 , D2 , D3 , S0 , S1; //端口说明
wire T1,T2, T3, T4; //内部线网说明,缺省说明S0bar, S1bar
and (T0 , D0 , S0bar , S1bar) , // 4个与门
(T1, D1 , S0bar , S1) ,
(T2 , D2 , S0 , S1bar) ,
(T3 , D3 , S0 , S1) ;
not (S0bar , S0) , // 2个非门
(S1bar, S1) ;
or (Z , T0 , T1 , T2 , T3) ; // 1个或门
endmodule

结果
# 0 d=1010, s[1]=0, s[0]=0, out=x
# 5 d=1010, s[1]=0, s[0]=0, out=0
# 10 d=1010, s[1]=0, s[0]=1, out=0
# 15 d=1010, s[1]=1, s[0]=0, out=0
# 20 d=1010, s[1]=1, s[0]=1, out=1
为什么#10 d=1010, s[1]=0, s[0]=1, out=0 ,结果为什么是0?想不通,望大神给解决一下!!!
module test_MUX4x1;

reg[3:0] d;
reg[1:0] s;
wire out;
MUX4x1 mymux(out,d[0],d[1],d[2],d[3],s[0],s[1]);
initial
begin
d=4‘b1010; s=2’b00;
$display($time, “ d=%b, s[1]=%b, s[0]=%b, out=%b \n”,d,s[1],s[0],out);
#5 s=2‘b00;
$display(); //超出最大字数,跟上面一样
#5s=2'b01;
$display();
#5 s=2'b10;
$display();//
#5 s=2'b11;
$display($time, “ d=%b, s[1]=%b, s[0]=%b, out=%b \n",d,s[1],s[0],out);
end
endmodule

建模问题,你的模型是(S1,S0)00选择D0,01选择D2,10选择D1, 11选择D3。电路看图

还有说一点我的意见(可以无视)学数字设计不要用门级建模!!!!毫无意义!!别跟我提考试!!verilog入门推荐你看《verilog HDL高级数字设计》

追问

#15 d=1010, s[1]=1, s[0]=0, out=0

(s1,s2)为[1,0]时,out应该为1啊

追答

我开始还真没发现这个问题,这应该是#15时文字仿真输出的是上升沿以前的值,看我的波形:

仿真在#15时会有个上升沿,所以你让它在#15时输出的值只能由仿真器自身的设计机制决定。尽量别在上升沿的时候用文字输出

温馨提示:答案为网友推荐,仅供参考