打印

一个上拉电阻引发的**

[复制链接]
2763|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liwsx|  楼主 | 2012-4-24 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在板子上,FPGA与ASIC之间的是以“异步”方式工作。双方一问一答。前面问的事有了答复,才接着问下一件事。过期不答,就要中断报警。对FPGA发来的每一个读写要求,ASIC都应该发回一个应答信号(ACK)。正常的ACK应该是一个负脉冲,宽度为一个时钟周期。可是我现在看到的却是另一番奇怪的情景:ACK脉冲迅速降到低电平,一个时钟周期后,却没有跳回到高电平,而是循着一条漫长的RC充电曲线返回,远远看去成了一个锯齿波。

难怪FPGA读出的数据要慢几拍!

FPGA在检测到ACK信号的负跳变后,就进入等待状态。一旦ACK回到高电平,就开始按规定的时序发送或读取数据。现在ACK产生了负跳变,却迟迟没有返回。FPGA则就像苏文茂的相声里说的那个老头儿,痴痴地等着楼上掉下的第二只靴子,却一直没有动静。老头儿没听到靴子响不敢睡觉,FPGA没看到期待中的高电平,也不敢造次,不能进行下一步的操作,被“干”在这儿了!

严格地说,FPGA楼上的第二只靴子还是掉下来了,只是晚了些。因为ACK电平的恢复虽然慢,但毕竟还是回来了。鬼使神差的是这个恢复时间并没有超过规定的时间间隔,所以FPGA也没把它按“超时”处理,产生中断。

“哥们儿不就是晚来了一会儿吗,你还动真格的?真要打911报警呀!”
“但你可是把我坑苦了!你不是有上拉电阻吗?怎么还这么磨磨蹭蹭的!”

这个ACK信号线上是应该有一个上拉电阻的。在ASIC一旦放弃对它的低电平驱动后,电源会经过这个上拉电阻对其快速充电,使之回到高电平。如果没有它,这个充电过程就要经过其它回路,其时间常数要远大于正常情况。所看到的结果就是这个德行。由于ACK的恢复周期拉长,返回的数据也就姗姗来迟。而测试平台只是进行功能检查,读写的速度要远低于实际系统的情况,对这种延迟不敏感。在系统中进行手动读写时,因为是手敲命令,更慢,当然也发现不了。

莫非我记错了?再翻ASIC的技术文件,没错呀!上面明明白白写着ACK输出端内部有上拉电阻啊!难道是做ASIC的那帮小子偷工减料?我得找他们!

ASIC的总体负责人叫戴维。他也是当年S公司留下来的几只大鸟之一。戴维和电影里的那个骑着扫帚乱飞的小男孩是一个地方的人。却没有印象中那儿的人的刻板。为人很热情幽默。据他说,当初离开那儿来这儿,就是因为受不了那里的沉闷和拘束。尤其痛恨的就是动不动就要西装革履打领带。现在除了说话还是舌头根儿发硬的哈利波特味儿,与其他人别无两样。




我风风火火地找到他:

“您老人家在那个ACK管脚上到底放没放上拉电阻啊?”

“哦,我得查查……”他倒是不着急。

过了一会他来到我这儿,靠着墙不紧不慢地说:

“我们的确有一个上拉电阻在那……”

“噢……”

“不过……”

“什么?”

“……那个电阻有效时间只有一个时钟周期……”

“嘛玩意儿?一个时钟周期?!您老这是嘛路子?”
……

费了好大的劲,我才从戴维的解释中明白点儿意思。

这个ASIC是由C公司自己设计的,但生产却要由IBM代工。就是现在那些“Fabless”公司常见的做法。要由别家公司代工,芯片的设计在一定程度上就要迁就代工公司的工艺要求,还要在性能和成本之间折中。在芯片内部,电阻实际上都是由处于各种状态的CMOS单元构成。ACK这个信号所处位置,要构成一个完全意义上的上拉电阻有些困难。于是就因陋就简用了一个逻辑代替,而且只在ACK处于低电平的状态下开通,以确保能出现一个负跳变。剩下的他们觉得无关紧要,不影响其他性能,因为很容易在板子上弥补。

所以说,技术文件上说有上拉电阻并没错,不过嘛……

听了这些,我不禁仰天长叹:这可真是IBM做的片子,真有大爷的风范!只管一个时钟周期,到点儿拍屁股走人。留下一个烂摊子要我来收拾。

到现在,原因已经彻底清楚了:区区一个电阻的事!因为它只有效一个时钟周期,驱动过后,ASIC的ACK端子就成了开路状态,只能靠FPGA一头的输入端一点儿微小的漏电流充电。等它再回到高电平,黄花菜都凉了!

想我半世“英名“,在这行儿里混迹多年,也算个吃过见过的主儿。没想到今天栽在一个不起眼的上拉电阻手里!天理何在?!

现在,楼上的那只靴子倒是掉下来了,可我还能睡吗?

相关帖子

沙发
liwsx|  楼主 | 2012-4-24 10:32 | 只看该作者
使出吃奶的劲儿找出的毛病,解决起来倒是轻而易举。虽然板子上没预留上拉电阻的位置,但是所用的FPGA支持在它的IO管脚上可以选择开通上拉或下拉电阻,只要在它的合成限制文件中指明即可。

急忙修改了FPGA,加上这个电阻。样机改好后,不敢再大意,又重新测试了一遍,确认正常。这时早已过了下班时间。我径直把样机拿到机房,插到软件组用的机架上,接好光缆,确认面板上相关的指示灯转为绿色后,才离开。

软件的那个哥们已经走了。我给他发了电邮,通知改动情况以及现在样机位置和状态,告诉他可以接着试了。我相信他一定在网上挂着,可以看到。

前方道路上的暗堡已经清除,现在,就看他的了!

两个小时后,我在家里收到了他发来的电邮。标题栏里写了个大大的“PING”。打开邮件,是他从终端上拷贝下来的测试结果,满篇的惊叹号看得我眼睛发花,心怦怦直跳……已经不用再去读他写的是什么了。

PING了!

向克丝蒂通报这个结果时她已经知道了。没有祝贺之类的表示,她反而对我发出了一连串的质问:

“为什么解决这样一个问题用了这么长的时间?”

“为什么没有让戴维他们复核一下你的FPGA设计?”

“为什么在设计中没有考虑到这些情况?”

“……”?

“……”?

这些天攒在她哪儿的那点儿火,终于有机会发出来了!

“对不起,这个结果得记到你今年员工考核的记录中去!”最后她说。

……

公司每年都要对员工的表现和成绩进行考核,半年小结,全年总结。用“低于期望”,“团队主体”,“优异表现”等三级来划分各项考核项目。考核的结果对奖金,工资以及级别晋升都有影响。

我没有分辨。尽管她的质问并不都在理。

虽然没有让戴维他们复核FPGA的设计,但是我们已经进行了全面的功能模拟。这要比人工检查Verilog代码要更全面彻底。

因为是功能模拟,像上拉电阻这类的东西就只是在相应的端口简单地设一个“1”, 反应不出这种“只有效一个周期”的情况。自然也发现不了这个问题。

“不是我们无能,而是这个电阻太狡猾……”

但说这些都毫无意义。让一个上拉电阻耽误了这么多天,真是“窝囊”的可以!今天的结果,和原来的期望相差太远。可以用“惨胜”来形容。无论对她,还是对我,都难以接受。

几天后,按惯例又举行了“PING party”。 但我却没有以往的兴奋。冰激凌吃到嘴里感到索然无味。

这本来应是一个多星期之前就吃上的!

看着周围谈笑的同事,我却笑不出来。有人前来说一句“Congratulations!”,我也不知回答什么是好。

我突然想起了美国电影“遥远的桥”中那个整天叼着雪茄的美国佬:

这个美军101空降师的上校,带着部队赶到了那座预定抢占的大桥桥头,却因一步之差,眼睁睁的看着德国人把它炸成了碎片。他对部下连哄带骂,对友军连求带吓,费劲九牛二虎之力,总算把桥又架了起来。可是已经比原订计划整整晚了六个小时。看着桥上隆隆通过的车队,欢呼的士兵,他却笑不出来,铁青着脸,骂了一句:“Shit!”

“……一个上拉电阻!”,我愤愤地想着。

几个月以后,到了员工考核总结的时候。在克丝蒂给我填写的考核表格中,我并没看到她说过要写的东西。多数考核项目都是“团队主体”的水平,有几项还给予了“优异”的评价。她还说,我现在的工资水平已经处于这个级别的上限,调整空间不大了。她已经着手申请给我调整级别,这样,有利于以后的涨工资……

谁都有着急上火的时候,她能这么做,就还是个好同志!对不?至于以前说过什么,咱就甭计较了吧!是吧?呵呵!

 

不过,这个上拉电阻的事,我算记住了!

作者:电子工程专辑博主merlin07
来自电子工程专辑

使用特权

评论回复
板凳
Backkom80| | 2012-4-24 11:31 | 只看该作者
哈哈哈哈,:handshake,
吃过同样的亏,
嘻嘻,不过不是下拉电阻,
异步信号经过一个电阻后,沿变的非常平缓了,
FPGA检测这个信号的时异常。
:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

221

帖子

0

粉丝