首页 > 试题广场 >

a)请用verilog实现四选一输出(即,有A,B,C,D四

[问答题]

a)请用verilog实现四选一输出(即,有A,B,C,D四个数据输入端口,S0,S1为两个选择信号,Y为输出端口,S0=0,S1=0,输出A,S0=0,S1=1,输出B,S0=1,S1=0输出C,S0=1,S1=1输出D)

b) 请用门级网表实现这一功能,可用的逻辑门包括,2输入与非门NAND,2输入或非门NOR,非门INV

解答a,直接的case语句
module MUX (
	input wire S0, S1, 		// select
	input wire A, B, C, D, 	// data in
	output reg Y 			// data out
);
	// 写法一
	always @(*) begin
		case ({S1, S0})
			2'b00:	Y = A;
			2'b01:	Y = B;
			2'b10:	Y = C;
			2'b11:	Y = D; 
		endcase
	end
endmodule

解答b,感觉自己写得很繁琐
module MUX (     input wire S0, S1,         // select     input wire A, B, C, D,     // data in     output wire Y             // data out
);     wire nS0, nS1;     INV(nS0, S0);     INV(nS1, S1);     wire nS1_nS0;        NOR(nS1_nS0, S1, S0);     wire n__nS1_nS0_A;    NAND(n__nS1_nS0_A, nS1_nS0, A);     wire nS1_S0;        NOR(nS1_S0, S1, nS0);     wire n__nS1_S0_B;    NAND(n__nS1_S0_B, nS1_S0, B);     wire S1_nS0;        NOR(S1_nS0, nS1, S0);     wire n__S1_nS0_C;    NAND(n__S1_nS0_C, S1_nS0, C);     wire S1_S0;            NOR(nS1, nS0);     wire n__S1_S0_D;    NAND(n__S1_S0_D, S1_S0, D);          wire y0_or_y1;        NAND(y1_or_y2, n__nS1_nS0_A, n__nS1_S0_B);     wire y2_or_y3;        NAND(y2_or_y3, n__S1_nS0_C, n__S1_S0_D);     wire n__y0_or_y1;    INV(n__y0_or_y1, y0_or_y1);     wire n__y2_or_y3;    INV(n__y2_or_y3, yy2_or_y3);     NAND(Y, n__y0_or_y1, n__y0_or_y1);


endmodule

发表于 2021-03-13 20:49:23 回复(0)
always(*)begin
    case {s0,s1}
        2'b00: y = a;
        2'b01: y = b;
        2'b10: y = c;
        2'b11: y = d;
        default: y = 0;
end
主要部分这样更整齐一点
发表于 2020-06-14 17:30:48 回复(1)
module mux4_to_1_behavioral( output  reg Y,
                input A,B,C,D,
                input S0,S1
                );

always @(A,B,C,D,S0,S1)
if(!S0)
  begin
    if(S1==0)   
     Y=A;   
    else Y=B;
  end
else   if(S0==1)
  begin
    if(S1==0)
    Y=C;
    else Y=D;
  end
endmodule


module mux4_to_1_behavioral( output  reg Y,
                 input A,B,C,D,
                input S0,S1
                );
wire  a,b,c,d,S00;
nand n1(d,S0,S1),
     n2(b,S00,S1);
nor  n3(a,S0,S1);
not  n4(S00,S0);
always @(A,B,C,D,a,b,c,d)
  begin
    if(a==1)
        Y=A;
    else if(b==0) Y=B;
    else if(d==0) Y=D;
    else Y=C;
  end
endmodule 


module mux4_to_1_behavioral( output  Y,
                input A,B,C,D,
                input S0,S1
                );
assign Y=(S0&S1)?D:((S0&!S1)?C:((!S0&S1)?B:A));
endmodule

编辑于 2019-12-20 10:54:32 回复(0)
module mux_4_1#(
parameter data_width=8
)(

input [data_width-1:0] A,
input [data_width-1:0]B,
input [data_width-1:0] C,
input [data_width-1:0]D,

input S0,
input S1,
output [data_width-1:0] Y
)

assign Y=(S0&S1)?D:(S0&!S1)?C:(!S0&S1)?B:A;

endmodule
编辑于 2019-08-18 11:01:04 回复(0)