FPGA小白学习日志二:利用LED实现2选1多路选择器

  在上一篇文章中,主播利用炒菜的比喻帮大家介绍了LED工程的建立,所以在读这一篇文章前,大家可以简要回顾以下LED工程的建立流程。本篇内容,主播主要向大家介绍数据选择器工程的实现方法。

  在开始之前,我们先来了解一下数据选择器是什么:所谓数据选择器,就是从多个输入的逻辑信号中选择一个逻辑信号输出,实现数据选择功能的逻辑电路就是数据选择器。我们用来打个比方,现在我们手中有两张电影票A和B,但这时我们是不知道到底哪张电影票是允许我们进入电影院的,这时候我们就要去问检票员,检票员说A,那就可以进;否则,B就可以进。通过这个比喻,我们就能理解数据选择器的大体思路了:这里的电影票A与B就相当于输入信号in1与in2,检票员就相当于数据选择信号sel(英文select),电影院就相当于输出信号out,注意这里的输出信号out只有一个。因此,我们就可以在Visio中设计出2-1数据选择器:

                           

  同样,我们给出2-1数据选择器的真值表:

            

  我们来分析以下这个真值表:当选择信号sel为0时,对应输入信号in1的通道开启,此时,无论输入信号in2怎么取值,输出信号out永远与输入信号in1相同。那反过来讲,选择信号sel为1时,对应输入信号in2的通道开启,此时,无论输入信号in1怎么取值,输出信号out永远与输入信号in2相同。

  接下来,我们新建工程,具体的步骤在上一章有讲,这里我们就不说了。我们来看看用Verilog语言怎么实现2-1数据选择器:

                            

  我们来分析一下这段代码的语法,in1、in2、sel信号前面都有加“wire”,而out前面却加了“reg”,那么wire和reg到底是什么,他们起什么作用呢?这里主播查阅了锆石科技的《HELLO FPGA》文档:reg和wire都是数据类型,其中reg是寄存器类型,wire是连线型类型。这里主播再打个比方,wire相当于导线,他只能传递信号,但不能记住信号,所以输入信号要使用wire类型;而reg相当于寄存器,他能够记住输入信号,而在always@(*)模块中,我们的输出信号out要持续循环“sel =1 →out = in2,sel =0 →out = in1”这个逻辑进程,所以输出信号就要使用reg寄存器类型,他不断记住输入信号,又根据逻辑进程不断输出信号。

  解释完了代码,我们就来打开RTL视图,验证电路的正确性:

                  

  可以看出,RTL视图和我们在Visio中的设计完全一样。接着我们再来仿真,具体的仿真步骤主播就不说了,这里直接放波形图进行分析;

   我们取第一组红线内的波形图:

  在这组红线内的波形图中,sel信号恒为0,无论in2信号怎么变(输入信号in2从1-0-1),输出信号out波形图是不是恒等于输入信号in1。

  再取第二组分析:

  此时在这组红线内的波形图中,sel信号恒为1,无论in1信号怎么变,输出信号out波形图是不是恒等于输入信号in2了。

  举了这两组的例子,相信大家不仅能会分析波形了,也能从波形图中验证我们RTL视图的正确性。大家有时间呢也可以自己做一下仿真取不同情况分析。不过主播在这里要提醒大家一句啊,在进行仿真前,大家打开“Assignment--Settings”的时候,尤其是“Tool name”选项卡中,一定要注意我们选的是“Modelsim”而不是“Modelsim-Altera”:

  不然就会出现“Can'tIaunchtheModelSim-Alterasoftware”报错:

              

  仿真完之后呢我们就要去分配引脚了,在上一篇文章呢,主播在引脚分配这里出错了,这里就回归到原理图带大家一起读引脚。首先我们打开官方EP4C最小系统板的原理图,找到按键引脚分配图:

                          

  图中我们可以看出,KEY1按键被分配到pin90引脚,KEY2按键被分配到pin89引脚,RESET按键被分配到pin88引脚。由于本工程中我们需要用到3个信号,这里我们就把KEY1按键发出的信号标记为输入信号in1,KEY2按键发出的信号标记为输入信号in2,RESET按键发出的信号标记为选择信号sel。

  再来看LED引脚分配图:

   

  LED0被分配到IO_73引脚,LED1被分配到IO_75引脚,LED2被分配到IO_74引脚。这里我们就选择LED1,将其作为输出信号out。但是我们在引脚分配的页面是找不到IO_75引脚的,这时候我们找到U5-5模块,找到IO_75引脚对应的pin75:

                        

  这样我们的引脚就配置好了:

                                 

  大家注意,在分配好引脚以后呢,还要对未使用管脚进行设置,一定一定要记得烧录到板子之前要进行一次全编译,这不仅是在提醒大家,也是在提醒主播。最后呢我们就来看一下效果图:       

  不按RESET按键时,sel信号持续为0,此时按与不按KEY1,LED1是没有任何反应的,那么按下KEY2,LED1亮,松开KEY2, LED1不亮。

                                         

  长按RESET按键时,sel信号持续为1,此时按与不按KEY2,LED1是没有任何反应的,那么按下KEY1,LED1亮,松开KEY1, LED1不亮。

                                       

  好了,以上这就是本篇文章的所有内容了,还请大家多多支持主播!

Read more

【Js逆向 python】Web JS 逆向全体系详细解释

【Js逆向 python】Web JS 逆向全体系详细解释

Web JS 逆向全体系内容 互联网技术安全提示与职业操守 做渗透测试,必须严格遵守以下原则: 1. 合法授权:仅在书面授权的范围内使用逆向技术,禁止未授权测试; 2. 最小影响:避免使用高风险参数(如sqlmap工具的 --risk=3、--os-shell),防止目标服务崩溃; 3. 数据保护:枚举到的敏感数据(如用户密码)需严格保密,测试后立即删除; 4. 留痕清理:测试结束后,协助目标清除测试留下的日志、文件等痕迹。 免责声明 1. 本文所述所有渗透测试技术、工具、命令及实战案例,仅适用于已获得目标系统 / 网络所有者书面授权的测试场景(如企业内部安全评估、甲方委托的红队测试、个人合法拥有的实验环境)。 2. 任何组织或个人若未取得明确书面授权,擅自将本文内容用于对第三方系统 / 网络的扫描、探测、攻击等行为,均属于非法网络活动,涉嫌违反《中华人民共和国网络安全法》《中华人民共和国刑法》(第

SkyWalking - 告警通知渠道集成:Webhook、Slack、钉钉、企业微信

SkyWalking - 告警通知渠道集成:Webhook、Slack、钉钉、企业微信

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕SkyWalking这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * SkyWalking - 告警通知渠道集成:Webhook、Slack、钉钉、企业微信 * 🚨 SkyWalking 告警机制基础 * 告警规则(Alarm Rules) * 通知渠道(Notifiers) * 🔗 Webhook:最通用的集成方式 * 配置 SkyWalking 使用 Webhook * Webhook 接收端开发(Java 示例) * Webhook 集成的优势与注意事项 * 💬 集成 Slack 通知 * 在 Slack 中创建 Incoming Webhook * 配置 SkyWalking * 自定义 Slack

快速搭建个人AI知识库教程(超详细+实战)从零入门到精通,一篇全掌握!

本文详细介绍了一款名为PandaWiki的开源个人知识库工具,它结合传统文档管理与AI检索增强生成技术。文章演示了如何在Linux系统上通过Docker一键部署PandaWiki,配置各类模型,以及从飞书等平台导入文档创建个人AI知识库。该工具支持离线文件上传、AI生成摘要、文档分类管理等功能,并提供多种问答机器人接入方式,是个人知识管理和AI学习的理想解决方案。 最近有点忙,拖更比较久了,大家见谅… 今天我们一起来聊聊知识库。 当下,RAG 技术已经非常成熟了,市面上的各种 AI 知识库产品也很丰富。 在这个 AI 时代的浪潮下,如果你还用传统的笔记软件来管理个人知识,就有点显得 Out 了。 不过,想要选到一款称心如意的知识库工具,似乎也不是那么简单。 首先是数据隐私上的考虑,虽然现在很多在线 AI 平台似乎都支持了知识库上传的能力,但有些 “私密” 的知识我们可能不想上传到 “云端”。 另外,虽然有很多大厂直接提供了非常全面的私有化部署方案,但是动辄几万的费用让人望而却步。 那就只能从开源工具上下手了,作为个人的知识库管理工具,我希望使用一款 “小而美” 的产品,

前端国际化实现:别再只支持中文了

前端国际化实现:别再只支持中文了

前端国际化实现:别再只支持中文了 毒舌时刻 这代码写得跟网红滤镜似的——仅供参考。 各位前端同行,咱们今天聊聊前端国际化。别告诉我你的应用只支持中文,那感觉就像只卖一种口味的冰淇淋——单调又无趣。 为什么你需要国际化 最近看到一个项目,所有文本都硬编码在代码里,要支持英文时傻眼了,我差点当场去世。我就想问:你是在开发应用还是在开发中文专用软件? 反面教材 // 反面教材:硬编码文本 function LoginForm() { return ( <form> <h1>登录</h1> <input placeholder="请输入邮箱" /> <input placeholder="请输入密码" type="password"