0

Verilog でのマルチプレクサ 4:1 について、インターネットでいくつかの例を見てきました。私は何かをしようとしましたが、出力は予期されていません。これはソースです:

module mux41 (a, b, c, d,select,z);

input a,b,c,d;
input [1:0]select;
output reg z;

always@(select )
begin
case (select)
    2'b00: assign z=a;
    2'b01: assign z=b;
    2'b10: assign z=c;
    2'b11: assign z=d;
endcase
end
endmodule

これはテストベンチです:

module mux41_tb;

reg at,bt,ct,dt;
reg [1:0] selectt;
wire zt;

mux41   test(.a(at),.b(bt),.c(ct),.d(dt),.select(selectt),
            .z(zt));

initial
begin
     $monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
                    "d=%b","select=%b",selectt,"z=%z",zt);

    selectt =2'b00;
    #5
    selectt =2'b01;
    #5
    selectt =2'b10;
    #5
    selectt =2'b11;
    #5;

end

endmodule

しかし、出力は次のとおりです。

ここに画像の説明を入力

私の質問は、両方のコード (ソースとテストベンチ) で何をすべきかということです。

よろしく、NIN。

4

1 に答える 1

1

あなたは得ています

a=xb=xc=x

a、b、または c に値を指定したことがないためです。たとえば、にz割り当てますが、値がないため値がないため、x を取得しているだけです。aaat

はどうかと言うと

d = 0111...

モニター回線のせいだ

$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
                "d=%b","select=%b",selectt,"z=%z",zt);

あなたはdtを忘れました

$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
                "d=%b",dt,"select=%b",selectt,"z=%z",zt);
于 2016-08-24T17:00:01.047 に答える