「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
相关推荐
风_峰8 小时前
AMD 自适应SoC产品系列讲解
fpga开发
做cv的小昊8 小时前
计算机图形学:【Games101】学习笔记05——着色(插值、高级纹理映射)与几何(基本表示方法)
笔记·opencv·学习·计算机视觉·图形渲染·几何学
车载测试工程师8 小时前
CAPL学习-CAN相关函数-统计API函数
网络·网络协议·学习·capl·canoe
好奇龙猫9 小时前
【AI学习-comfyUI学习-第二十四节-open(contorlnet多重处理)+图生图openpose-各个部分学习】
人工智能·学习
wanzhong233310 小时前
CUDA学习5-矩阵乘法(共享内存版)
深度学习·学习·算法·cuda·高性能计算
PNP Robotics12 小时前
PNP机器人受邀参加英业达具身智能活动
大数据·人工智能·python·学习·机器人
iconball12 小时前
个人用云计算学习笔记 --24 虚拟化、KVM 基础使用与热迁移实验、VMware ESXi笔记
运维·笔记·学习·云计算
是小菜呀!13 小时前
基于深度学习的图像检索系统项目实践
笔记
奕辰杰14 小时前
Netty私人学习笔记
笔记·学习·netty·网络通信·nio
Larry_Yanan15 小时前
Qt多进程(五)QUdpSocket
开发语言·c++·qt·学习·ui