题解 | ①实现键盘编码电路#(题目有隐藏含义,题干有问题)

用优先编码器①实现键盘编码电路

https://www.nowcoder.com/practice/03b8c5837d7f406797b4a57358057ef7

`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]  Y_n;
encoder_0 encoder_0(
  .I_n (S_n[9:1])  ,
  .Y_n (Y_n)  
);

assign  L= ~Y_n ;
assign  GS = (S_n== 10'b1111111111)?1'b0:1'b1; //通过的这句代码其实是检测有无按键按下.
//看了群友分析:按照编码通过进行分析 产生了隐藏含义 那就是按下0和不按都是一样的
//assign  GS = (S_n[0] == 1'b0)?1'b1:1'b0;

//原本思路:S_n是10bit 而 给的优先编码器位宽是9bit 那就代表有一个bit是没有用的。 
//而题目中又要求一个标志信号 用来区分按下0和没有按下, 那么我们就用第0位来生成标志信号,不进入优先编码器的子模块里

//题干有问题,如果按照代码能通过的标准来看,那么GS是代表有没有按键按下,而不是区别按键按下和0按下。
endmodule

全部评论

相关推荐

牛客154160166号:9月底还给我发短信,好奇怪,我24届的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务