找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3068

积分

0

好友

446

主题
发表于 15 小时前 | 查看: 0| 回复: 0

硬件设计需要考虑的细节繁杂,许多看似理所当然的选择背后,可能隐藏着成本、功耗或可靠性的陷阱。以下从成本、功耗、效率、信号完整性及可靠性五个维度,汇总了设计中常见的30种误区及其分析,希望能帮助你审视自己的设计思路,避免踩坑。

01 成本节约

误区一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数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的整数倍)。电容也是如此。如果强行选择序列之外的值,就必须使用更高精度的器件,成本倍增却带不来任何性能好处。

误区二:面板上的指示灯选什么颜色呢?我觉得蓝色比较特别,就选它吧。
分析:红、绿、黄、橙等颜色的指示灯无论封装大小(5mm以下),都已成熟量产数十年,价格通常在0.5元以下。而蓝色LED的技术成熟度和供货稳定性相对较差,价格要贵上好几倍。目前,蓝色指示灯仅用于视频信号显示等无法用其他颜色替代的特殊场合。

误区三:这点逻辑用74系列的门电路搭也行,但太“土”,还是用CPLD吧,显得高档。
分析:一片74系列的门电路可能只需几毛钱,而一片CPLD至少几十元(虽然GAL/PAL只要几块钱,但很多公司不推荐使用)。这不仅将成本提高了数十倍,还给生产、文档管理等后续工作增加了数倍的工作量。

误区四:我们的系统要求这么高,包括内存、CPU、FPGA在内的所有芯片都要选最快的。
分析:在一个高速系统中,并非每一部分都工作在最高速状态。器件速度每提升一个等级,价格几乎要翻倍。同时,过快的边沿速率会给信号完整性带来极大的负面影响,如过冲、振铃和串扰加剧。

误区五:这板子的PCB设计要求不高,就用细一点的线,自动布线吧。
分析:自动布线通常会占用更大的PCB面积,并产生比手动布线多得多的过孔。对于批量生产的产品,PCB厂的报价除了商务因素,主要考量线宽和过孔数量,它们直接影响PCB的成品率和钻头损耗。手动优化布线,节约了供应商的成本,也就为自己争取到了降价空间。

误区六:程序只要稳定就可以了,代码长一点、效率低一点不是关键。
分析:CPU的主频和存储器的容量都是用钱买来的。如果在编码阶段多投入几天时间优化程序效率,那么由此带来的CPU降频或存储器减容所节约的成本,绝对是划算的。这个道理同样适用于CPLD/FPGA的设计。

02 低功耗设计

误区一:我们这系统是220V供电,就不用在乎功耗问题了。
分析:低功耗设计绝不仅仅是为了省电。更重要的价值在于降低了电源模块和散热系统的成本。同时,工作电流的减小也意味着电磁辐射和热噪声干扰的降低。此外,器件工作温度每降低10°C,其寿命可相应延长一倍。

误区二:这些总线信号都用电阻拉一下,感觉放心些。
分析:信号需要上下拉的原因很多,但并非每个信号都需要。对一个单纯的输入信号进行上拉或下拉,电流通常仅几十微安。但如果对一个已被驱动的信号进行上拉,其电流可能达到毫安级。现在的系统动辄32位地址数据总线,再加上隔离后的总线及其他信号,如果全部上拉,几瓦的功耗就可能白白消耗在这些电阻上。

误区三:CPU和FPGA这些不用的I/O口怎么处理呢?先让它空着吧,以后再说。
分析:不用的I/O口如果悬空,极易受到外界干扰,形成反复振荡的输入信号。而MOS器件的功耗很大程度上取决于门电路的翻转次数。如果简单地将空闲引脚上拉,每个引脚也会产生微安级的电流。最好的办法是将其在软件中设置为输出模式(当然,外部不能连接其他有驱动的信号)。

误区四:这款FPGA还剩这么多门用不完,可以尽情发挥。
分析:FPGA的功耗与被使用的触发器数量及其翻转频率成正比。因此,同一型号的FPGA在不同电路、不同时刻的功耗可能相差百倍。减少高速翻转的触发器数量,是降低FPGA功耗的根本方法。

误区五:这些小芯片的功耗都很低,不用考虑。
分析:对于内部逻辑不复杂的芯片,其功耗往往难以直接确定,主要由引脚上的电流决定。例如一片ABT16244,空载时耗电可能不到1毫安,但其规格书中写明每个引脚可驱动60毫安的负载。这意味着如果匹配低阻值负载,其满负荷功耗最大可达60*16=960毫安(这部分功耗主要转化为负载上的热量)。

误区六:存储器有这么多控制信号,我这块板子只需要用OE和WE就可以了,片选(CS)直接接地吧,这样读数据时速度更快。
分析:大多数存储器的功耗在片选信号有效时(无论OE和WE状态如何),比片选无效时高出100倍以上。因此,应尽可能使用CS信号来控制芯片的选通,并在满足时序要求的前提下,尽量缩短CS脉冲的有效宽度。

误区七:这些信号怎么都有过冲啊?只要端接匹配做得好,就可以消除。
分析:除了100BASE-T、CML等少数特定信号,数字信号有过冲是普遍现象。只要过冲幅度不大,并非一定需要端接匹配。即使匹配,也无需追求“完美匹配”。例如TTL输出的阻抗不到50欧姆,有的甚至低至20欧姆,若用同样小的匹配电阻,驱动电流会非常大,导致功耗无法接受,同时信号幅度也会被严重削弱。此外,许多器件在输出高电平和低电平时的输出阻抗并不相同,也无法做到完全匹配。因此,对TTL、LVDS、422等信号的匹配,目标应是“将过冲控制在可接受的范围内”。

误区八:降低功耗都是硬件工程师的事,与软件没关系。
分析:硬件搭建了舞台,唱戏的却是软件。总线上几乎每一个芯片的访问、每一个信号的翻转都由软件控制。如果软件能减少对外部存储器的访问(多使用寄存器变量、利用好内部Cache)、及时响应中断(中断通常是低电平有效且带有上拉电阻),并实施其他针对具体单板的优化措施,将对降低系统整体功耗做出巨大贡献。

03 系统效率

误区一:这主频100M的CPU负载已经到70%了,换成200M主频的就没事了。
分析:系统的处理能力受多种因素制约。在通信类应用中,瓶颈往往在存储器的访问速度上。如果外部存储器访问慢,CPU再快也无济于事。

误区二:给CPU配更大的Cache,系统就应该跑得更快。
分析:增大Cache并不总能提升系统性能,在某些情况下,关闭Cache反而更快。因为只有被重复使用的数据搬入Cache才能提高效率。在通信系统中,通常只开启指令Cache,数据Cache即使开启也只限于堆栈等局部存储空间。同时,程序设计也需兼顾Cache的容量和块大小,这涉及到关键循环代码的长度和跳转范围。如果一个循环体的大小刚好比Cache容量大一点,又在反复执行,性能会急剧下降。

误区三:这么多任务,到底用中断还是查询?肯定中断更快吧。
分析:中断的实时性强,但不一定“快”。如果中断发生得过于频繁,上一个中断还没处理完,下一个又接踵而至,很容易导致系统崩溃。如果任务数量多且触发频繁,CPU的大量时间会浪费在进出中断的上下文切换上,系统效率极低。此时,改用查询方式反而可能大幅提高效率。当然,查询可能无法满足实时性要求,折中的办法是采用“中断内查询”,即进入一次中断,就处理完所有累积的任务后再退出。

误区四:存储器接口的时序都是厂家默认配置好的,不用修改。
分析:BSP(板级支持包)对存储器接口的默认设置通常采用最保守的参数。在实际应用中,应结合总线工作频率和等待周期等参数进行合理优化。有时降低总线频率反而能提高效率。例如,RAM的存取周期是70ns,当总线频率为40MHz时,设置3个周期的存取时间(75ns)即可;当总线频率升至50MHz时,必须设为4个周期(80ns),实际存取时间反而变慢了。

误区五:一个CPU处理不过来,就用两个分布处理,处理能力可提高一倍。
分析:这个想法类似于“两个人搬砖比一个人快一倍”。但在某些复杂任务(比如作画)中,多一个人可能反而帮倒忙,增加协调成本。是否使用多CPU需要对业务有深入理解,目标是尽量减少CPU间协调的开销,使“1+1”尽可能接近2,而千万不要小于1。

误区六:这个CPU自带DMA模块,用它来搬数据肯定快。
分析:真正的硬件DMA能在一个总线周期内同时完成读取和写入操作。但许多嵌入式CPU内的DMA是“模拟”的,每次启动DMA传输前需要做大量准备工作(设置起始地址、长度等),传输时往往是先读到芯片内部暂存,再写出去,即搬移一个数据需要两个时钟周期。它比纯软件搬移快一些(省去了取指令、循环跳转的开销),但如果一次只搬几个字节,还要进行一堆设置和函数调用,效率并不高。因此,这类DMA只对大数据块传输才适用。

04 信号完整性

误区一:这些信号都经过仿真了,绝对没问题。
分析:仿真模型不可能与实物完全一致,不同批次的实物都会有差异。现实情况千差万别,仿真也无法穷举所有可能性,尤其是复杂的串扰。曾有案例是某单板在特定长度的数据包下极易丢包,最终发现是数据域出现0xFF(即8位总线同时由0跳变为1)时,对邻近的WE信号产生了严重干扰,导致无法写入RAM。其他数据也会干扰WE,但在可接受范围内。结论是:仿真结果仅供参考,设计中必须留有足够的余量。

误区二:100M的数据总线应该算高频信号,至于这个8K的时钟信号,频率这么低,问题不大。
分析:数据总线的值通常由控制信号或时钟信号的某个边沿来采样,只要保证相对于该边沿有足够的建立时间和保持时间即可。在此时间窗口之外,即使有干扰或过冲,影响也有限(当然过冲电压不应超过芯片极限)。而时钟信号,无论其频率多低(其频谱实际很宽),其边沿的单调性和跳变时间才是关键,必须严格保证。

误区三:既然是数字信号,边沿当然是越陡越好。
分析:信号边沿越陡峭,其包含的高频分量能量就越大。高频信号更容易产生辐射(干扰其他设备),也更容易受到干扰,同时其在传输线上的损耗也越大。因此,在满足时序要求的前提下,应优先选用边沿速率较缓的低速芯片。

误区四:为保证干净的电源,去耦电容多多益善。
分析:总的来说,去耦电容越多,电源纹波会越小。但过多也有弊端:增加成本、加大布线难度、导致上电冲击电流过大等。去耦电容设计的关键是选对容值并放对位置。一般芯片的数据手册都会提供相关的设计参考,最好遵循手册的建议。

误区五:信号匹配真麻烦,如何才能匹配好呢?
分析:总的原则是,当信号在导线上的传输时间超过其跳变时间时,反射问题才变得显著。信号反射源于传输线阻抗的不连续。匹配的目的是使驱动端、负载端及传输线的阻抗接近。但能否匹配好,与信号在PCB上的拓扑结构关系极大。传输线上的一个分支、一个过孔、一个拐角、一个接插件,或者与参考平面距离的变化,都会改变阻抗,并使反射波形变得极其复杂,难以完美匹配。因此,对于高速信号,应尽可能采用点到点的连接方式,减少过孔、拐角等不连续点。

05 可靠性设计

误区一:这块单板已小批量生产了,经过长时间测试没发现任何问题。
分析:硬件设计和芯片应用必须严格遵循相关规范,特别是芯片数据手册中列出的所有参数(耐压、I/O电平范围、电流、时序、温度、PCB布线、电源质量等)。不能仅仅依靠测试来验证可靠性。有不少产品曾有过惨痛教训:产品卖了一两年后,因为IC厂家更换了生产工艺,虽然芯片参数仍在手册范围内,但板子却无法工作了。如果你的设计完全以手册的极限参数为准,那么只要芯片参数不超出手册范围,你的板子就应该是可靠的;如果参数超出范围导致故障,你甚至有权索赔。

误区二:这部分电路只要要求软件按这样设计就不会有问题。
分析:硬件的许多电气特性确实由软件控制,但软件行为可能存在不确定性(如程序跑飞)。设计者必须确保,无论软件做出何种非预期操作,硬件都不应在短时间内发生永久性损坏。这意味着需要从硬件层面考虑异常状态的保护。

误区三:用户操作错误发生问题,就不能怪我了。
分析:要求用户严格按手册操作是对的,但用户是人,难免会犯错。我们的设计不能因为用户按错一个键就死机,插错一个接口就烧毁板卡。必须对用户可能犯的各种错误加以防护,例如防反接、过流保护、防静电等。

误区四:这板子坏掉是因为对端的设备出问题了,不是我的责任。
分析:对于所有对外硬件接口,必须有足够的兼容性和鲁棒性。不能因为对方信号异常,就导致自己的设备彻底罢工甚至损坏。对方异常应只影响与之相关的局部功能,设备其他部分应能继续工作。一旦异常接口恢复,设备也应能立即恢复正常。

这些经验教训源于大量工程实践,涵盖了从计算机体系结构到电路板布线的多个层面。硬件设计是一个权衡的艺术,需要在成本、性能、功耗和可靠性之间找到最佳平衡点。希望这份总结能帮助各位开发者在云栈社区或其他技术平台上交流时,拥有更严谨的设计思维。

电量从1%充电到100%的动画




上一篇:嵌入式开发实战:8个C语言实用代码片段解析与应用
下一篇:IntelliJ IDEA 2025.3 统一发行版发布:八大新特性详解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-28 19:08 , Processed in 0.342683 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表