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
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 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
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