老莫

数字集成电路与系统MooC回答集锦

1
阅读(686) 评论(2)

最近一个月在忙得要死。刚开学嘛,除了上课之外呢,还有一堆要检查的事情。什么教学检查啦,什么评估啊。由于暑假期间,川大的实验室炸了一个,造成了重大险情。所以全校上下排查了一遍,准备迎接教育部的检查。

结果好死不死的,我们这个研究所被抽中了要校内检查。领导带着各部门,跑到我们这一看,问:你们为什么只有电脑?我说:那领导您想看什么?领导:你们不是低功耗集成电路与系统研究所吗?你们造集成电路的设备呢?我:……(首先,光刻机这玩意买多少个亿?其次,别人卖吗?)最后和领导解释了半天,终于让领导搞明白了我们这里没有造集成电路的设备……领导也很开明,说:这办公室不是检查的重点,你们教育学生注意安全用电就行了。我们还是要把重点放在大型、容易有安全隐患的实验室上面。

再然后了,就是报了个项目。第一次报这类项目,不太懂节奏。尤其是不太懂时间安排。结果被搞得很狼狈,一个月的时间内都在忙于写申报书,然后又被答辩安排搞得七荤八素的。通了几个宵,最后颠三倒四的终于赶上了答辩。

所以很久也就没有来更新了。但是,对于某些网友催更的行为我要说:这又没有打赏功能,也没有付费提问功能。所以!我想什么时候更新就什么时候更新。话说,现在知乎上有付费提问功能。各位真要是急,到知乎上向我付费提问啊!尊重知识,尊重劳动嘛!


不过今天呢,还是会更新一点东西,因为最近我的这个MooC不是又开始了嘛。上面就有同学出来提问了。有一个同学的提问非常有价值,具有一定的普适性,所以准备在这个地方放出来给大家观摩一下。


问题1:我在有些书上看到,特别高端的芯片,对芯片性能要求特别高的时候,需要采用全定制的开发方法,比如我们电脑里面的CPU。我想问的是,全定制的开发方法和这种写verilog代码的开发方法有什么区别?在全定制的开发方法中,我们一般采用什么样的开发方式?


回答1:全定制的方法就是和模拟集成电路设计方法类似,直接基于晶体管来进校设计。包括调制晶体管的宽长比,设计特定样式的门电路和触发器等等。而现在主流的数字集成电路与系统设计方法是“半定制”和“可编程”两种,其本质上都是输入硬件描述语言编写的代码,利用电子设计自动化技术的得到一个由已经存在的元器件库里的元件构成的电路。如果是“半定制”的,这些元器件库里就包括了各种门、触发器以及一些“宏单元”,而如果是FPGA就是基于“查找表”和其它可编程资源。这些单元都已经被抽象成了“逻辑电路+延迟信息”的形式。这就让设计者并不用掌握太多微电子相关的知识,也可以在EDA工具的帮助下设计数字集成电路与系统。

全定制的设计方法除了你提到的做一些性能要求特别高的电路以外,还会用在一些比如工作电压偏低的、可靠性有要求的领域。总之就是一般的元器件库不能满足要求的领域。另外还需要注意,元器件库本身也是需要人设计的。设计这些库里面的那些元器件的时候,其实也是用的全定制的方法。从而保证在一般情况下已经做到了比较优异的性能,这样才能拿出来给使用半定制设计方法的人来使用。但是全定制的方法过于繁琐,就决定了这样的方法在目前必然是小众的。


问题2:另外,我在有些书上看到,随着计算机技术的进步,现在正在探求一种HLS的高层次综合的数字电路开发方法,可以直接用高级计算机语言,以类似写计算机软件的方式描述电路的行为,然后综合出电路。我的问题是:verilog语言的这种开发方法会不会随着技术的进步被淘汰掉。


回答2:HLS作为一种更高抽象层级的描述方式,其实已经存在了20多年。也就是说上个世纪90年代的时候就已经有人在尝试类似的方法了。但是一直到丛京生教授在2010年把HLS这个东西完善到足够可以使用的地步,这技术才在最近几年发展的比较迅速。与HLS一起起来的还有一个叫OpenCL的技术。这两者都是说提高了抽象层级的以后,可以让设计者不必过分关注细节,从而提高设计效率。毕竟,现在电路规模那么大,功能那么复杂。不去提高抽象层级的话,生产力很难有所提高。


关于HLS和OpenCL以及硬件描述语言的详细解释,可以参考我的这篇博客:http://blog.chinaaet.com/molf/p/5100000170


问题3:为什么随着计算机技术的进步,数字电路的开发方式和纯粹的软件开发之间界限越来越模糊,我在做FPGA开发时,无法感觉到类似模拟电路中的“电路”的那种感觉,虽然说可以感觉到和一纯粹的软件开发之间有一些区别,但是这种区别似乎很小,很难感受到纯粹的“硬”的电路知识,大多数时间也是在写代码。请问:这种感觉是正常的吗?还是说我的层次不够高,对知识的理解有错误?


回答3:严格意义上来说,走半定制和可编程方法来做数字集成电路设计已经不属于“电路设计”的范畴,而是属于“逻辑设计”的范畴。实际上没有去设计电路,只是设计了逻辑。而电路是在利用EDA工具去生成得到了。所以这种设计思路当然不是“电路设计”的思路而应该是“逻辑设计”的思路。

至于和软件的区别,我们马上就会在后面的课程中详细的谈到。敬请关注。


问题4:根据我以前看过的书,标准单元库一般都是半导体生产厂家,如台积电之类的做底层的公司在做(不知道是否有误?我水平有限?),按照您所说,这种标准单元库的设计就是类似于模拟电路里面的设计,是纯粹的“电路”。我在学电路的似乎,明显感觉模拟电路比数字电路要难很多,无论从对数学物理的要求,还是对电路本身的数学建模理解,甚至计算。模拟都比数字要难,想必,就像您第三条所说,这种电路设计,更多的是把别人的电路功能模块拿过来用,构造出可以实现一段逻辑功能的电路,这种电路设计严格意义上讲不是“电路设计”,而是“逻辑设计”(这句话说的很好!)我们更多的是为了实现一段逻辑功能。也难怪我感觉数电比模电要简单。

那么,我的问题来了。我们知道,任何一门学科,学的东西越接近底层就越难,同时,越接近底层对数学和物理的功底要求就越高。这种设计数字电路(或者模拟电路)底层标准单元模块的人岂不是水平要求相当之高?那这种工作一般是达到什么水平的人在从事?(我不是指学历,而是指水平)?例如台积电里面,做标准单元库的人会有多高的水平?


回答4:这个单元库准确的叫法是集成电路工艺设计包(Process Design Kit, PDK),确实都是由代工厂提供的。因为这里面提供的就是晶体管、门电路的电气模型参数。这些需要代工厂根据他们的实际情况,提供测量出来的结果用以建模。然而,建模是一个非常复杂和困难的工作。通常呢是由代工厂外包给第三方做的。这些第三方通常都是集成电路领域的顶级团队。因为如果这个东西建不准,就会导致后面整个电路设计和制造出问题。这样会严重影响代工厂的“生意”。这种损失有时候是以亿计算的,所以这种事情自然就不是一般人能做的。请这帮人工作当然是要花巨款,但是这钱肯定是必须要花的。


问题5:一般情况下,我们不会去做数字电路中的标准单元库(绝大多数人应该不会从事这个岗位),既然如此,我们在学习一门学科的知识,一味的钻牛角尖去钻营太过于底层的技术,按照市场行情,反而不太容易找到工作(只考虑一般水平,不讨论顶尖人才)?是不是可以这样理解,太过于底层的东西,太过于深奥的技术,按照市场行情,能够提供这些底层技术岗位的工作比较有限?我们在学技术的时候,是否应该顺势而为,比如最近的互联网?(抱歉,这个问题语言表达比较凌乱,其实我是想说,我们一般人不会去设计标准单元库,花太多时间在上面是否得不偿失?)


回答5:“抽象”是人作为智慧生物的一大能力,而在抽象基础上形成的产业分工人类社会发展的基础。既然有产业分工,那么自然有分工的道路。没有必要什么都从最根本的原理上去探讨,如果是这样我们今天上个网还要从量子力学学起,这显然是不对的。具体说下来,了解这些所谓的底层知识到底有没有用呢?这个需要看具体情况。一般说来,从事一项工作需要了解的就是它的下层和上层的接口部分。就用数字集成电路设计来举例好了。数字集成电路的设计目前大部分的工作是在逻辑设计这个层面,逻辑设计的下层是门电路。对于一般的要求来说我们掌握了门的基本构造、电气特性、懂门延迟,其实就基本能开始做设计了。如果还知道门延迟产生的原因,功耗产生的原因,异步信号和同步信号之类的,那就进入到熟练的阶段了。而另一方面我们需要懂系统的一些知识,比如能看得懂数字信号处理算法,能明白计算机的系统结构,能根据实际的需求把一个设想转化成硬件描述语言(这些都是本门课程要讲的)。而我们一般是很难也不会去垮过更多的层次考虑问题的,除非是专门为了很特殊的科研。比如我们要用新的材料或者器件做个门电路,然后在这个门电路基础上再去设计。那这种一般只会存在于科研,而且还是比较前沿的科研里面。

EDA技术发展的思路其实就是屏蔽底层,从而让大家能在比较高的抽象层次上快速的完成设计。而底层的那些繁琐的事情依靠EDA软件去处理。所以有了EDA技术以后,整个数字集成电路设计的重心就已经转移了。从关注底层怎么把电路实现出来转向了如何正确的理解系统的需求,从而得到正确的逻辑设计上。往后面的发展呢,你前面也提到了,会有HLS这种抽象程度更高的设计方法出现。除此之外,SoC和基于IP核的设计也都是在往这个方向去发展。这就是技术发展的必然方向,只有这样人的思维能力才能跟得上集成电路设计规模的扩大。所以你说的底层工作减少,这个是必然的,因为都被这些软件工具替代了。

懂一些底层还是有好处的,在一些需要优化功耗、可靠性的领域。能够知道数字集成电路为什么会产生功耗,又为什么会有可靠性问题。我现在的主要研究方向都和这些有关。所以我经常和我的研究生说,我们的研究是:“问题发源于硅,解决于软件层面”。所以我的研究生一般都要求有比较宽的知识面。


问题6:现在的ADC、DAC技术越来越发达,许多以前只能用模拟电路处理的场合和工作内容都可以转化成数字电路的思想去处理,模拟电路的应用场合是否在被逐渐的蚕食?在我有限的知识范围里面,模拟电路一般用在那些高保真的功放电路和电源电路里面较多(放大器、比较器等)?我们生活中接触到的绝大多数应该均是数字电路,这正好也对应了计算机的发展领域,数字图像处理,数字信号处理,数字视频处理,数字通信技术等。

我的问题是:模拟电路在实际的工程和生活中,主要是用来干什么的?这些工作用数字逻辑电路能不能干?如果用模拟电路去做,有什么优势?未来模拟电路会不会被淘汰?(抱歉,我一直在做数字电路,模拟只学过书上的运算放大器和其他基本电路,模拟方面的项目经验很少,所以才会问这种问题)


回答6:其实发展到今天,模拟集成电路和数字集成电路又开始走向交叉融合。一些原本是模拟集成电路的领域现在也可以靠门电路、触发器这样典型的数字电路元器件而非电阻、电容、运放这种模拟电路的元器件去做。相反也有一些原来数字电路做的东西,在某些特定的场合下靠模拟电路来做。但是模拟电路有一个巨大的缺陷,就是由于不能和现有的计算机技术很好的融合,而无法做到通用。因此现在模拟电路基本上是集中在传感器接口、信号调理、射频收发、电源等几个比较固定的领域了。更多的时候我们是尽量的把信号先数字化了,再用数字电路来处理。这样可以最大限度的发挥计算机技术的优势。

模拟电路绝对被淘汰是不可能的,因为现实世界是模拟的。至少和现实世界的接口部分那一点点还是需要模拟电路的。这个我第一节课上举那个例子也可以看得出来。即使现在有很多方法尝试用门电路这类典型的数字器件来替代模拟器件,但是分析的时候依然要用类似于模拟电路的分析方法来做。

  1. 从而提高设计效率。毕竟,现在电路规模那么大,功能那么复杂

  2. 第一次评论黄老师的博客,瑟瑟发抖 {{{(>_<)}}},下面补充一下回答的完整性。

    问题1,全定制的开发方法跟写Verilog的开发方法没有可比性,因为设计的层次不一样。稍微复杂的数字电路一般需要用到硬件描述语言或高层语言进行前端逻辑设计。到了后端,才区分全定制、半定制。

    问题2,目前有很多高层次语言,比如C++、Python、Scala等,都有人在尝试进行数字电路设计。另外像Xilinx的FPGA开发平台Vidado支持使用C/C++进行高层次综合,比较成熟。个人觉得随着EDA技术的发展,HLS是有成为主流的可能。


    问题3,数字电路设计还是应该有“电路”的感觉才正常,即使是逻辑设计,也不能很随意地写,简单的例子就是一言不合就if出一个锁存器。


    问题4,设计层次不同,差别还是很大的,但是不同层次的设计都是有overlap,只不过侧重点不一样。还有啊,你觉得难的东西别人可不一定觉得难。


    问题6,模拟电路有些部分成熟以后,可以有数字的流程去做,但有些部分是数字替代不了的,比如phy、ADC等。强行比较的话,用模拟电路的设计思想去做相同的电路,可控和可测的粒度要更细。今年7月份有一篇JSSC上有一个哥们用C++写了一个编译器,实现FDSOI工艺下ADC的后端版图自动生成,很强,但是前提还是得写得好那个规则文件。