题解 | #用优先编码器①实现键盘编码电路#

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

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

  1. 首先确定电路输出L是8421BCD码,即是高电平有效的,而题目中给出的优先编码器输出Y_n是低电平有效的,故应当明确L和Y_n两者的状态是恰好相反的;

  2. 注意:键盘有10个按键,而所给的优先编码器是只有9个输入的;

  3. 此题关键在于着重理解: “键盘编码电路要有工作状态标志,以区分没有按键按下和按键0按下两种情况。” : 这句话的潜台词是 按键按下和按键0按下时,电路的输出L的状态是一样的,因此在这种情况下可以通过GS信号来区分键盘是否处在工作状态,对应的真值表如下;

键盘状态 S[9:0] L[3:0] GS
无按键按下 1_1111_1111 0000 0
按键0按下 1_1111_1110 0000 1
`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 (S_n[9:1], L_temp);
    
    assign GS = ~((&(~L)) & S_n[0]);
    
    assign L = ~L_temp;
        
endmodule
全部评论
1 回复 分享
发布于 2022-03-08 22:33
这网站里的题,让我一度怀疑自己的阅读理解能力
23 回复 分享
发布于 2022-04-19 19:07
搞什么潜台词?设计文档最怕引起歧义,太扯了
7 回复 分享
发布于 2022-04-21 14:12
谜语人
2 回复 分享
发布于 2022-12-20 16:45 浙江
GS = ~(&S_n)即可
2 回复 分享
发布于 2022-08-28 17:09 陕西
assign GS=&S_n?0:1;
1 回复 分享
发布于 2022-11-24 10:23 江苏
作者对题目理解是 有按键按下GS就为1。 而我理解成 只有按键0按下GS才为1。
点赞 回复 分享
发布于 2022-12-01 14:01 重庆
请问一下GS = ~(&S_n[9:0]) 可以吗
点赞 回复 分享
发布于 2022-04-25 18:25
您好,可以解释一下为什么GS = ~((&(~L)) & S_n[0]);吗?谢谢
点赞 回复 分享
发布于 2022-03-30 11:21

相关推荐

03-31 21:47
东南大学 C++
彭于晏前来求offe...:吓晕了
点赞 评论 收藏
分享
03-23 15:00
已编辑
厦门大学 Java
xiaowl:你这个简历的问题是对于技术点、项目的描述,都是描述action的,对于面试官而言,仅能知道你干了什么,无法判断你为什么这么干,干的好不好。
点赞 评论 收藏
分享
评论
27
1
分享

创作者周榜

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