数据选择器

数据选择器_第1张图片
设计1个8位或16位的数据选择器:
ENA是使能控制输入端。当ENA=1时,电路不能工作,输出Y=0;当ENA=0时,电路处于工作状态。8位数据选择器有三个数据控制端,如ENA=0时,S2、S1、S0=000,则A[0]被选中,输出Y=A[0]。16位数据选择器有四个数据控制端,如ENA=0时,S3、S2、S1、S0=1111时,则输入A[15]被选中,输出Y=A[15]。

设计代码

module choose8(input [7:0] A,
               input S0,S1,S2,ENA,clk,
                output reg Y=0);
always@(negedge clk)
    if(ENA==1) Y = 0; 
    else
        casex({S2,S1,S0})
            3'b000:Y=A[0];
            3'b001:Y=A[1];
            3'b010:Y=A[2];
            3'b011:Y=A[3];
            3'b100:Y=A[4];
            3'b101:Y=A[5];
            3'b110:Y=A[6];
            3'b111:Y=A[7];
        default:Y=0;
        endcase
endmodule

仿真代码

module text8( );
parameter DELAY=20;
reg [7:0] A;
reg S0,S1,S2,ENA,clk;
wire Y;
choose8 il(
        .A(A),
        .S0(S0),
        .S1(S1),
        .S2(S2),
        .ENA(ENA),
        .clk(clk),
        .Y(Y));
initial 
    begin
        ENA=1; A=8'b10001101;S0=0;S1=0;S2=0;clk=0;
        #DELAY ENA=0; 
        #(DELAY*2) S0=1;S1=0;S2=0;
        #(DELAY*2) S0=0;S1=1;S2=0;
        #(DELAY*2) S0=1;S1=1;S2=0;
        #(DELAY*2) S0=0;S1=0;S2=1;
        #(DELAY*2) S0=1;S1=0;S2=1;
        #(DELAY*2) S0=0;S1=1;S2=1;
        #(DELAY*2) S0=1;S1=1;S2=1;
    end
    always begin
        #(DELAY/2) clk = ~clk;
    end
endmodule

仿真图样

数据选择器_第2张图片

框图

数据选择器_第3张图片

你可能感兴趣的:(Verilog,HDL,硬件工程)