【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        本身fpga是介于纯软件和asic之间的元器件。如果是纯软件,那我们要做的,就是纯上层开发。只要相关驱动已经实现,那么我们对设备的处理,就是打开、关闭、读、写、控制这五个部分。至于底层是怎么实现的,我们完全不用管。还有一种就是asic,这类就是芯片开发的范畴,虽然fpga和asic一样,都是用verilog开发,但是两者的思路是完全不一样的。前者类似于搭积木,后面则是从0到1造房子。

        说了这么多,我们可以了解下,从一个嵌入式软件工程师的角度看,fpga可以帮助我们做什么。其实主要的就两部分,一个是扩展接口,一个就是算法加速或者替代。

1、扩展接口

        不管是mcu也好,soc也好,外设的接口数量都是一定的。比如说uart多少个,iic多少个,spi多少个,sdio多少个等等。这样在一些特殊的场合,比如我们希望串口多一点,或者是spi多一点,基本上就没有什么办法了。要么就是选用高一级的soc,要么就是使用多颗soc来凑一个电路。两种方式虽然也可以解决问题,但是显得有点浪费资源。

        但是用zynq,或者是分列式元器件,则没有这方面的困扰。原则上,只要是fpga ip支持的外设接口,要多少有多少,只要fpga的pin脚够、内部的lut表够。所以,从扩展外设接口这个角度来说,fpga还是非常合格的。

2、算法加速或替代

        还有,使用fpga的目的是为了算法加速,而不是开发新的算法。这是需要注意的。也就是说,针对某一个问题,现在已经有一个算法可以解决这个问题,但是这个问题是用软件实现的,而不是硬件实现的。很多时候,虽然用软件也可以解决问题,但是效率比较低,或者软件做的时候,需要做很多无用的轮询、查找、判断的工作,这一点就不是很方便。但是,相关的工作如果用硬件实现,就会显得非常的方便。

        我们举一个例子来进行说明。很多soc的封装,如果不是bga,只靠qfn,其实引脚是很少的。要么是88个,要么是128个。这么多的引脚,需要的功能那么多,那么势必很多pin是复用的。针对这种情况,如果gpio比较多,我们总是希望是不是可以通过其他方式,不要占用那么多引脚就可以实现gpio输入输出,这样不会影响其他功能开发,所以大家想到了adc的方法。

        从原理方面说,用adc实现按键输入是没有问题的。不同的按键按下去的时候,就会产生不同的电压。借助于这些电压,就可以判断出当前是哪个按键按下去了。但是怎么判断却是一件很麻烦的事情。

        如果是软件来说,那么势必要起一个thread,这个thread的频率不能太低,不然很容易漏掉输入事件。其次,查询的时候,需要对输入数值进行滤波处理,软件来处理就是延时+均值处理。最后,获取到对应的数据之后,要及时进行上报和进行状态恢复,不要影响下一次触发。

        从逻辑上说,虽然软件也能做,但是比较费cpu。相同的逻辑其实硬件也可以实现。因为fpga在后台可以一直查询,状态机切换也是很简单的事情,如果soc本身支持类似的逻辑处理,那么作为用户而言,只需要简单配置下参数就可以使用这个功能,

adc0 {adc-key-controller;channel = <0>;number_keys = <7>;vol_max = <1350>;vol_threshold = <1270>;key_vol_thre = <0 90110 290310 490510 690710 890910 10901110 1265>;}; 

        这也就告诉我们,很多算法不是软件不可以做,只是软件做的时候效率低,没有办法满足实时要求,或者性价比极低。这种情况下,还不如用verilog配合fpga实现来的简单和快捷。逻辑上面,其实硬件和软件差异并不是很大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94101.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94101.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94101.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20250822在Ubuntu24.04.2下指定以太网卡的IP地址

20250822在Ubuntu24.04.2下指定以太网卡的IP地址 2025/8/22 20:28缘起&#xff1a;公司的服务器的IP地址老变&#xff01;&#xff0c;路由器经常被其他其它部门断电重启。 导致IP地址被DHCP服务器给更改了&#xff01; 直接固定IP地址了。 本来想通过VI命令编辑配置文件来指定…

【yocto】BitBake指令汇总解析

【点关注&#xff0c;不迷路 】BitBake 是一个功能强大且核心的元任务执行器&#xff0c;它是 OpenEmbedded 和 Yocto Project 的构建基石。简单来说&#xff0c;它就像一个高度专业化的 make 工具&#xff0c;但它能解析复杂的元数据&#xff08;配方、配置、类&#xff09;&…

CSS @media 媒体查询

media 媒体查询是响应式设计的核心工具&#xff0c;允许根据设备特性&#xff08;如屏幕宽度、高度、方向等&#xff09;应用不同的 CSS 样式。一、基本语法media media-type and (media-feature) {/* 目标样式规则 */ }媒体类型&#xff08;可选&#xff09;&#xff1a;all&a…

Vue2.x核心技术与实战(三)

目录 四、Vue2.x:组件通信&进阶用法 4.1 组件的三大组成部分(结构/样式/逻辑) 4.1.0 组件的三大组成部分-注意点说明 4.1.1 组件的样式冲突 scoped 4.1.2 data是一个函数 4.2 组件通信 4.2.1 什么是组件通信 4.2.2 不同的组件关系和组件通信方案分类 4.2.2 父传子…

泵站远程监控与自动化控制系统:智慧泵房设备的创新实践

在智慧水务快速发展的背景下&#xff0c;泵站自动化控制系统与水泵远程监控技术已成为提升供水效率、保障水质安全、降低运维成本的核心手段。通过物联网、云计算、边缘计算等技术的深度融合&#xff0c;智慧泵房设备实现了从“人工值守”到“无人化智能管理”的跨越式升级&…

校园作品互评管理移动端的设计与实现

摘 要 本文概述了一款运用 Spring Boot 框架精心打造的校园作品互评管理移动端的设 计与实现&#xff0c;其设计初衷在于激发校园内的创作活力&#xff0c;并优化学生间的互评流程&#xff0c;进一 步推动教育模式的创新。该系统深度融合了移动互联网技术&#xff0c;借助小程序…

为什么需要关注Flink并行度?

当你的Flink作业运行时&#xff0c;是否遇到过资源利用率不足或任务堆积的情况&#xff1f;这很可能与并行度设置不当有关。作为流处理领域的"性能放大器"&#xff0c;合理配置并行度能带来&#xff1a;提升吞吐量资源成本降低的黄金比例背压问题的天然解决方案一、四…

电脑芯片大的32位与64位指的是什么

32 位与 64 位既不单纯指数据线根数&#xff0c;也不单纯指地址线根数&#xff0c;而是对CPU 核心架构位数的统称&#xff0c;其核心关联以下两个关键硬件指标&#xff0c;需结合场景区分&#xff1a;核心关联&#xff1a;CPU 通用寄存器位数这是 “32 位 / 64 位” 的核心定义…

第1.1节:图灵测试与AI的诞生

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

分布式搜索(Elasticsearch)基本用法

目录 初识Elasticsearch 什么是elasticsearch 正向索引和倒排索引 与mysql进行对比 安装elasticsearch、kibana 安装分词器IK IK分词器的拓展和停用词典 ik分词器-拓展词库 ik分词器-停用词库 索引库操作 mapping映射属性 索引库的CRUD 查看、删除索引库 文档操作 …

docker 查看容器 docker 筛选容器

目录 docker ps 看运行中的容器 运行中的容器筛选容器名 2️⃣ 包括已停止的容器中筛选 3️⃣ 只输出容器 ID&#xff08;脚本里常用&#xff09; docker ps 看运行中的容器 docker ps -a 看所有容器 --filter "namexxx" 可以按名字查 运行中的容器筛选容器名 …

策略模式 vs 适配器模式

一、模式本质1 策略模式&#xff1a;行为的选择核心思想&#xff1a;定义一组算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以互相替换&#xff0c;让算法的变化独立于使用它的客户端。2 适配器模式&#xff1a;接口的转换核心思想&#xff1a;将一个类的接口转换…

Unity--判断一个点是否在扇形区域里面(点乘和叉乘的应用)

问题分享&#xff1a;https://www.bilibili.com/video/BV1zLetz1Ew8 using System.Collections; using System.Collections.Generic; using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endifpublic class SectorCheck : MonoBehaviour {[Tooltip("扇形圆心"…

基于Python sdk发布自己的第一个mcp-client

说在前面 上一篇文章发布了一个mcp-server&#xff0c;具体的server是否能被正确的访问到&#xff1f;是否能够得到正常的返回&#xff1f; 在github上找到一个客户端的代码实现&#xff0c;我把里面的大模型调用换成了支持国内大模型的方式&#xff0c;一起来验证一下吧~ 主…

C# 浮点数与定点数详细解析

C# 浮点数与定点数详细解析 在 C# 中&#xff0c;数值类型主要分为&#xff1a; 整数型&#xff08;int, long 等&#xff09;浮点型&#xff08;float, double&#xff09;定点型&#xff08;decimal&#xff09; 浮点数和定点数在内部的表示方式不同&#xff0c;导致它们的 精…

【小宁学习日记5 stm32】LED闪烁 LED流水灯 蜂鸣器

目录 01.LED闪烁 1、搭建电路板 2、新建工程 &#xff08;1&#xff09;前期准备 &#xff08;2&#xff09;创建工程文件夹结构 &#xff08;3&#xff09;复制固件库文件到对应文件夹 &#xff08;4&#xff09;在 Keil 中创建工程 &#xff08;5&#xff09;配置工程…

openstack的novnc兼容问题

1.今天在部署O版过程中发现了novnc组件不兼容openstack2.novnc一直报错&#xff0c;令牌过期&#xff0c;原本以为是python代码配置的问题&#xff0c;最后经过排查很久发现竟然是novnc的版本和openstack的O版不兼容novncyum remove -y novnc*安装支持版本yum install -y novnc…

Day25 栈 队列 二叉树

day25 栈 队列 二叉树使用栈计算表达式的值 概述 通过两个栈&#xff08;数值栈和符号栈&#xff09;实现中缀表达式求值。算法核心是&#xff1a; 遇到数字时&#xff0c;累加并入数值栈&#xff1b;遇到运算符时&#xff0c;比较其与符号栈顶运算符的优先级&#xff1a; 若当…

阿里云RDS MySQL数据归档全攻略:方案选择指南

引言在日常数据库管理中&#xff0c;数据归档是必不可少的重要环节。随着业务数据的不断增长&#xff0c;将历史数据从生产数据库迁移到更经济的存储方案中&#xff0c;不仅可以降低存储成本&#xff0c;还能提升数据库性能。阿里云提供了丰富的数据归档解决方案&#xff0c;本…

线性回归学习

一、线性回归简介核心思想&#xff1a;线性回归是一种通过属性的线性组合来做预测的模型。它的目标很明确&#xff0c;就是找到一条合适的直线、平面或者更高维度的超平面&#xff0c;让预测出来的值和实际真实值之间的差距尽可能小。比如在预测房屋价格时&#xff0c;就可以根…