数字IC设计的四重境界

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




编者按:4月份,我在上海出差时和一个译者聊天,他提到自己的老板对数字设计成长阶梯一些看法,谈了几个点,我觉得有些道理。上海出完差,我到苏州和一个素未谋面的老朋友见面,我把这个问题又抛出来,让他谈谈自己的想法,于是就有了这篇文章。当然,这篇文章只是抛砖引玉,欢迎大家参与讨论,发表不同看法。本文的作者(前面提到的素未谋面的老朋友)系苏州睿晟的一位研发经理,他带的几条产品线在全球市场都处于领导地位,这篇文章算是我向他邀约的一篇稿子。

数字设计工程师成长阶梯如下:

  1. 建立数字电路设计的概念:先电路,后代码,RTL是用来描述电路的,而不是用来设计电路的。

    HDL的正确翻译是”硬件描述语言”,不是”硬件设计语言”。刚刚走出大学的学 生,有可能还没有到达第一阶段。因为在学校做课题,一般是先分析功能,然后就开始代码设计,拼拼凑凑,通过仿真来调整代码,最终”凑合”成一个可以运行的 代码。如果采用这种方式设计电路,表示自己还没有入门。回想自己当初进入工作之前也是这样,喜欢倒腾代码,写程序,能够用仿真工具跑出自己心仪的波形,就 很开心。后来在公司工作,才慢慢意识到自己根本就没有入门,没有理解数字电路设计的根本。

  2. 掌握基本的设计电路设计方法和基础知识,可以独立设计验证基本模块单元。

    数字电路设计方法流程如下:

    1. 先确定重点需求:需求不可能事先全部确定,大概70%左右重点需求确定下来就好。
    2. 确定系统架构和基础算法
    3. 划分子模块,确定重要界面
    4. 模块设计:清晰界面定义,确定重要信号
    5. 设计重要状态机,设计重要讯号的时序图
    6. 编写RTL代码
    7. 验证模块,优化。

    《注》:RTL代码编写在整个设计过程中占用的时间应该不是很多,反而是其他步骤需要花更多的时间。

    数字设计基础知识分两大块:运算和控制。

    运算包括基本的加减乘除等各种运算的设计,各种加法器,乘法器的结构和优缺点。对二进制码制(原码,补码)有深入理解。

    控制包括状态机的设计优化,流水线(PipeLine), 时序重排(Retiming),Folding/Unfolding等等。这些不同技术对电路速度、面积、功耗的影响。

    控制部分还需要加上异步电路设计基础。如何做不同时钟域的信息交互。

  3. 精通至少一个复杂的协议,比如USB, PCIE, SATA, MIPI, DDR, NANDFLASH, MPEG, H264等,解决和此协议相关的模块设计调试问题。这个层级上主要掌握的是处理复杂性的问题。协议分层,不同的抽象级别对复杂问题的逐步简化。
    1. 熟悉一个协议,能够接触到相对复杂的系统,物理层,Link层,协议层等等。
    2. 掌握一些标准的Analog/Digital接口协议,比如UTMI、PIPE、DFI等。能够借鉴这些Interface定义的思想,引入到自己的设计界面中去。
  4. 熟悉整体SOC架构,总线,模拟数字接口,知识面由精逐步扩展,越来越广。能够独当一面的负责整体IC规划。
    1. 需要掌握计算机体系结构,总线外设的优化
    2. 掌握信号处理知识。
    3. 掌握一些流行算法。
    4. 熟悉整个设计流程,扩展到后端。

这四个阶梯实际上也不是完全一步一步的,互相有可能有交叠。有的人第二阶段知识并不是很扎实,就可以跳入第三阶段,甚至第四阶段。不过没有第二阶段的扎实基础,后面阶段的发展有可能会遇到瓶颈。很多时候是,在跨入第三四阶段的时候,同时也在巩固第二阶段的基础内容。

第三四阶段和项目相关性很大,而前两个阶段和项目无关。公司社会招聘一般只会关注到后两个阶段的实力,而不会考虑前两个阶段,因为社会招聘 是要找有经验的工程师。 而校园招聘一般比较看重前两个阶段,因为到公司之后有时间培养。公司培训的重点应该放在第一和第二阶断,后面两个阶段的发展靠个人在前两个阶段的背景下充 分发挥了。

(3个打分, 平均:4.33 / 5)

雁过留声

“数字IC设计的四重境界”有8个回复

  1. laotuinbay 于 2013-05-30 7:03 上午

    总结的很好。但感觉少点东西。数字IC设计,如果只限于次,还不够。为什么搞SOC? 那是因为要用软件来解决更复杂的问题。所以SOC一定有Processor. 当前SOC走向多核,低能耗,象ARM的big-LITTLE. 如果你走出框架,一定要懂软件和用户真正的需求。如此,你的IC设计就有更高镜界了。

  2. laotuinbay 于 2013-05-30 7:19 上午

    Realteck有些好东西。但远非业界领袖。
    In the kernel source code for the FreeBSD operating system, one device driver file goes as far as calling the 8139 Fast Ethernet card “probably the worst PCI ethernet controller ever made”, noting that “the RealTek 8139 PCI NIC redefines the meaning of ‘low end.’ The 8139 supports bus-master DMA, but it has a terrible interface that nullifies any performance gains that bus-master DMA usually offers.”[3] – Wikipedia.

  3. 小耳朵蜗牛 于 2013-05-30 7:30 上午

    芯片设计的目的还是要应用,最高的境界还是要熟悉某一个应用领域,深刻理解客户最需,懂得产品设计,在功能要求与硬件实现开销间做出均衡后,才能定义出芯片设计的目标。同时把握前瞻性的技术,规划出后续芯片设计的ROADMAP。
    剩下的就是执行层面的事情了。

  4. 小耳朵蜗牛 于 2013-05-30 7:45 上午

    对于执行层面的理解有两个方向:
    (1)宏观方面,能够定义出芯片实现的架构,一定兼顾后端实现的可能性,以及后端的工艺库等。如果是SOC的话,还要熟悉SOC的架构。相比之下,具体到某个协议,如DDR等只是芯片实现的一个功能而已。
    (2)微观方面,能够写出一份优秀的代码。写代码很容易,但是写出的代码硬件电路小,便于验证,可读性强,却是要花很多功力去积累的。
    个人之见,望大家拍砖,呵呵。

  5. laotuinbay 于 2013-05-31 12:12 上午

    小耳朵讲的的确深刻。

  6. tao 于 2013-05-31 6:44 下午

    很奇怪mpeg/h.264会加到一大堆硬件相关的协议里。

  7. melor 于 2013-06-02 12:56 上午

    发现很少公司招芯片方面的实习生呀!我今年暑假就要实习了,可以实习一年!有招实习生的吗?

  8. 风清子 于 2013-06-04 8:18 下午

    总结得很到位,弯曲就是干货多,首席是不是该考虑弄个APP出来了?