FPGA设计中遇到的奇葩问题之“芯片也要看出身”(三)

首页 > 新酷 > 程序世界 > 本文
2018年05月17日 05:42 | 搜狐 暮云
接上文 工程师都知道,寻找好板和坏板之间的“差异”是定位问题的利器之一啊。因此当时虽然没有欣喜若狂,但是也隐隐看到了一丝曙光。 我冲出实验室,一溜小跑去了焊板实验室。找到了焊板的同事,让他现场给我焊两......

原标题:FPGA设计中遇到的奇葩问题之“芯片也要看出身”(三)

接上文

工程师都知道,寻找好板和坏板之间的“差异”是定位问题的利器之一啊。因此当时虽然没有欣喜若狂,但是也隐隐看到了一丝曙光。

我冲出实验室,一溜小跑去了焊板实验室。找到了焊板的同事,让他现场给我焊两块单板,一块必须用产自大马的FPGA,一块必须用产自台湾的FPGA。那个老兄很奇怪的看了我一眼,然后又一眼。后来我才想明白估计我是第一个在乎芯片产地的怪咖。

我就站在他旁边,看着他工作,觉得时间过得奇慢无比。拿到了焊好的两块板子,又以百米冲刺的速度杀回实验室,隐隐约约听到有同事在抱怨:发哪门子神经,刮这么大的风。我以迅雷不及掩耳盗铃之势,先把台湾板子安装好,上电启动、加载、运行,果然是好的;拆掉台湾,换上大马板子,上电启动、加载、运行,果然出误码了。问题确诊了!为了保险起见,我从坏板和好板堆里各取了两块单板进行了验证,现象是一致的。

此时距离下班也就十几分钟了,我赶紧去了老大的工位,强压着鸡冻滴小心情,向老大汇报:“老大,告诉生产那边,发货只能用产自台湾的芯片,马来西亚的坚决不能用。我怀疑产自马来西亚的芯片的容差小,产自台湾的芯片的容差比较大。而设计本身肯定存在时序打擦边球的情况,导致使用产自马来西亚芯片的单板会出误码,而使用产自台湾的芯片则没有问题。到底是哪里的时序存在擦边球的隐患,我还需要进一步熟悉代码,寻找之而修改之而长治久安也”。老大难得的露出了笑容:“嗯,不错不错!这两周辛苦了,回去好好休息,下周全力解决问题。啊,对了,你该刮胡子了。”

周末跟老婆(那时候还是女朋友)去搓了一顿大餐,逛街,看电影,累得半死,但是心情那是相当的愉快。

我从实验室回到了工位,在感受人间烟火气的同时,全力看代码。认真的看了一整天之后,我发现前同事对于“同步”、“组合逻辑嵌套层次不能过多”等设计原则完全不care,隐患到处都是,要想彻底的解决这些隐患,只有一个办法:推倒重来。我去找老大说明了想法,老大说:“要不要这么夸张?劳资派你去解决问题,你解决问题就是了,搞这么大工程出来,有必要么?”我说:“老大,我以一个工程师滴半生清誉担保:如果不推倒重来,问题根本不能彻底解决。”老大无奈的挥了挥手,说话的同时目露凶光兼咬牙切齿:“是否推倒你来定。但素,市场那边给出的预测是最多三个月内,这块单板就会迎来发货高峰,到那时无论如何也要保证FPGA不出任何问题。你有信心滴干活?”“饿夫考斯啊老大,没有金刚钻,不揽瓷器活啊”,我心说:“你要是答应给我加五百块工资,没准儿我敢承诺一半的时间就给你搞出来”。

结果不到三个月,我的全套重写的代码就完成了,编译、加载、测试:不论是产自台湾的芯片还是马来西亚的芯片,完全没问题。老大不放心,特地多找了几块焊着马来西亚芯片的板子一遍又一遍的测试,结果仍然是no problem at all。

老大笑靥如花(港版那个),眼睛眯成了一条缝儿:“小样儿,行啊!”我只顾嘿嘿傻笑,结果忘了趁热打铁跟老大提加薪。曾经有一个机会摆在我面前,我没有珍惜。如果有重来一次的机会,我特么会加一个十万光年的期限。

过了没多久,Xilinx公司也发来了报告:由于马来工厂的某个车间顶部一个窗户没关严,导致车间纯净度不够,所以那段时间生产的芯片尽管各项指标都在合格范围内,但是都在边缘,从而容差能力都比较低。公司已经发现并做了相应处理,之后生产的芯片从一致性方面跟台湾产的芯片没有区别了。

Well,这就是我从业生涯中碰到的“芯片也要看出身”的“灵异”事件。给我的印象是如此之深,18年后我仍然记得清清楚楚。问题解决是在2000年的9月份,第二年,我惨遭表扬,获得了某公司的最高荣誉:XXXX奖。

后记:

1.真实问题定位的过程很痛苦,也比文中描述的要复杂,因为那批单板使用的FPGA芯片还有另外一个产地:韩国。在定位问题的过程中,台湾和韩国的芯片加载原同事的设计都没有问题,马来产的就不行。于是比对、比对、再比对,最终确定了问题出在马来产的芯片上。

2. 我重写后的设计完全不区分芯片的产地。采用原同事设计、已经发货的那批单板,使用产自台湾、韩国的芯片而暂时没出问题的,总量大概几千块吧,这些单板在条件发生变化时(比如温度变化、电压变化),出误码是必然的。好在那时候运营商对国产厂家都比较宽容,用服的同事找了各种机会,神不知鬼不觉的对这些单板上的FPGA重新加载了新版本,彻底消除了隐患。

3. 9000多行代码,我用了大概70个工作日进行了重写,计算开发效率,大约是130行/人天。实际上,我做过个人职业生涯的不完全统计:使用HDL开发FPGA,从全流程的角度来计算(从需求分析到最终发布),效率不会超过20行/人天,跟软件开发效率大致类似。当然,随着新的设计语言以及工具等方面的进步,开发效率会逐步提升是毫无疑问的。

4. 文档真的很重要、很重要、很重要。很多人会说:整个设计(模块)我闭着眼睛都能知道哪行代码是干嘛的,文档意义不大。但素,人的记忆是会衰退的。如果设计天衣无缝、没有任何问题,在整个生命周期里没有任何升级或者功能变动,那么文档也许没那么重要。但素,大家想一想,对于FPGA来说,上述条件全部满足的概率是不是和行星撞地球差不多?我几乎重写了整个设计文档,基本能保证文档描述的是西施,而设计至少是凤姐。

------

本文作者:隐达,阿里云资深专家,花名的意思就是做人隐,做事达。业余时间喜欢看美剧和读书,尤其是历史书;还喜欢喝点小酒侃大山,喝酒只喝啤酒和威士忌;酒量比较差,但是酒品还过得去。我在某通信公司工作了18年,其中十年的大规模FPGA/ASIC开发和系统设计,刚刚加入阿里云,负责FPGA/ASIC异构计算,So happy to be Ali Ren,很荣欣能在云栖社区和大家一起交流,学习!

  • 区块链技术开发公司教你怎样利用区块链项目打假
    目前,区块链项目被认为是传销、诈骗的居多,因为我们看不到具体落地的场景与应用。许多发行虚拟货币的项目方,没有白皮书、项目团队,只靠一张嘴说,自己用了区块链技术,就可以融资千万、甚至上亿。 随着BTC、...... 程序世界 2018-05-28 | 搜狐 暮云
  • 学习python去哪好?怎样快速掌握Python?
    来千锋Python面授学习已经一个多月了,仿佛行程才刚刚开始,但五分之一的时间就已经悄悄结束。放弃之前的专业转战计算机行业,其实也是一个很大的挑战,陌生的知识体系、陌生的思维方式,但庆幸的是在老师的详...... 程序世界 2018-05-28 | 搜狐 暮云
  • 重建渠道商价值,「搭搭云」让企业“低代码”开发各类主流应用软件
    双创时代伊始,中小企业如雨后春笋般崛起。他们同样需要相应软件来管理销售、市场、生产、财务、人事等各个场景。而目前世面上所提供的选择有两种,其中一种是价格便宜的标准化软件。但因为没有为特定企业定制化开发...... 程序世界 2018-05-28 | 搜狐 暮云
  • 网站日志你分析了吗?如何分析才是对的?
    做了SEO那么久,若是还不懂得日志怎么分析的SEOer,你看到了这里,你就知道我会悄悄告诉你的,日志分析就跟中医里面的把脉是一个道理,随时还是要给自己的网站把把脉,不要忘了开一个药方,给网站做一个诊断...... 程序世界 2018-05-28 | 搜狐 暮云
  • OpenStack温哥华峰会Day4日记:学在summit,玩在summit
    编者按5月21-24日,OpenStack峰会在温哥华如火如荼的召开,本届峰会已是OpenStack第17届全球峰会,参与人员近3000人,火热程度依然不减。那么在峰会的最后一天又有哪些热点值得关注...... 程序世界 2018-05-28 | 搜狐 暮云
  • 东北大学研究生:用强化学习玩Chrome里的恐龙小游戏
    【人工智能头条导读】Chrome 浏览器里面有一个小彩蛋,当你没有网络时,打开任意的 URL 都会出现一个恐龙小游戏(Dino Run),按空格键就可以跳跃。当然,直接打开 chrome//dino...... 程序世界 2018-05-27 | 搜狐 暮云
  • 利用Ajax提升网页渲染速度
    先来看看速度优化对比(这里用了 Django的 DebugToolbar库来查看状态) AJAX = Asynchronous Java and XML(异步的 Java 和 XML)。 AJAX 不...... 程序世界 2018-05-27 | 搜狐 暮云
  • 避免 Java 应用中 NullPointerException 的技巧和最佳实践
    来源ImportNew - 熊铎 Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键。俗话说“预防胜于治疗”,对于这么令人讨厌的空指针异常,这句话也是成立的。值...... 程序世界 2018-05-27 | 搜狐 暮云
  • 使用CMSTP绕过AppLocker的方法介绍
    CMSTP是一个与Microsoft连接管理器配置文件安装程序关联的二进制文件。它接受INF文件,这些文件可以通过恶意命令武器化,以脚本(SCT)和DLL的形式执行任意代码。它是一个受信任的Micro...... 程序世界 2018-05-27 | 搜狐 暮云
  • 学会这些,你才是一个合格SEO
    大多数新手,在学习SEO的时候其实是盲目的,也不知道自己学习到哪一步了,还有什么没有去学习,SEO不单单只是技术方面,它是一个综合性的技艺。可能很多人学习SEO,在学习了基础的网站搭建,写软文,关键词...... 程序世界 2018-05-27 | 搜狐 暮云
  • 关于淘点点面试中碰到的架构问题
    来源Ambitor , my.oschina.net/ambitor/blog/522227 之前面试淘点点的时候被问倒得一个问题至今牵挂,由于工作环境的限制,我没能接触到一些大数据量的并发工作,也...... 程序世界 2018-05-27 | 搜狐 暮云
  • .Net异步编程知多少
    1. 引言 最近在学习Abp框架,发现Abp框架的很多Api都提供了同步异步两种写法。异步编程说起来,大家可能都会说异步编程性能好。但好在哪里,引入了什么问题,以及如何使用,想必也未必能答的上来。 自...... 程序世界 2018-05-27 | 搜狐 暮云
  • 纯新手入门机器/深度学习自学指南(附一个月速成方案)
    原作Masum Hasan 问耕 编译整理 怎么入门机器/深度学习? 回答这个问题,最先要考虑的问题是你有多少时间? 准备用三个月入门,和想要一个月速成,肯定是截然不同的路径。当然我建议大家稳扎稳...... 程序世界 2018-05-27 | 搜狐 暮云
  • .NET中可空值类型实现原理
    为了让.Net中的值类型可以赋值为null,微软特地添加了Nullable类型,也可简写为T?。但是Nullable自身是结构体,也是值类型,那么它是如何实现将null赋值给值类型的呢? 下面通过自定...... 程序世界 2018-05-27 | 搜狐 暮云
  • 吐血推荐的10条建议!让程序员薪资上升一个level
    1. 想清楚,再动手写代码 刚入行的新手,不要因为展示自己的能力,拿到需求就迫切地就开始上手写代码,大忌! 2. 不交流,就会头破血流 团队之间最重要的就是沟通,不要因为自己不爱说话和沟通,造成需求理...... 程序世界 2018-05-27 | 搜狐 暮云
  • JavaScript 最终将在编程语言中占统治地位?
    Java 现在是大多数开发者都会使用的编程语言。网络效应会推动它成为有史以来第一个真正占统治地位的编程语言吗? 作者简介Anil Dash,他是 Fog Creek Software 的首席执行官,...... 程序世界 2018-05-27 | 搜狐 暮云
  • 第十三天 面向对象-final&static&匿名对象&内部类&包&代码块
    第十三天 面向对象-final&static&匿名对象&内部类&包&代码块【悟空教程】 第13天 面向对象 第1章 面向对象其他知识点1.1 final与static关键字1.1.1 final关键字...... 程序世界 2018-05-27 | 搜狐 暮云
  • C++ 协程的近况、设计与实现中的细节和决策
    摘要 讲述C++协程的近况、设计与实现中的细节与决策 时至2018年的今天,C++ 在互联网服务端开发方向依然占据着相当大的份额;百度,腾讯,甚至以java为主流开发语言的阿里都在大规模使用C++做...... 程序世界 2018-05-27 | 搜狐 暮云