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

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

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

使用两个8-3编码器实现,代码如下:
`timescale 1ns/1ns

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

reg [2:0]  Y_reg;
reg        GS_reg;
reg        EO_reg;

always @(*)begin
     if(~EI) begin
     Y_reg = 3'b000; GS_reg = 0; EO_reg= 0; end
     else begin
        casex(I)
            8'b0000_0000: begin  Y_reg = 3'b000; GS_reg = 0; EO_reg = 1; end
            8'b1xxx_xxxx: begin  Y_reg = 3'b111; GS_reg = 1; EO_reg = 0; end
            8'b01xx_xxxx: begin  Y_reg = 3'b110; GS_reg = 1; EO_reg = 0; end
            8'b001x_xxxx: begin  Y_reg = 3'b101; GS_reg = 1; EO_reg = 0; end
            8'b0001_xxxx: begin  Y_reg = 3'b100; GS_reg = 1; EO_reg = 0; end
            8'b0000_1xxx: begin  Y_reg = 3'b011; GS_reg = 1; EO_reg = 0; end
            8'b0000_01xx: begin  Y_reg = 3'b010; GS_reg = 1; EO_reg = 0; end
            8'b0000_001x: begin  Y_reg = 3'b001; GS_reg = 1; EO_reg = 0; end
            8'b0000_0001: begin  Y_reg = 3'b000; GS_reg = 1; EO_reg = 0; end
            default:      begin  Y_reg = 3'b000; GS_reg = 0; EO_reg = 0; end
        endcase
     end
end 

assign Y = Y_reg;
assign GS = GS_reg;
assign EO = EO_reg;

endmodule


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

wire [3:0] Y1;
wire       GS_1;
wire       EO_1;

wire [3:0] Y2;
wire       GS_2;
wire       EO_2;

encoder_83  U1(
                   .I(A[15:8]) ,
                  .EI(EI) ,
                   .Y(Y1[2:0]) ,
                  .GS(GS_1) ,
                  .EO(EO_1)    
    );

encoder_83  U2(
                   .I(A[7:0]) ,
                  .EI((EI)&&(~GS_1)) ,
                   .Y(Y2[2:0]) ,
                  .GS(GS_2) ,
                  .EO(EO_2)    
    );


assign L = ((~GS_1) && (~GS_2)) ? 0 : (GS_1) ? ({1'b0,Y1[2:0]} + 8) : (GS_2) ? ({1'b0,Y2[2:0]}) : 0;
assign GS = GS_1 || GS_2;
assign EO = EO_1 && EO_2;

endmodule


全部评论

相关推荐

xxxxOxo:该催就催,想要你的不会因为催就挂,催了就挂的是因为本来就要挂你
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务