题解 | #实现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