本坑主要准备将数字集成电路设计方法学的分类以及需要具备的知识点。
分割线………………………………………………………………………………………………
他们说坑不填完不给发货,虽然我觉得这个是相当的不合理的,但是为了表示配合。我还是先来填一篇。今天先来填一下数字集成电路与系统技能点升级路线。
正文开始分割线——————————————————————————————————————
前几天,中国著名的IC猎头,IC咖啡的创办人胡运旺先生在工信部举办的2016中国集成电路产业促进大会上作了《胡说中国最紧缺的IC人才》的报告。报告指出了当年我们队IC人才的一些认识误区,尤其是国内希望通过“大办”所谓的示范性微电子学院来实现对IC人才的弥补是错误的。IC行业无论是设计还是制造,都是一个“大行业”,实际上需要各种专业人才。目前各类微电子学院大多是在以前老的微电子技术或微电子科学与工程专业上发展起来的,其人才输出只占了IC设计和IC制造的很少一部分。对于人才培养、专业建设的问题是另外一个很大的话题,这里先按下不表。这里先来讲一讲数字集成电路与系统方面的人才所需要掌握的基础知识和技能,看一看这个领域的人才应该如何补全自己的“技能树”。
数字集成电路与系统按照应用领域和主要功能划分,可以分为“算法型”和“接口型”两大类别。前者主要实现各位信号处理算法,如图像处理、音视频编解码、无线通信基带等。后者主要实现各种连接的接口,小道什么IIC、SPI,大到网络接口芯片,高速交换机芯片,终极的就是集成化、单片化的片上系统(SoC)了。随着电子系统“单片化”的进程不断加剧,这两种集成电路目前都会落实到单片SoC上。但SoC是一个需要多人协作的工作,不同的工程师仍然会负责不同的方面,所以这样的分类仍然是有意义的。
所以技能树可以被分为三个部分:公共基础知识、“算法型”数字集成电路工程师技能树、“接口型”数字集成电路工程师技能树。
一、公共基础知识,包含无论从事哪种集成电路设计都需要一些知识。
预备知识,有这部分知识对于后续的学习有所帮助,但是如果实在没有也可以。
1.1 任意一门高级语言。掌握任意一门高级语言不但有助于理解硬件描述语言的语法,而且在后续的仿真验证和建模中都有可能遇到。比较推荐掌握的语言是C/C++或MATLAB用的M语言。
1.2 电路分析/模拟电路。学习和理解电路分析/模拟电路的对于学习数字集成电路是有意义的。从基础上说,学习电路分析/模拟电路有助于理解电路工作的本质,培养“电路意识”从而有助于更好的理解数字集成电路中有关电路特性的概念。
1.3 Linux相关知识,因为很多工具现在都在Linux下面使用,掌握这部分是非常有必要的。但如果不会呢,也还好……
核心知识,这部分是整个数字集成电路与系统设计最核心的基础,也是必须掌握的。
2.1数字电路/数字逻辑设计及应用。这部分知识不用说了,没掌握这个后面的也就不用学了。但是由于现在很多学校为了响应缩减课时的号召,很多东西都略去不讲。因此这部分内容至少应该包括:基本的门电路、常见组合逻辑电路(编码器、译码器、加法器、桶形移位器)、触发器/锁存器、常见时序功能电路(计数器、移位寄存器)、有限状态机;
2.2 硬件描述语言。Verilog HDL和VHDL随便。这个也不用多说。但是单纯掌握语法没有用,也不可能真正的掌握。需要和数字电路/数字逻辑设计及应用结合起来学习,真正掌握如何利用硬件描述语言去“描述”一个逻辑电路。
2.3 数字集成电路(物理特性)。和数字电路/数字逻辑设计及应用不同,数字集成电路相关的知识点更多的是介绍和数字集成电路物理特性相关的知识,如门延迟、时序分析、功耗分析等等。
2.4 基本的EDA工具使用,包括仿真工具、综合工具以及时序分析工具。如果只是想从事FPGA相关的设计而不去做IC设计,懂点FPGA相关的工具就OK了。
2.5 基本的脚本语言如Perl、Tcl等。EDA工具是依靠脚本语言来驱动的,不过这类脚本语言通常复用性都很强的,并不需要掌握到很深的程度。拿过来会用会改就好了。
进阶知识,这部分是数字集成电路与系统设计中比较高端的知识,在从事某些要求比较高的工作时需要。如果没有掌握的话会对后续从事某些工作造成困难。
3.1 验证方法学。如今做数字集成电路设计,主要的工作量都在验证上门,而验证本身容易被忽略。
3.2 System C。系统建模专用,做大系统的时候必不可少。
3.3 System Verilog。为验证加强的升级版Verilog,也是闲着Verilog逐渐压倒VHDL的原因
好了,说完了基础开始来说算法型数字集成电路相关的基础知识和技能
预备知识。这部分知识为后续学习的基础,也决定了后面算法型数字集成电路能不能很深入的走下去。主要包括:
1.1 微积分、线性代数、概率论与数理统计。这部分决定了后续对算法理论的理解程度,如果掌握得好是非常有助力的,掌握得不好也能活下去。
1.2 矩阵论,这个高阶一点,但是在做一些信号处理算法的时候真就要遇到。
1.3 信息论/控制论,搞编解码、自适应滤波这些玩意的时候,还真离不开。
核心知识。如果不懂这部分,算法类数字集成电路也就别学了。
2.1信号与系统,这个不用解释了吧……
2.2 数字信号处理,虽然人人都学,但是学明白的不多。最起码基本的几个变换、滤波器设计、有限字长效应这些要搞明白;
2.3 MATLAB/simulink,算法建模的基本工具。而且现在simulink 里面还有很多不错的Demo,用来理解算法与系统的关系很不错。比如802.11a的DEMO什么的。
2.4 数字图像处理/通信原理/自动控制原理等需要从事专门领域的算法基础。这部分直接关系到你自身对涉及要用到的算法的理解能力
进阶知识,这部分就因从事的方向不同而有所不同。就不再详述了。
接下来说说,接口型的……(发现一写起来还真多)
预备知识。
1.1 计算机网络。对,你没有看错,是计算机网络。为什么是计算机网络,是因为目前我还没有看到那本书在系统的介绍协议设计的思想的。通过计算机网络可以了解和学习协议设计思想和分层的概念。
1.2 ……好像就没了,想到了再更
核心知识。
2.1 微机原理与接口,现在很多课程好像不叫这名字了,anyway,反正是讲和计算机硬件以及接口相关的就行。没有的话需要自己自学。
2.2 嵌入式系统软/硬设计,2.1讲的多是理论,讲概念上的接口、总线之类的概念,通常给出的是模型。这当然有助于理解。但是实际的内容还是要学的。接口型IC往往涉及到和底层软件协同,所以这部分也是必不可少的。
2.3 常见的基本接口协议,如IIC、UART、SPI等。掌握这些基本的接口以后可以往后面深入。
2.4 SoC设计方法学,现在基本上单独的接口芯片都很少了,大多数是以SoC上的一个IP存在的。所以要学习SoC的基本概念和构造方法。
进阶知识
3.1 微处理器设计,SoC的核心。也是包含了各种接口的集大成者,进阶学习必须。
3.2 计算机组成原理,从根本上认识SoC的前提。
3.3 计算机体系结构,上升到理论高度理解计算机和SoC
3.4 各类高级的协议,和具体工作有关,不再敷述。
好了,目前就先更新到这里。后面有了新想法再来补充