一波三折——危险的“未分配”引脚

深入解析LPC4370三核MCU:架构、外设与应用实战 在嵌入式系统设计中,微控制器(MCU)是执行计算、控制和通信的核心。其性能取决于内核架构、外设集成与系统资源管理。多核异构架构通过任务分工,能有效解决实时性与计算密集型任务的资源冲突问题,提升系统整体效率。这种设计在工业自动化、电机驱动和高速数据采集等场景中价值显著,尤其适用于需要同时处理复杂算法、实时控制和多路通信的场合。本文以NXP LPC4370为例,剖析其ARM Cortex-M4与双Cortex-M0组成的**三核异构**系统如何协同工作,并重点探讨其**高速ADC**、丰富通信接口及电源时钟管理 阅读详情

  第一折。半个月前,美国的同事对当前的一个工程进行了编译,并提交二进制文件(FPGA配置文件)给软件工程师进行集成。结果该二进制文件导致了整个系统的崩溃:FPGA二进制文件刚下载完毕,整个系统就不工作了。这一事件导致了美国FPGA工程师一整天的停工和系统恢复。Kevin给出的分析结果是,FPGA给出的中断信号有问题,该信号经过CPLD转发到CPU后导致CPU反复跳入中断,造成系统崩溃。后来,因为经过重新编译的二进制文件没有引发类似现象,该问题就被当作是一个偶然事件被忽略了。 riple

 

    第二折。上周的某一天,在我们这边,类似的现象“终于”也发生了。由于时差的关系,我们没能得到美国软件工程师的及时支持。眼瞅着手上仅有的两个系统陷入瘫痪,工作不能继续,没办法,只能自己硬着头皮调试一下看看。系统崩溃后,嵌入式Linux操作系统的响应异常缓慢,通过网络登陆无法进行调试和控制。幸好还有串口调试台,通过串口可以看到系统反复打印出对总线上特定地址范围的数据写入失败。由于该现象发生在FPGA文件下载完成后,我通过在系统启动后FPGA下载前杀掉相关进程的方法阻止了系统的崩溃:只要不下载FPGA文件,或者替换为旧文件,系统就不会崩溃。 riple

    接下来,我试图找出FPGA引发系统崩溃的原因。中断信号引发系统崩溃的说法首先被排除了,原因是FPGA的中断产生逻辑电路相当标准,不可能产生随机的错误行为。问题缩小到FPGA连接到CPU的双向数据总线上,这里是除中断外唯一一个由FPGA驱动到CPU的逻辑电路。我的推论是,由于该FPGA工程没有对CPU相关的输入输出引脚进行时序约束,两次编译会导致双向数据总线的输出使能信号的响应差异,这一差异进一步影响了FPGA驱动双向数据总线的速度差异,在某些情况下,FPGA或早或晚地驱动了总线,引发了总线驱动冲突,导致CPU对总线上其它设备的访问失败。经过对所有CPU相关的信号进行时序约束后,编译的二进制文件没有引发系统崩溃。 riple

 

    第三折。问题并没有这样得到解决。两天后,在又一次对该工程进行编译后,一模一样的问题又出现了。去除我先前给工程施加的时序约束后,问题反而没有了。不加约束会错,加了约束也会错,看来约束并没有作用到问题的本质上。唯一可以得到确认的结论是:两次FPGA编译的结果是有差异的,特定电路的编译结果并没有得到时序约束的有效控制;问题随机出现,但是表现一致。 riple

    这一次,为了定位导致问题的具体逻辑电路,我必须对出问题的编译结果进行分析和实验。二进制文件是最终的编译结果,时序分析报告也是编译结果,但是这两个结果要么不可分析,要么包含了太多的信息而无法分析。我唯一可以进行分析和实验的对象就是布局布线(P&R)之后的底层网表数据。 riple

    通过RTL视图,我逐个定位了CPU相关引脚在Chip Planner视图中的位置。通过在Resource Property Editor中修改特定LE的对外连接和内部逻辑关系,我把所有可能驱动CPU的相关逻辑都关闭了:中断信号被禁止了,双向数据总线的使能被禁止了。通过执行Check & Save All Netlist Changes,我在不影响所有其他逻辑的功能和时序特性的情况下,得到了一个完全不会驱动CPU总线相关信号的FPGA二进制文件。出乎意料的是,该二进制文件下载后,系统依然崩溃。 riple

 

    到了这一步,我找遍了“路灯下所有能找的地方”,只能向其他方向“胡乱”摸索了。我尝试了给来自CPU的控制输入信号,包括所有的地址线,增加上拉电阻的方法,也没有成功。 riple

    经过了类似的一系列摸索,最终我在Pin Planner视图中发现了蹊跷:在该工程中竟然存在没有分配布局位置的输出引脚,而这些输出引脚在该项目中并没有被实际的输入逻辑驱动,这些引脚被Analysis & Synthesis工具缺省地连接到了逻辑“0”上。通过比较成功和失败两次编译结果中给出的最终引脚分配报告,我发现,这些没有得到位置约束的引脚竟然可能随机出现在任意的空闲引脚上。 riple

    通过进一步分析,在导致系统崩溃的编译结果中我最终找到了答案:一个没有逻辑驱动,也忘了分配布局位置的输出引脚被Fitter工具随机分配到了FPGA没有用到(也没有位置约束)的一根CPU地址输入线上,这根地址线就被短路到了“0”电平上,进而导致CPU外部总线上特定地址范围不能被CPU访问到,最终引发了系统崩溃。 riple

 

    通过这一问题的解决,我获得了以下几点认识: riple

1. 没有约束位置的引脚是很危险的,尤其是输出引脚。随机分配的结果很可能是灾难性的。所以,PCB原理图上的所有引脚,即使在FPGA内部没有被用到,也最好如实地加以约束。 riple

2. Quartus II提供的ECO工具,即“增量式布局布线后网表修改功能”非常好用。既保留了上一次的全编译结果,还缩短了编译时间。用来做快速实验(quick and dirty)最合适不过了。 riple

3. Resource Property Editor中对输出使能信号的控制方法。(乍看起来,逻辑上的连接与示意图上的连接正好相反,其实不然。需要注意。) riple

4. 为什么会存在未分配的输出和输入引脚?这是因为该工程还存在尚未实现的后期功能。这些引脚就是给以后开发留下的,由于我们太专注于眼前要实现的功能而被忽视了。 riple

5. 为什么会存在未用到,却实际连接了的地址线?这是PCB设计上的“冗余设计”。这样的冗余设计在该项目中还有很多,有一些还真在关键时刻给了我们FPGA开发上的便利。 riple

6. 既然上述两个问题都有合理的解释,为什么还会出现这么不合理的错误?原因之一是在PCB和FPGA设计上缺乏完善的设计文档,PCB设计者的意图没有有效传达给FPGA设计者,而FPGA设计者之间也没能充分交流。原因之二是FPGA开发流程上缺乏被称之为“Peer Review”的设计评审和设计质量保证措施,一个显而易见的错误就被这样忽略并遗留了下来。



转载自:http://blog.ednchina.com/riple/191687/message.aspx

fpga调试笔记-未分配的管脚 调试FPGA时遇到的小问题,做笔记以示记录备忘;这篇调试记录其实并不是什么大问题,但往往也是很容易忽略的隐患,而一旦由于粗心忽略了未分配引脚的隐患,则往往会为我们的设计带来巨大隐患,而且不易查找错误。具体是什么情况,请见文档内容。 立即下载

相关推荐

普通人也能看懂的Transformer源代码解释(PyTorch)

Transformer源代码解释之PyTorch篇 章节 词嵌入 位置编码 多头注意力 搭建Transformer 在这里插入图片描述 词嵌入 Transformer本质上是一种Encoder,以翻译任务为例,原始数据集是以两种语言组成一行的,在应用时,应是Encoder输入源语言序列,Decoder里面输入需要被转换的语言序列(训练时)。一个文本常有许多序列组成,常见操作为将序列进行一些预处理(如词切分等)变成列表,一个序列的列表的元素通常为词表中不可切分的最小词,整个文本就是一个大列表,元素为一个一

qq_50974223的博客 4167

危险的未分配引脚(FPGA)

一波三折——危险的“未分配”引脚 第一折。半个月前,美国的同事对当前的一个工程进行了编译,并提交二进制文件(FPGA配置文件)给软件工程师进行集成。结果该二进制文件导致了整个系统的崩溃:FPGA二进制文件刚下载完毕,整个系统就不工作了。这一事件导致了美国FPGA工程师一整天的停工和系统恢复。Kevin给出的分析结果是,FPGA给出的中断信号有问题,该信号经过CPLD转...

weixin_34174422的博客 479

IPSec Over GRE和GRE Over IPSec技术

IPSec Over GRE 和 GRE Over IPSec 一. 技术介绍 IPsec     主要作用是对数据进行加密,因为他能提供所有有时候被单独用作实现加密的一种方法!IPsec建立的是一个逻辑隧道,并不是真正意义上的隧道!并且不能提供路由功能,因为IPsec不支持非ip流量,也不支持广播(组播)! GRE     (通用路由封装)能很好的提供一个真正意义上的点对点的隧道,GRE是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、Apple Talk、IP等)的报文进行封装,使封装后

qq_56228347的博客 9870

FPGA下载前一定记住要将未分配引脚置tri-state:未雨绸缪

FPGA下载前一定记住要将未分配引脚置tri-state:未雨绸缪 以前听老师在课上提过,后来Tutor在lab上即使连最简单的project也要将未分配引脚置tri-state。作为一个初出茅庐的小菜,我并不知道可能造成的危害和不确定性有多大。不过这两天在做一个project中,需要led提示。一开始led焊反了,怎么都点不亮(地线接在了FPGA一头:万用表调到二极管,黑色在led的FPG

程序猿Boris--CodeMonkey Boris 3958

S32DS新建工程、编译调试下载、导入工程详细介绍

新建了一个工程之后,下面简单介绍下基本的UI界面。其中最左下角那个是界面,这个界面很重要,是图形化配置界面,然后可以根据这些配置自动生成代码。其中,左边那些配置文件,都是系统帮我们创建好了的,我们其实可以直接用就行。有PE工具的调试,以及Jlink工具的调试。我目前使用到PE工具调试可以查看寄存器值,而Jlink调试查看不了寄存器值。连接了开发板之后,点击Debug就可以吧程序下载到芯片上了,而且可以进入到调试界面。

luobeihai的博客 2万+

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 443

chip planner使用

wangyanchao151的专栏 3626

【GlobalMapper精品教程】084:tif(tfw)、jpg(jgw)、png(pgw)的区别与联系

摘要:本文介绍了TFW、JGW、PGW等地理参考文件的基本原理和应用。这些文件通过简单的文本格式存储栅格图像的地理坐标信息,适用于平面坐标系下的GIS数据处理。文章详细说明了文件各行的含义,并提供了在ArcGIS和Globalmapper中生成这些文件的具体操作步骤,包括导出TIFF、JPG、PNG格式时勾选生成对应坐标文件的选项。这些文件虽然简单易用,但仅适用于平面坐标系,且功能相对有限。配套视频教程提供了更详细的操作演示。

智慧空间实验室 2401

As input tri-stated

前些日子正好看到了riple兄的《一波三折——危险的“未分配”引脚》一文,颇受启发。正好最近也遇上了类似的问题,也可谓一波三折,还好最后摆平了,要不煮熟的鸭子可就要飞了。 最重要的是又让自己长经验了。以前培训的时候就听老师提到FPGA设计中闲置的管脚一定要置输入三态(As input tri-stated)。而且印象深刻,算是牢记在心,只可惜没有活学活用,知道有危害...

weixin_30687811的博客 623

第四章节 Qt字符串QString详解

QString 的使用方式和 C++标准库的 std::string 字符串的非常相似。

m0_65635427的博客 890

Xinference新手指南(一个命令直接安装成功)

对于新手,必须得学会使用docker部署,这是基本功!这里就不过多去介绍了,如果评论要出教程的话,以后再出了。

Ven%的博客 818

闲置管脚引一定要置输入三态(As input tri-stated)

fpga 2010-04-13 16:45:30 阅读9 评论0 字号:大中小 前些日子正好看到了riple兄的《一波三折——危险的“未分配”引脚》一文,颇受启发。正好最近也遇上了类似的问题,也可谓一波三折,还好最后摆平了,要不煮熟的鸭子可就要飞了。 最重要的是又让自己长经验了。以前培训的时候就听老师提到FPGA设计中闲置的管脚一定要置输入三态(As input tri-s...

weixin_30485291的博客 941

YOLO系列算法改进 | C2PSA改进篇 | 融合FSD频域结构解耦模块 | 双域解耦感知,兼顾全局亮度与局部纹理,适应红外小目标与边缘部署场景 | ICME 2026

YOLO系列算法改进 | C2PSA改进篇 | 融合FSD频域结构解耦模块 | 双域解耦感知,兼顾全局亮度与局部纹理,适应红外小目标与边缘部署场景 | ICME 2026 (以YOLO26最新目标检测模型为基础,利用C2PSA_FSD创新模块进行改进)

2502_91881744的博客 315

实践出真知:FPGA未分配管脚的潜在风险

当我们将一个数字系统设计烧入FPGA时,会后

jim7424994的专栏 5234

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基于TimeQuest Timing Analyzer的时序分析笔记(三)

基于TimeQuest Timing Analyzer的时序分析笔记(三) 本篇内容在前篇基础上介绍优化,并介绍基于chip planner查看更实际的逻辑连接。 上一篇是对时钟进行了设置,在时序优化时通常采用加约束或者修改代码插入寄存器方法,改为流水线结构;优化代码最主要方法就是优化关键路径。 首先声明:内容只是简单介绍时序优化中的方法流程,工具使用及查看时序报告,介绍层面没有深入,需要更多学习的还需多搜集资料加以研究。也可以观看小梅哥时序视频学习 下面来简单介绍 (一)优化介绍 对代码进行全编译,查看时

qq_38318540的博客 1193

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

预先布图规划

为了准备对设计使用增量编译,设计者首先需要对设计进行分析,并决定哪些层次结构边界可以被定义为独立的设计分区,同时需要确保设计的层次和源代码的创建会支持这种设计分区。设计者在quartusII软件中对设计进行设计分区的分配约束,用以指定哪些层次模块可以被作为设计分区被独立编译,然后会为每个分区都会单独创建网表。 网表是指设计的综合后和布局布线后的数据库。 有了首次编译,在随后的设计编译过程中,设计者...

weixin_43727437的博客 386

vivado中未分配引脚的时序处理方法

set_property SEVERITY {Warning} [get_drc_checks NSTD-1] set_property SEVERITY {Warning} [get_drc_checks RTSTAT-1] set_property SEVERITY {Warning} [get_drc_checks UCIO-1] 将这三句添加到时序约束文件(没有创建一个),即可解决Viva...

塔克拉玛与大兴安岭的博客 2547

FPGA学习之路——引脚不可分配问题

在给FPGA分配引脚时,出现错误 Error: Can't place pins assigned to pin location Pin_101 其中ALTERA_nCEO是FPGA配置用的芯片,可以不用的,所以可能通过Assignents->Device->Device and Pin Options->Dual-Purpose Pins中设置ALTERA_nCEO为Use as regula

电子芯的专栏 5786

【STM32】 ADC 完全指南:从模拟信号采样量化到五大架构原理

本文系统介绍ADC核心概念与五大主流架构。模拟信号具时间与幅值连续性,需经采样(满足奈奎斯特准则防混叠)、量化(引入±1/2LSB误差,SNR≈6.02N+1.76dB)、编码三步转为数字信号。重点解析Flash(并行高速但受限于比较器数量)、SAR(逐次逼近,低功耗适合MCU如STM32)、双积分(高精度抗工频,用于万用表)、流水线(高速吞吐)及Σ-Δ(高分辨率,靠过采样与噪声整形)五类架构原理、优缺点与应用场景。强调分辨率≠精度,选型本质是速度、精度、功耗与面积的权衡。

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 484

嵌入式:2.STM32底层基础(存储、寄存器、时钟、总线、GPIO、寄存器点灯)

存储系统用来存放程序、数据、设备状态,核心三大作用:存放程序代码、保存运行时数据(全局、局部、栈、堆)、数据持久化(比如W25Q64 Flash,可以搭配文件系统)。

2401_86731574的博客 348

基于STM32的智能浇花系统

本文设计基于STM32F103C8T6的智能浇花系统,集成DHT11、YL-69、MQ-135、GL5528四类传感器,实现温湿度、土壤湿度、CO₂浓度与光照的实时监测。系统支持自动、手动、远程三模式联动控制,通过ESP8266-01S以MQTT协议上云,配合手机APP实现数据可视化与远程指令下发。硬件采用多通道ADC采样、继电器驱动与OLED显示,软件实现精准时序控制与双向通信。测试表明系统稳定可靠,完整覆盖“感知—控制—云联”IoT全链路,具备高扩展性与工程实践价值。

weixin_45732499的博客 171

35ms 抗量子握手:ESP32-S3 跑通 ML-KEM-768

ML-KEM(Module-Lattice-based Key Encapsulation Mechanism)基于格密码,是 NIST 2024 年正式发布的 FIPS 203 标准。选 768 参数级(而不是更低的 512)是因为它被广泛视为"长期安全"档位——CATAPULT 等行业联盟也推荐 IoT 长寿命设备直接上 768。密钥交换的抗量子性。现有 IoT 设备大量使用 ECDH,量子计算机(Shor 算法)一旦可用,ECDH 直接失效。

嵌入式单片机实验室 220

网口ps端--基础知识--调试(1)--deepseek

你现在卡住,是因为这每一层(硬件、驱动、lwIP 协议、IP 地址)中,只要有一层不对,网口就不通。物理层:看灯。灯亮说明线没问题,PHY 没死。MAC 驱动层:看串口打印。有没有打印出Link Speed?如果卡在自协商,说明你的 PHY 驱动还没配好。lwIP 协议层:如果底层通了,IP 也配对了,你调用udp_recv注册了回调函数,当电脑发来 UDP 包时,lwIP 会自动把数据包拆开,送到你的回调函数里。你之前一直在改,就是一直在死磕第 1 层和第 2 层。

AlibabaApple的博客 99

S021D-基于STM32单片机自动追光系统(舵机)【Proteus仿真+Keil程序+原理图】

设计以STM32单片机、四路GL5516光敏电阻、两路SG90舵机、OLED、按键搭建双轴追光云台系统。支持手动/自动模式切换,按键可调节追光灵敏度并保存至FLASH;自动模式依靠四路光敏采集光照差值计算方位,驱动舵机跟踪光源,OLED实时显示云台角度与工作状态。

51单片机实物制作DIY设计 185
上一篇: ccs3.3调试烧写时各种报错解决方法
下一篇: ubuntu提示waiting fo jockey-backend to exit的解决方法
loopinvariant
博客等级 码龄15年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值