当前位置: 首页 > news >正文

牛客网verilog题库——VL14

题目:用优先编码器实现键盘编码电路

请使用优先编码器①实现键盘编码电路,可添加并例化题目中已给出的优先编码器代码。

10个按键分别对应十进制数0-9,按键9的优先级别最高;按键悬空时,按键输出高电平,按键按下时,按键输出低电平;键盘编码电路的输出是8421BCD码。

要求:键盘编码电路要有工作状态标志,以区分没有按键按下和按键0按下两种情况。

优先编码器真值表如下图:

`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 ); endmodule

补全代码:

答案

一共有十个案件,对应I_0,I_1,I_2......I_9

按下的按键是0,悬空是1

比如表里的第一行,意思就是如果1-9这9个按键都没被按下,那输出的是1111

第二行就是按键9被按下,其他无所谓,就会输出0110

S_n就是输入的那十个按键

L就是输出的四位BCD码

GS用来区分按下0还是没有按键按下

实际上考的就是怎么用9线程的优先编码器拼成一个10线程的按键编码器

先例化一下这个9线程的优先编码器,输入就是1-9这9位,0先不算,因为encoder不处理按键0

按键9被按下,输出的应该是1001,但是编码器真值表出来的是0110,所以输出的是反码

所以说,GS的生成逻辑就是判断S_n中有没有0,就是有没有按键被按下,用归约

如果S_n中有按键被按下,那就输出1,如果没有按键被按下,那就输出0

如果1-9当中至少有一个被按下了,那么L=Y_n的取反,如果没有按键按下,那输出L就是0000,然后靠GS区分,如果GS=0,那就没有按键被按下,如果GS=1,那就是0被按下了

`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 = ((Y_n == 4'b1111) && (S_n[0] == 1)) ? 0 : 1; endmodule
http://www.cnnetsun.cn/news/1936998.html

相关文章:

  • 2026妈妈杯数学建模第十六届MathorCup数学应用挑战赛 B题常用模型算法 思路+代码+模型
  • 内存的操作权限(堆空间、栈空间)
  • LiuJuan20260223Zimage赋能互联网产品创新:用户反馈智能聚类与需求挖掘
  • Hive函数实战指南:从基础到高级,直击应用核心
  • 2026年,这家专注二极管的公司为何能赢得行业一致好评?
  • Electron IPC实战:ipcMain与ipcRenderer的双向通信机制解析
  • 高速 PCB 设计中,阻抗不匹配到底会带来哪些问题
  • 基于GPCC降水数据与MATLAB的长江流域旱涝特征时空演变分析
  • Ollama集成Apple MLX框架,Mac本地AI模型运行速度大幅提升
  • 信创机器上运行3D电子心理沙盘,为何一定要独立显卡的配置?
  • day09统计师考试(初级)统计行政法规
  • Leetcode704 二分查找(数组)
  • DFlash 的架构密码——扩散模型如何「寄生」在自回归模型上
  • 软萌拆拆屋多模态扩展:结合CLIP实现服饰图片自动标签+结构化拆解联动
  • 别再乱配了!手把手教你搞定DSP28379D双核启动模式(Boot Mode)与Boot Loader流程
  • 【linux开放端口-以8848为例】
  • Flutter开发者避坑:集成个推/极光推送时,这几个平台配置和权限问题你一定遇到过
  • 三步掌握百度网盘秒传:永久分享文件不再失效
  • 告别STM32,试试用FPGA+Verilog做超声波测距:精度与实时性的提升实战
  • 在Ubuntu 20.04上为HiWooya MT7628开发板搭建OpenWrt编译环境(含64位系统依赖避坑)
  • 保姆级教程:在Ubuntu 20.04上从源码编译Carla 0.9.4(含Anaconda环境配置与UE4.21.2安装)
  • 避开这些坑!WPS加载项开发实战:从本地调试到打包发布的完整避坑指南
  • 运维工程师必备:MiniCPM-V-2_6模型服务的监控、告警与自动化运维
  • WeKnora智能文档处理:基于OCR技术的图片文字识别集成
  • 从STM32转战联盛德W806:一个老鸟的快速上手心得(CDK工程、GPIO点灯与烧录工具避坑指南)
  • 飞书多维表格实战:用AI工作流重塑内容创作与团队协作
  • LeetCode热题100-字符串解码
  • 避开这3个坑!SAP生产订单确认参数配置避雷指南(CO11/CO11N篇)
  • 军事仿真引擎实战指南:如何用CIMPro孪大师快速搭建数字孪生战场(附避坑技巧)
  • 手把手教你用Docker快速部署开源邮件服务器(Postfix+Dovecot+MySQL)