verilog 实现 8-3译码器 拼接 16-4 译码器

题目:使用两片8-3译码器拼接成一片16-4译码器
其中8-3译码器真值表如下图所示:
请添加图片描述
8-3译码器的代码 如下:

module encoder_83(
   input      [7:0]       I   ,
   input                  EI  ,
   
   output wire [2:0]      Y   ,
   output wire            GS  ,
   output wire            EO    
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);

assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];

assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
//assign GS = EI&(| I);
         
endmodule

或者使用 case语句的方式:

module encoder_83(
   input      [7:0]       I   ,
   input                  EI  ,
   
   output reg [2:0]      Y   ,
   output reg            GS  ,
   output reg            EO    
);

always@(*)
begin
    casex({EI,I})
        9'b0_xxxx_xxxx: {Y,GS,EO} =5'b000_0_0;
        9'b1_0000_0000: {Y,GS,EO} =5'b000_0_1;
        9'b1_1xxx_xxxx: {Y,GS,EO} =5'b111_1_0;
        9'b1_01xx_xxxx: {Y,GS,EO} =5'b110_1_0;
        9'b1_001x_xxxx: {Y,GS,EO} =5'b101_1_0;
        9'b1_0001_xxxx: {Y,GS,EO} =5'b100_1_0;
        9'b1_0000_1xxx: {Y,GS,EO} =5'b011_1_0;
        9'b1_0000_01xx: {Y,GS,EO} =5'b010_1_0;
        9'b1_0000_001x: {Y,GS,EO} =5'b001_1_0;
        9'b1_0000_0001: {Y,GS,EO} =5'b000_1_0;
        default: {Y,GS,EO} =5'b000_0_0;
    endcase
end
endmodule

16-4译码器相对于8-3译码器来说,区别在于:4-16对于3-8逻辑是:3-8有一块有输入,4-16就有输入(GS为逻辑或),3-8两块都没输入,4-16才没输入(EO为逻辑与),Y的选择按照优先编码器的规则,先判断高位,再判断低位。

根据功能表可以画出16-4译码器电路图与各个接口之间的关系:
请添加图片描述
根据上面的电路图即可通过例化两个8-3译码器模块来实现16-4译码器:

module encoder_164(
   input      [15:0]      A   ,
   input                  EI  ,
   
   output wire [3:0]      L   ,
   output wire            GS  ,
   output wire            EO    
);
wire EO1;
wire [2:0] Y1;
wire GS1;

wire EO2;
wire [2:0] Y2;
wire GS2;
    encoder_83 encoder_83_m1(
        .I(A[15:8]),
        .EI(EI),
        .Y(Y1),
        .GS(GS1),
        .EO(EO1)
    );

    encoder_83 encoder_83_m2(
        .I(A[7:0]),
        .EI(EO1),
        .Y(Y2),
        .GS(GS2),
        .EO(EO)
    );

    assign L[0] =Y1[0]|Y2[0];
    assign L[1] = Y1[1]|Y2[1];
    assign L[2] =Y1[2]|Y2[2];
    assign L[3]= GS1;
    assign GS = GS1|GS2;
endmodule

至此实现16-4译码器。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值