「Verilog学习笔记」用优先编码器①实现键盘编码电路

专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

分析

用此编码器实现键盘的编码电路。

注意:编码器的输出是低电平有效,而键盘编码电路输出的是正常的8421BCD码,是高电平有效。因此将编码器的输出取反就是8421编码输出的结果

S_n[0]~S_n[9]表示10个按键,分别对应编码器的10个输入端,工作状态用GS表示,当有按键按下时,GS是1,当无按键按下时,GS是0.

需要考虑的是如何将10个按键对应到编码器的9个输入端。

仅有一种情况GS为0 即Y_n的四位均为1且S_n[0]也为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; // 若0被按下 Y_n会赋值为默认值
   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 u0 (
        .I_n (S_n[9:1]), 
        .Y_n (Y_n) 
    );

    assign L = ~Y_n ; 
    assign GS = ~(S_n[0] & Y_n[0] & Y_n[1] & Y_n[2] & Y_n[3]) ;
 
endmodule
相关推荐
学历真的很重要1 小时前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
koo3641 小时前
pytorch深度学习笔记13
pytorch·笔记·深度学习
博览鸿蒙1 小时前
FPGA 工程中常见的基础硬件问题
fpga开发
崎岖Qiu2 小时前
【OS笔记36】:文件存储空间管理(一)- 空闲区表法
笔记·操作系统·存储管理·文件系统·os
菩提小狗2 小时前
Sqlmap双击运行脚本,双击直接打开。
前端·笔记·安全·web安全
码农小韩2 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
嵌入式-老费2 小时前
外壳3D结构设计(学习的方法)
学习
代码游侠2 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
山土成旧客2 小时前
【Python学习打卡-Day40】从“能跑就行”到“工程标准”:PyTorch训练与测试的规范化写法
pytorch·python·学习
Yyuanyuxin2 小时前
保姆级学习开发安卓手机软件(一)--安装软件及配置
学习