题解 | #优先编码器Ⅰ#

优先编码器Ⅰ

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

    首先要明确一个概念:优先编码器电路中,允许同时输入两个以上的编码信号。不过在设计优先编码器时已经将所有的输入信号按优先顺序排了队,但几个信号同时出现时,只对其中优先权最高的一个进行编码。
   1.  由功能表可知I的高位优先权高,可得Y与I的关系为:
                 Y[2] = I[7] | I[6] | I[5] | I[4]
                 Y[1] = I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]
                 Y[0] = I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]
    2. I≠0时,GS=1否则为0。
    3. I=0时,EO=1,否则为0。
    4. 如果EI=0,Y,GS,EO=0,如果EI=1,优先编码器正常工作

`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,EO_reg;
//求Y_reg
always @(*) begin  
    if(~EI) begin
         Y_reg<= 0;
    end 
    else begin
         Y_reg[2] = I[7] | I[6] | I[5] | I[4];
         Y_reg[1] = I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2];
         Y_reg[0] = I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1];
    end
end
//求GS_reg
always @(*) begin  
    if(~EI) begin
         GS_reg<= 0;
    end 
    else if(I==0)begin
         GS_reg = 0;
    end
    else GS_reg = 1;
end
//求EO_reg
always @(*) begin  
    if(~EI) begin
         EO_reg<= 0;
    end 
    else if(I==0)begin
         EO_reg = 1;
    end
    else EO_reg = 0;
end
assign Y = Y_reg;
assign GS = GS_reg;
assign EO = EO_reg;
endmodule

#FPGA#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务