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

从零搭建Clawdbot+企微机器人:单向推送全流程指南(新手可玩)

从零搭建Clawdbot+企微机器人:单向推送全流程指南(新手可玩)

从零搭建Clawdbot+企微机器人:单向推送全流程指南(新手可玩) 本文针对非管理员用户(无企微后台权限),详细拆解从Clawdbot安装到企微机器人正常推送的全步骤,所有命令可直接复制,新手也能快速上手。 一、前置说明(必看) 1. 适用场景 非企微管理员,仅能创建「企微群机器人」,实现 Clawdbot→企微群单向推送 (无法接收企微消息回复,适合通知、告警、播报场景);若为管理员,可进一步实现双向对话(文末附拓展方向)。 2. 环境要求 支持 Mac/Linux/Windows(本文以Linux为例),需联网且能访问公网(企微Webhook需外部请求),最好直接就是美西的机器。 3. 核心工具 Clawdbot(AI机器人框架)、企微群机器人(Webhook)、Python依赖(requests库)。 二、第一步:安装Clawdbot(基础环境搭建) Clawdbot支持一键安装,

【论文笔记】MultiResUNet: Rethinking the U-Net Architecture for Multimodal Biomedical Image Segmentation

【论文笔记】MultiResUNet: Rethinking the U-Net Architecture for Multimodal Biomedical Image Segmentation

论文地址 目录 * 一、前言 * 二、U-Net模型的分析 * 1.为什么两次3×3的卷积近似于一次5×5的卷积呢? * 2.为什么后一种轻量级的结构可以近似于之前的结构? * 三、融合策略的分析 * 四、 整体架构 * 参考文献 一、前言 近年来,深度学习在医学图像分割领域取得了很大的突破,其中基于全卷积网络的U-Net已经成为最流行、最引人瞩目的架构[1]。尽管如此,U-Net仍存在着一些不足之处,本文对经典U-Net做出了进一步改进,并经实验证明了其更好的性能。 二、U-Net模型的分析 在医学图像分割任务中,我们感兴趣的点在于分割原始图像的细胞核、器官、肿瘤等等,这些图像可能来自各种模态。然而在大多数情况下,这些感兴趣的对象是不规则的,而且规模也不同。例如,我们已经证明皮肤病变的规模在皮肤镜图像中可以有很大的变化。这些情况也经常发生在不同类型的医学图像分割任务中。 因此,对于分析这些不同规模的对象,所用的网络应该具有一定的鲁棒性。例如Inception block并行使用不同大小的卷积核来检测不同规模大小的目标。在U-Net架构

【实战源码】TeleGrip:基于VR的机械臂遥操作系统全流程解析

【实战源码】TeleGrip:基于VR的机械臂遥操作系统全流程解析

摘要 本文对开源项目 TeleGrip 的架构与源码进行了剖析。该系统基于 LeRobot 框架,通过 VR 端位姿采集—WebSocket 通信—控制循环解算—机械臂执行 的流程,实现虚拟与物理空间的实时映射。前端采用 A-Frame 进行手柄姿态获取与可视化,后端以 Python 实现命令队列、插值与逆运动学计算,并同步驱动 PyBullet 仿真与 SO100 实体机械臂。该框架具有低延迟、高扩展性等特点,可用于 VR 遥操作、具身智能及多模态交互研究。 前言:项目背景与价值 想象一下你戴上 VR 头显,用手柄抓取虚拟物体,现实中的机械臂同步完成同样的动作——这就是 TeleGrip 的核心。 本文将带你从源码角度理解它是如何实现“虚拟到现实”的信号映射与控制闭环的。 GitHub链接:https://github.

无人机仿真与强化学习的终极指南:gym-pybullet-drones项目深度解析

无人机仿真与强化学习的终极指南:gym-pybullet-drones项目深度解析 【免费下载链接】gym-pybullet-dronesPyBullet Gym environments for single and multi-agent reinforcement learning of quadcopter control 项目地址: https://gitcode.com/gh_mirrors/gy/gym-pybullet-drones 你是否想过,无需购买昂贵的无人机设备,就能在电脑上体验真实的飞行控制?今天要介绍的gym-pybullet-drones项目,正是这样一个完美的解决方案。这个开源项目为单机和多机无人机提供了基于PyBullet的强化学习环境,让你能够轻松探索无人机控制的世界。😊 快速上手:5分钟开启无人机仿真之旅 想要立即体验这个强大的无人机仿真平台?只需简单几步: 1. 克隆项目:git clone https://gitcode.com/gh_mirrors/gy/gym-pybullet-drones 2. 创建虚拟环境:conda