`timescale 1ns/1ns
module encoder_0(
   input      [8:0]         I_n   ,
   
   output reg [3:0]         Y_n   
);

always @(*)begin
   casex(I_n)
      9'b111111111 : Y_n = 4'b1111;
      9'b0xxxxxxxx : Y_n = 4'b0110;
      9'b10xxxxxxx : Y_n = 4'b0111;
      9'b110xxxxxx : Y_n = 4'b1000;
      9'b1110xxxxx : Y_n = 4'b1001;
      9'b11110xxxx : Y_n = 4'b1010;
      9'b111110xxx : Y_n = 4'b1011;
      9'b1111110xx : Y_n = 4'b1100;
      9'b11111110x : Y_n = 4'b1101;
      9'b111111110 : Y_n = 4'b1110;
      default      : Y_n = 4'b1111;
   endcase    
end 
     
endmodule

module key_encoder(
      input      [9:0]         S_n   ,         
 
      output wire[3:0]         L     ,
      output wire              GS
);
wire  [3:0] L_temp;
 encoder_0 encoder_0(
    .I_n    ( S_n[9:1] )  ,
   
    .Y_n    (L_temp)   
);

assign L=~L_temp;

assign GS = ~(S_n[0] & L_temp[0] & L_temp[1] & L_temp[2] & L_temp[3]);

endmodule

这个网站的题总是这么模糊不清,你想独立做出来要么出错要么连题干是什么都看不懂。

做这个题的前提:

  1. 1111_1111_11 你现在看到的是键盘上的数字键 最右边表示0
  2. 按下上面的键盘 会变成低电平 你按下0 会变成 1111_1111_10
  3. 你按下数字1会变成1111_1110_01
  4. 键盘是10位的 优先编码器是9位的所以 数字0单独编码