一个嵌入式硬件高手的设计心得

2023-05-16

一:成本节约

现象一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数5K吧
点评:市场上不存在5K的阻值,最接近的是 4.99K(精度1%),其次是5.1K(精度5%),其成本分别比精度为20%的4.7K高4倍和2倍。20%精度的电阻阻值只有1、1.5、2.2、 3.3、4.7、6.8几个类别(含10的整数倍);类似地,20%精度的电容也只有以上几种值,如果选了其它的值就必须使用更高的精度,成本就翻了几 倍,却不能带来任何好处。

现象二:面板上的指示灯选什么颜色呢?我觉得蓝色比较特别,就选它吧
点评:其它红绿黄橙等颜色的不管大小(5MM以下)封装如何,都已成熟了几十年,价格一般都在5毛钱以下,而蓝色却是近三四年才发明的东西,技术成熟度和供货稳定度都较差,价格却要贵四五倍。目前蓝色指示灯只用在不能用其它颜色替代的场合,如显示视频信号等。

现象三:这点逻辑用74XX的门电路搭也行,但太土,还是用CPLD吧,显得高档多了
点评:74XX的门电路只几毛钱,而CPLD至少也得几十块,(GAL/PAL虽然只几块钱,但公司不推荐使用)。成本提高了N倍不说,还给生产、文档等工作增添数倍的工作。

现象四:我们的系统要求这么高,包括MEM、CPU、FPGA等所有的芯片都要选最快的
点评:在一个高速系统中并不是每一部分都工作在高速状态,而器件速度每提高一个等级,价格差不多要翻倍,另外还给信号完整性问题带来极大的负面影响。

现象五:这板子的PCB设计要求不高,就用细一点的线,自动布吧
点评:自动布线必然要占用更大的PCB面积,同时产生比手动布线多好多倍的过孔,在批量很大的产品中,PCB厂家降价所考虑的因素除了商务因素外,就是线宽和过孔数量,它们分别影响到PCB的成品率和钻头的消耗数量,节约了供应商的成本,也就给降价找到了理由。

现象六:程序只要稳定就可以了,代码长一点,效率低一点不是关键
点评:CPU的速度和存储器的空间都是用钱买来的,如果写代码时多花几天时间提高一下程序效率,那么从降低CPU主频和减少存储器容量所节约的成本绝对是划算的。CPLD/FPGA设计也类似。

二:低功耗设计

现象一:我们这系统是220V供电,就不用在乎功耗问题了
点评:低功耗设计并不仅仅是为了省电,更多的好处在于降低了电源模块及散热系统的成本、由于电流的减小也减少了电磁辐射和热噪声的干扰。随着设备温度的降低,器件寿命则相应延长(半导体器件的工作温度每提高10度,寿命则缩短一半)

现象二:这些总线信号都用电阻拉一下,感觉放心些
点 评:信号需要上下拉的原因很多,但也不是个个都要拉。上下拉电阻拉一个单纯的输入信号,电流也就几十微安以下,但拉一个被驱动了的信号,其电流将达毫安 级,现在的系统常常是地址数据各32位,可能还有244/245隔离后的总线及其它信号,都上拉的话,几瓦的功耗就耗在这些电阻上了(不要用8毛钱一度电 的观念来对待这几瓦的功耗)。

现象三:CPU和FPGA的这些不用的I/O口怎么处理呢?先让它空着吧,以后再说
点评:不用的I/O口如果悬空的话,受外界的一点点干扰就可能成为反复振荡的输入信号了,而MOS器件的功耗基本取决于门电路的翻转次数。如果把它上拉的话,每个引脚也会有微安级的电流,所以最好的办法是设成输出(当然外面不能接其它有驱动的信号)

现象四:这款FPGA还剩这么多门用不完,可尽情发挥吧
点评:FGPA的功耗与被使用的触发器数量及其翻转次数成正比,所以同一型号的FPGA在不同电路不同时刻的功耗可能相差100倍。尽量减少高速翻转的触发器数量是降低FPGA功耗的根本方法。

现象五:这些小芯片的功耗都很低,不用考虑
点 评:对于内部不太复杂的芯片功耗是很难确定的,它主要由引脚上的电流确定,一个ABT16244,没有负载的话耗电大概不到1毫安,但它的指标是每个脚可 驱动60毫安的负载(如匹配几十欧姆的电阻),即满负荷的功耗最大可达60*16=960mA,当然只是电源电流这么大,热量都落到负载身上了。

现象六:存储器有这么多控制信号,我这块板子只需要用OE和WE信号就可以了,片选就接地吧,这样读操作时数据出来得快多了。
点评:大部分存储器的功耗在片选有效时(不论OE和WE如何)将比片选无效时大100倍以上,所以应尽可能使用CS来控制芯片,并且在满足其它要求的情况下尽可能缩短片选脉冲的宽度。

现象七:这些信号怎么都有过冲啊?只要匹配得好,就可消除了
点 评:除了少数特定信号外(如100BASE-T、CML),都是有过冲的,只要不是很大,并不一定都需要匹配,即使匹配也并非要匹配得最好。象TTL的输 出阻抗不到50欧姆,有的甚至20欧姆,如果也用这么大的匹配电阻的话,那电流就非常大了,功耗是无法接受的,另外信号幅度也将小得不能用,再说一般信号 在输出高电平和输出低电平时的输出阻抗并不相同,也没办法做到完全匹配。所以对TTL、LVDS、422等信号的匹配只要做到过冲可以接受即可。

现象八:降低功耗都是硬件人员的事,与软件没关系
点 评:硬件只是搭个舞台,唱戏的却是软件,总线上几乎每一个芯片的访问、每一个信号的翻转差不多都由软件控制的,如果软件能减少外存的访问次数(多使用寄存 器变量、多使用内部CACHE等)、及时响应中断(中断往往是低电平有效并带有上拉电阻)及其它争对具体单板的特定措施都将对降低功耗作出很大的献。

三:系统效率

现象一:这主频100M的CPU只能处理70%,换200M主频的就没事了
点评:系统的处理能力牵涉到多种多样的因素,在通信业务中其瓶颈一般都在存储器上,CPU再快,外部访问快不起来也是徒劳。

现象二:CPU用大一点的CACHE,就应该快了
点 评:CACHE的增大,并不一定就导致系统性能的提高,在某些情况下关闭CACHE反而比使用CACHE还快。原因是搬到CACHE中的数据必须得到多次 重复使用才会提高系统效率。所以在通信系统中一般只打开指令CACHE,数据CACHE即使打开也只局限在部分存储空间,如堆栈部分。同时也要求程序设计 要兼顾CACHE的容量及块大小,这涉及到关键代码循环体的长度及跳转范围,如果一个循环刚好比CACHE大那么一点点,又在反复循环的话,那就惨了。

现象三:这么多任务到底是用中断还是用查询呢?还是中断快些吧
点 评:中断的实时性强,但不一定快。如果中断任务特别多的话,这个没退出来,后面又接踵而至,一会儿系统就将崩溃了。如果任务数量多但很频繁的话,CPU的 很大精力都用在进出中断的开销上,系统效率极为低下,如果改用查询方式反而可极大提高效率,但查询有时不能满足实时性要求,所以最好的办法是在中断中查 询,即进一次中断就把积累的所有任务都处理完再退出。

现象四:存储器接口的时序都是厂家默认的配置,不用修改的
点评:BSP对存储 器接口设置的默认值都是按最保守的参数设置的,在实际应用中应结合总线工作频率和等待周期等参数进行合理调配。有时把频率降低反而可提高效率,如RAM的 存取周期是70ns,总线频率为40M时,设3个周期的存取时间,即75ns即可;若总线频率为50M时,必须设为4个周期,实际存取时间却放慢到了 80ns。

现象五:一个CPU处理不过来,就用两个分布处理,处理能力可提高一倍
点评:对于搬砖头来说,两个人应该比一个人的效率高一倍;对于作画来说,多一个人只能帮倒忙。使用几个CPU需对业务有较多的了解后才能确定,尽量减少两个CPU间协调的代价,使1+1尽可能接近2,千万别小于1。

现象六:这个CPU带有DMA模块,用它来搬数据肯定快
点 评:真正的DMA是由硬件抢占总线后同时启动两端设备,在一个周期内这边读,那边些。但很多嵌入CPU内的DMA只是模拟而已,启动每一次DMA之前要做 不少准备工作(设起始地址和长度等),在传输时往往是先读到芯片内暂存,然后再写出去,即搬一次数据需两个时钟周期,比软件来搬要快一些(不需要取指令, 没有循环跳转等额外工作),但如果一次只搬几个字节,还要做一堆准备工作,一般还涉及函数调用,效率并不高。所以这种DMA只对大数据块才适用。

四:信号完整性

现象一:这些信号都经过仿真了,绝对没问题
点 评:仿真模型不可能与实物一模一样,连不同批次加工的实物都有差别,就更别说模型了。再说实际情况千差万别,仿真也不可能穷举所有可能,尤其是串扰。曾经 有一教训是某单板只有特定长度的包极易丢包,最后的原因是长度域的值是0xFF,当这个数据出现在总线上时,干扰了相邻的WE信号,导致写不进RAM。其 它数据也会对WE产生干扰,但干扰在可接受的范围内,可是当8位总线同时由0边1时,附近的信号就招架不住了。结论是仿真结果仅供参考,还应留有足够的余 量。

现象二:100M的数据总线应该算高频信号,至于这个时钟信号频率才8K,问题不大
点评:数据总线的值一般是由控制信号或时钟 信号的某个边沿来采样的,只要争对这个边沿保持足够的建立时间和保持时间即可,此范围之外有干扰也罢过冲也罢都不会有多大影响(当然过冲最好不要超过芯片 所能承受的最大电压值),但时钟信号不管频率多低(其实频谱范围是很宽的),它的边沿才是关键的,必须保证其单调性,并且跳变时间需在一定范围内。

现象三:既然是数字信号,边沿当然是越陡越好
点评:边沿越陡,其频谱范围就越宽,高频部分的能量就越大;频率越高的信号就越容易辐射(如微波电台可做成手机,而长波电台很多国家都做不出来),也就越容易干扰别的信号,而自身在导线上的传输质量却变得越差,因此能用低速芯片的尽量使用低速芯片。

现象四:为保证干净的电源,去偶电容是多多益善
点评:总的来说去偶电容越多电源当然会更平稳,但太多了也有不利因素:浪费成本、布线困难、上电冲击电流太大等。去偶电容的设计关键是要选对容量并且放对地方,一般的芯片手册都有争对去偶电容的设计参考,最好按手册去做。

现象五:信号匹配真麻烦,如何才能匹配好呢?
点 评:总的原则是当信号在导线上的传输时间超过其跳变时间时,信号的反射问题才显得重要。信号产生反射的原因是线路阻抗的不均匀造成的,匹配的目的就是为了 使驱动端、负载端及传输线的阻抗变得接近,但能否匹配得好,与信号线在PCB上的拓扑结构也有很大关系,传输线上的一条分支、一个过孔、一个拐角、一个接 插件、不同位置与地线距离的改变等都将使阻抗产生变化,而且这些因素将使反射波形变得异常复杂,很难匹配,因此高速信号仅使用点到点的方式,尽可能地减少 过孔、拐角等问题。

五:可靠性设计

现象一:这块单板已小批量生产了,经过长时间测试没发现任何问题
点评:硬件设计和芯片应 用必须符合相关规范,尤其是芯片手册中提到的所有参数(耐压、I/O电平范围、电流、时序、温度PCB布线、电源质量等),不能光靠试验来验证。公司有不 少产品都有过惨痛的教训,产品卖了一两年,IC厂家换了个生产线,咱们的板子就不转了,原因就是人家的芯片参数发生了点变化,但并没有超出手册的范围。如 果你以手册为准,那他怎么变化都不怕,如果参数变得超出手册范围了还可找他索赔(假如这时你的板子还能转,那你的可靠性就更牛了)。

现象二:这部分电路只要要求软件这样设计就不会有问题
点评:硬件上很多电气特性直接受软件控制,但软件是经常发生意外的,程序跑飞了之后无法预料会有什么操作。设计者应确保不论软件做什么样的操作硬件都不应在短时间内发生永久性损坏。

现象三:用户操作错误发生问题就不能怪我了
点评:要求用户严格按手册操作是没错的,但用户是人,就有犯错的时候,不能说碰错一个键就死机,插错一个插头就烧板子。所以对用户可能犯的各种错误必须加以保护。

现象四:这板子坏的原因是对端的板子出问题了,也不是我的责任
点评:对于各种对外的硬件接口应有足够的兼容性,不能因为对方信号不正常,你就歇着了。它不正常只应影响到与其有关的那部分功能,而其它功能应能正常工作,不应彻底罢工,甚至永久损坏,而且一旦接口恢复,你也应立即恢复正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个嵌入式硬件高手的设计心得 的相关文章

  • MP地面站二次开发教程(二)MP的框架与修改

    目录 MP高级功能 主界面基本修改 1 菜单名称背景修改 2 主窗体语言修改 3 主要窗体目录位置 4 菜单栏删除 5 入口函数 6 参数配置函数 定制修改步骤 1 主题环境修改 2 菜单精简 去掉冗余菜单按键 3 功能按键添加 新建按钮实
  • QGC地面站二次开发(三)Qt 简洁地面站

    目录 多机控制原理 多机控制实现 简洁地面站优化 1 飞机的飞行轨迹以不同的颜色区分 2 控制所有的飞机 3 将设定航线送给特定的飞机 多机控制原理 多机地面站支持 TCP UDP 和串口等三种连接方式 xff0c 首先我们需要对这两种连接
  • 基于51单片机的密码锁设计

    研究内容 本系统由STC89C52单片机系统 xff08 主要是STC89C52单片机最小系统 xff09 4 4矩阵键盘 LCD1602显示和报警系统等组成 xff0c 具有设置 修改六位用户密码 超次报警 超次锁定 密码错误报警等功能
  • 【gcc】gcc优化等级 -O1 -O2 -O3 -Os -Ofast -Og|gcc关闭优化

    目录 优化等级 O1 O2 O3 Os Ofast Og cmake 生成 debug和 release 版 Cmake设置优化等级 Debug和Release 方案 About table About question gcc g 43
  • 嵌入式期末复习题(二)

    考试题型 一 选择题 每小题2分 xff0c 15题 xff0c 共30分 二 填空题 每题2分 xff0c 10题 xff0c 共20分 三 简答题 每题5分 xff0c 4题 xff0c 共20分 四 分析题 每题5分 xff0c 3题
  • 嵌入式期末复习题(三)

    1嵌入式系统的定义 嵌入式系统是用于控制 监视或辅助操作机器和设备的装置 嵌入式系统是以应用为中心 xff0c 以计算机技术为基础 xff0c 软硬件可裁剪 xff0c 适应应用系统对功能 可靠性 成本 体积和功耗等严格要求的专用计算机系统
  • 解决Ubuntu 网速慢的问题

    Ubuntu 网速慢 xff0c 主要是把时间浪费在域名解析上 我们可以用dnsmasq解决这问题 具体如下 xff1a 1 安装dnsmasq 命令 sudo apt get install dnsmasq 2 编辑dnsmasq的配置文
  • C++中的char,char*,char[]

    char C 43 43 中的char是字符的意思 xff0c 可以用例如 39 a 39 来表示 xff0c 每个字符串string都是由很多个单独的字符char组成 char char 是一个指针 xff0c 例如 xff1a char
  • VSCode 运行C++程序

    0 省流自强版 本方法来自以下两个参考链接 xff0c 可自行参照去执行安装 xff1a 1 https code visualstudio com docs languages cpp 2 https www youtube com wa
  • 了解CV和RoboMaster视觉组(四)视觉组使用的硬件

    NeoZng neozng1 64 hnu edu cn 4 视觉组接触的硬件 虽然别人总觉得视觉组就是整天对着屏幕臭敲代码的程序员 xff0c 实际上我们也会接触很多的底层硬件与传感器 xff0c 在使用硬件的同时很可能还需要综合运用其他
  • VINS-RGBD运行指令

    创建工程VINS RGBD catkin ws 将代码放入src文件夹当中 git clone https github com STAR Center VINS RGBD 进行编译 cd VINS RGBD catkin ws catki
  • ubuntu16.04安装realsense D435i驱动及固件

    安装Realsense SDK xff1a 1 下载source并且确定git版本 xff1a 1 git clone https github com IntelRealSense librealsense xff08 下载源 xff09
  • ROS入门(七)——仿真机器人三(Gazebo+Xacro)

    所用的学习链接 xff1a 奥特学园 ROS机器人入门课程 ROS理论与实践 零基础教程P271 277 以上视频笔记见http www autolabor com cn book ROSTutorials 前文参考 ROS入门 五 仿真机
  • ROS入门(九)——机器人自动导航(介绍、地图、定位和路径规划)

    所用的学习链接 xff1a 奥特学园 ROS机器人入门课程 ROS理论与实践 零基础教程P289 314 以上视频笔记见http www autolabor com cn book ROSTutorials 一 介绍 官方链接 xff1a
  • Keil工程添加源文件和头文件(.c和.h)的方法

    在此把Keil项目添加源文件和头文件的方法做个记录 xff1a 1 Keil项目添加源文件和头文件的方法之一 1 1 右键点击项目名称 xff0c 弹出菜单中选择Add Group xff0c 我们把所有需要添加的源文件都放在这个Group
  • 漂亮的html表格

    原文 xff1a http www textfixer com resources css tables php css table01 一个像素边框的表格 xff1a Info Header 1 Info Header 2 Info He
  • SIPp之认证注册

    欢迎大家转载 xff0c 为保留作者成果 xff0c 转载请注明出处 xff0c http blog csdn net netluoriver xff0c 有些文件在资源中也可以下载 xff01 如果你没有积分 xff0c 可以联系我 xf
  • HTTP:DIGEST认证的请求和响应报文

    以下是HTTP DIGEST认证的请求和响应报文的例子 xff0c 供以后参考 IE first request GET boe checkedServlet HTTP 1 1 Accept image gif image jpeg ima
  • Linux配置篇 | Ubuntu配置apt镜像源

    以下以 Ubuntu18 04 LTS 为例 xff0c 也适用于 Ubuntu 其他版本 一 修改apt镜像源 xff08 1 xff09 备份apt配置文件 xff1a cp etc apt sources list etc apt s

随机推荐

  • STC89C52RC单片机额外篇 | 04 - 认识头文件<intrins.h>与_nop_函数

    1 lt intrins h gt 头文件 头文件 lt intrins h gt 在我们51单片机日常开发中经常使用 xff0c 特别是 nop 函数 xff0c 以下是 lt intrins h gt 的内容 xff1a span cl
  • HTTP协议详解 - 通过C++实现HTTP服务剖析HTTP协议

    前言 C C 43 43 程序员一般很少会接触到HTTP服务端的东西 xff0c 所以对HTTP的理解一般停留在理论 本文章实现通过C 43 43 实现了一个http服务 xff0c 可以通过代码对HTTP协议有更深的理解 xff0c 并且
  • GIT 中如何打标签

    前言0x1 GIT 标签常用指令0x2 轻量标签0x3 附注标签0x4 远程仓库中的标签 前言 在我们开发的过程中 xff0c 可能经过多次 commit 提交才会确定一个版本 xff0c 那么除了用 commit comments 来标识
  • 用VSCode开发C++项目

    写在前面 最近在新学C 43 43 xff0c 又不想用VisualStudio那么庞大的IDE xff0c VS体量稍微有那么点笨重 xff08 主要还是因为穷 xff0c 没钱换电脑 xff0c 目前的电脑开个VS要个两三分钟 xff0
  • petalinux2018.3 error 记录

    petalinux config get hw description 61 报错 INFO sourcing bitbake ERROR Failed to source bitbake ERROR Failed to config pr
  • petalinux 编译,源码编译

    1 测试环境 Ubuntu 16 04PetaLinux 2019 1PetaLinux 2019 1 ZCU106 BSPZCU106 2 PetaLinux介绍 PetaLinux是Xilinx基于Yocto推出的Linux开发工具 Y
  • Optitrack Motive软件安装及使用说明

    Motive 软件安装程序 http www naturalpoint com optitrack downloads motive html 安装Motive需要安装两个底层插件 xff0c Directx aug2009 redist
  • Failed to get convolution algorithm. This is probably because cuDNN failed to initialize

    Failed to get convolution algorithm This is probably because cuDNN failed to initialize from tensorflow compat v1 import
  • C语言---整型字符串转换

    C语言提供了几个标准库函数 xff0c 可以将任意类型 整型 长整型 浮点型等 的数字转换为字符串 以下是用itoa 函数将整数转 换为字符串的一个例子 xff1a include lt stdio h gt include lt stdl
  • 约瑟夫环(C语言单项循环链表)

    约瑟夫环 C 语言单项循环链表 约瑟夫环 问题描述 xff1a 约瑟夫问题的一种描述是 xff1a 编号为1 xff0c 2 xff0c xff0c n 的n 个人按顺时针方向围坐一圈 xff0c 每人持一个密码 xff08 正整数 xff
  • 交换机VLAN的定义、意义以及划分方式

    什么是VLAN 虚拟网技术 xff08 VLAN xff0c Virtual Local Area Network xff09 的诞生主要源于广播 广播在网络中起着非常重要的作用 xff0c 如发现新设备 调整网络路径 IP地址租赁等等 x
  • coredump简介与coredump原因总结

    coredump简介与coredump原因总结 什么是coredump xff1f 通常情况下coredmp包含了程序运行时的内存 xff0c 寄存器状态 xff0c 堆栈指针 xff0c 内存管理信息等 可以理解为把程序工作的当前状态存储
  • 嵌入式设备web服务器比较

    现在在嵌入式设备中所使用的web服务器主要有 xff1a boa thttpd mini httpd shttpd lighttpd goaheand appweb和apache等 Boa 1 介绍 Boa诞生于1991年 xff0c 作者
  • memfd.c:40:12: error: static declaration of ‘memfd_create’ follows non-static declaration

    qemu编译安装出错 xff1a memfd c 40 12 error static declaration of memfd create follows non static declaration 修改 xff1a a util m
  • windows10 驱动开发环境 VS2019+WDK10

    windows10 驱动开发环境 1 下载SDK https developer microsoft com zh cn windows downloads windows 10 sdk 通用驱动demo xff1a https githu
  • 在用户配置文件中添加 IDF_PATH 和 idf.py PATH

    在用户配置文件中添加 IDF PATH 和 idf py PATH CMake 英文 注解 本文档将介绍如何使用 CMake 编译系统 目前 xff0c CMake 编译系统仍处于预览发布阶段 xff0c 如您在使用中遇到任何问题 xff0
  • error C3861: “gets”: 找不到标识符

    error C3861 gets 找不到标识 把 gets 改成 gets s 用VS2015打开一个win32工程 xff0c 生成解决方案失败 报错信息 xff1a 命令行 error D8016 ZI 和 Gy 命令行选项不兼容 选中
  • ROS和Optitrack通信

    ROS xff1a indigo Ubuntu xff1a 14 04 目的 xff1a 一台计算机通过Optitrack获得刚体 xff08 crazyflie2 0 xff09 的姿态信息并广播到同一局域网的其他计算机上 xff08 如
  • 运算放大电路(三)-加法器

    加法器 由虚短知 xff1a V 61 V 43 61 0 a 由虚断及基尔霍夫定律知 xff0c 通过R2与R1的电流之和等于通过R3的电流 xff0c 故 V1 V R1 43 V2 V R2 61 Vout V R3 b 代入a式 x
  • 一个嵌入式硬件高手的设计心得

    一 xff1a 成本节约 现象一 xff1a 这些拉高 拉低的电阻用多大的阻值关系不大 xff0c 就选个整数5K吧 点评 xff1a 市场上不存在5K的阻值 xff0c 最接近的是 4 99K xff08 精度1 xff09 xff0c