题解 | #实现16线-4线优先编码器#

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器

https://www.nowcoder.com/practice/dcfa838e43de4744bc976abee96dc566

`timescale 1ns/1ns
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


//当高八位I15-I8都为0的时候代表高位的8-3编码器没用到,代表该用低位的8-3编码器 此时高位的EO为1 正好联通低位的EI作为使能信号 这样也能构造高位优先的思想

//总分析,我们编码器是要编码0000-1111 而我们用的8-3编码器去级联8-3编码器的输出是000-111 所以我们级联新增一个高位就行了 因为如果输入全为000的话 输出也全是0 所以当高位片I15-I8全为0 假设是I7为1使用的低位片时 高位的输出是全0 而低位的输出是111 那么16-4编码器的输出是0111要构造为0111 那么 两个芯片的低三位应该是相或的形式,那么高位怎么获得呢,经过分析当我们使用低位片的时候此时高位片的GS是0 当我们使用高位片的时候高位片的GS是1所以用GS来形成高位是最方便的。
//那么最终输出的GS怎么形成呢,也是通过或的形式
module encoder_164(
   input      [15:0]      A   ,
   input                  EI  ,
   
   output wire [3:0]      L   ,
   output wire            GS  ,
   output wire            EO    
);

wire [2:0] L_HIGH;
wire [2:0] L_LOW ;

wire GS_HIGH;
wire GS_LOW ;

wire EO_HIGH;
wire EO_LOW;
encoder_83  encoder_83_high(
   .I  (A[15:8])  ,
   .EI (EI)       ,
   .Y  (L_HIGH)   ,
   .GS (GS_HIGH)  ,
   .EO (EO_HIGH)   
);

encoder_83  encoder_83_low(
   .I  (A[7:0])   ,
   .EI (EO_HIGH)  ,
   .Y  (L_LOW)    ,
   .GS (GS_LOW)   ,
   .EO (EO_LOW)   
);

assign L  = {GS_HIGH,(L_HIGH | L_LOW)};
assign GS = GS_HIGH | GS_LOW          ;
assign EO = EO_LOW                    ;
endmodule

全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务