来源:kellen.wang 的博客 http://kellen.wang/
(推荐阅读:数字IC技能树)
刚毕业的时候,我年少轻狂,以为自己已经可以独当一面,庙堂之上所学已经足以应付业界需要。然而在后来的工作过程中,我认识了很多牛人,也从他们身上学到了很多,从中总结了一个IC设计工程师需要具备的知识架构,想跟大家分享一下。
I. 技能清单
作为一个真正合格的数字IC设计工程师,你永远都需要去不断学习更加先进的知识和技术。因此,这里列出来的技能永远都不会是完整的。我尽量每年都对这个列表进行一次更新。如果你觉得这个清单不全面,可以在本文下留言,我会尽可能把它补充完整。
语言类
Verilog-2001/ VHDL
SystemVerilog/ SystemC
Makefile/ Perl/ Python/ Shell
Tcl
工具类
NCVerilog/ VCS/ ModelSim
SimVision/ DVE/ Verdi
Vim/ Emacs
SVN/ CVS/ Git
Microsoft Office
平台类
Windows
Linux
OS X
其他加分项目
MATLAB
ISE/ Synplify/ Vivado/ Quartus
LEC/Formality
VMM/ UVM
ESL
ZeBu Server
JIRA/ Confluence
C/ Assembly Language
Computer Architecture/ ARM Architecture/ MIPS Architecture
II. 为什么 & 怎么办
A) Verilog-2001/ VHDL
这里之所以强调Verilog-2001而不是Verilog-1995,是因为在Verilog-2001中规定了很多新特性,因此可以产生更好的代码风格。我曾经在什么是良好的Verilog代码风格一文中对新版的接口语法进行过详细的举例说明。这种新的接口方式修改起来更加简单,例化模块的时候使用也更加方便,不像旧版的接口语法由于一个接口需要分3次描述,无端端增加了代码行数而且阅读和改动都很困难,尤其是当一个模块的接口数目超过一个屏幕的显示范围时Verilog-2001的这种优势更加突出。
学习Verilog最大的问题就是,很多国内的书写得都很不好,书中的很多例子都是为了说明语法特征而存在的,没有任何实用价值,甚至很多代码都是错误的(这里错误的意思并不是说他语法错误,而是说他是不可综合的,无法用数字电路来对等实现的)。所以,对于学习Verilog,我的建议是,随便找一本类似语法手册的书籍,匆匆把基本语法看过一遍,搞清楚模块定义,接口定义,模块例化,寄存器定义,线定义,always块怎么写这些基本内容后,就开始到OpenCores网站上去下载已经经过FPGA验证的完整开源项目代码进行学习。先做到看懂别人写的代码,然后再尝试自己去模仿,有不懂的问题再有针对性地去网上搜索答案。
Verilog语言与软件语言最大的区别就是,因为它是用于描述电路的,因此它的写法是非常固定的,因为电路的变化是非常有限的。学习Verilog的时候,很多时候我们并不是在学习这门语言本身,而是学习其对应的电路特征,以及如何对这个电路进行描述。如果心中没有电路,那么你是不可能写好Verilog的。从基础开始,一点点积累类似计时器,译码器这样的小型电路描述方法是非常重要的。Verilog鼓励在电路中进行创新,而不是在描述方法上进行创新。因此,即使是世界上最牛的Verilog高手,他写出来的Verilog代码语法也都是很普通的,而他的创意则在于如何去组合这些基本的小型电路。
举个不太恰当的例子,每个医生都会给你开药打针检查身体,但是高明的医生并不在于他用了多高难度的动作去给你扎针,或者给你开出什么奇奇怪怪的药吃,而是他如何快速准确的诊断出你的病情,用最合适的扎针吃药组合去治疗你。Verilog也是同样,要学会用最规矩保守的语法,写出运行速度最高性能最稳定的电路,而不是在语法上瞎费工夫。凡是你没见到别人写过的语法,都很可能是错误的。
VHDL虽然我并不是太了解,但是目前在欧洲很多国家,VHDL还是主流的RTL设计语言。VHDL语言的严谨性比Verilog要好,不像Verilog中一样存在大量符合语法却永远无法综合的语句,容易对新人造成误导(仿真通过的代码却在FPGA综合时报错,或者FPGA实现结果与仿真不一致)。而VHDL和Verilog虽然可以相互转化,但是转化过程中仍然存在很多问题,无法做到完全的自动化。关于这一点我之前写过一篇专题进行探讨:如何将VHDL转化为Verilog。有兴趣的同学可以去看看。
B) SystemVerilog/ SystemC
这两种语言都是为了验证而存在的。作为IC设计工程师,验证知识不是必须的,但是掌握基本的验证方法学有助于提高自己的debug效率和结果。我曾经在如何快速搭建模块验证平台一文中详细介绍过一种我自己总结的验证方法,这种方法就是基于SystemVerilog语法实现的。由于SystemVerilog对Verilog完全兼容,就像C++对C语言的兼容一样,所以SystemVerilog(或SV)学起来其实并不算难。
SystemVerilog是一种面向对象的语言,其设计的本意是用于搭建验证平台,主流的VMM/UVM方法也都是基于SystemVerilog实现的,所以立志成为IC验证工程师的同学,SystemVerilog的深入学习和流行方法论的学习都是必不可少的。
而对于那些只想做IC设计的同学而言,SystemVerilog同样也是值得学习的。且不说本文前面提到的用于提高验证效率的debug方法,即使只是为了做好设计,SystemVerilog也是大有用武之地。在欧美很多发达国家,很多世界顶级的IC设计公司内部都已经开始使用SystemVerilog进行RTL设计了。由于在SystemVerilog中加入了很多类似always_ff、always_comb等用于显式表明综合电路意图的新语法,代码的可读性更高,综合过程中也减少了歧义,尽可能地保证了综合结果与设计意图的一致性。从另一个角度来说,assertion的加入也极大地提高了代码的debug效率,非常有助于在大规模的数据交互过程中定位到出错的初始点,没有掌握的同学可以多花一些时间研究一下。
C) Makefile/ Perl/ Python/ Shell
以上四种都是IC设计工程师们常用的脚本语言,看起来似乎它们都跟IC设计的专业能力没有丝毫关系,但是由于本行业的专业工具价格非常昂贵,项目需求差异极大,因此掌握一门得心应手的脚本语言将对你工作效率的提升帮助极大。如果你还没有尝试过编写自己的脚本语言,那么问问你自己,有没有曾经为了完成一批仿真用例熬到深夜?有没有曾经因为要比对几万个数据搞到眼瞎?有没有曾经因为要修改一个全局信号的比特位宽而无比抓狂?要把一个hex类型数据文件转换为memory模型需要的特殊格式怎么办?没错,如果你掌握了脚本语言,以上这些奇奇怪怪的需求都不是事儿,重复而细致的体力劳动就交给计算机来完成吧。我一向信奉的口号就是:但凡做过一次的事情,就没有必要重复第二次。
如果你已经在工作中使用过其它工程师开发的平台或者脚本,那么它很可能是用这4种语言写成的。如果执行脚本的方式是make run,那么很可能你用到的是一个Makefile脚本;如果执行方式是source run,那么这应该是一个Shell语言写成的脚本;如果是其它情况,那么就得看具体这个脚本首行是怎么写的了。Makefile和Shell语言比Perl/Python要更容易上手,写起来也更加简单,比较适合满足一些非常简单的批量任务需求。Perl的强项则在于它强大的文本处理能力和无所不能的CPAN库,随时可以满足你的各种任性需求。Python的优点则是较好的可维护性。
关于脚本语言的重要性,大家可以到这里看看相关讨论:Perl等脚本语言在IC设计中有哪些用处?。
D) Tcl
严格来说,Tcl是一门非常单纯而简单的语言,而它的学习难点在于,只是掌握它的语法是远远不够的。这种情况有点类似javascript,如果你用js来开发网页,那么你必须深入了解DOM和HTML;如果你用js来开发游戏,那么你必须深入了解Unity3D引擎的各种知识;如果你用js来开发Web App,那么你必须会用node.js的各种库和常见的服务端框架。
语言永远只是工具,这句话放在Tcl上再合适不过了。在IC设计这个领域中,Tcl是一门非常常见的语言。他可以用于描述时序和管脚约束文件,UPF信息,也可以用来搭建简单的工作平台。它既是很多IC领域EDA工具默认支持的脚本语言,也是这些工具配置和输出的文件格式。因此,能够读懂Tcl,掌握Tcl语言的基本语法,就可以帮助你更好的使用EDA工具,真可谓是Tcl在手,天下我有!
但是,成也萧何败萧何,正如前文一开始提到的,仅仅掌握了Tcl的语法还远远不是全部。不同的EDA工具对Tcl脚本提供的命令和参数支持都是不一样的,每当你需要为一种新工具编写Tcl脚本时,都必须要熟读官方给出的用户手册,了解这种工具支持的Tcl命令结构,才能确保写出的脚本是可以被正确执行的。
E) NCVerilog/ VCS/ ModelSim/ iVerilog
以上三种都是比较业界比较主流的仿真工具,其中NCVerilog和VCS都只支持Linux平台,而ModelSim貌似是同时支持Linux平台和Windows平台的。但是不管哪一种,我都希望大家能意识到两件事:第一,仿真器和波形查看器是两回事,本条目介绍的只是仿真器,仿真器的工作原理跟波形查看器是有天差地别的,同时由于IEEE对标准波形文件*.vcd格式的规范,任意仿真器都是可以和任意波形查看器组合使用的。第二,仿真器通常是没有图形界面的,为了更好地使用仿真器,你要熟读自己常用仿真器的用户手册,了解一些常见需求的命令行参数,至少要做到了解如下内容:如何指定编译的文件类型,如何指定编译文件清单,如何指定索引目录,如何指定仿真精度,如何指定临时的宏变量,如何指定语法检查的严苛等级,如何混合编译由多种语言写成的工程,如何调用不同波形生成工具的pli接口,如何配合SDF反标进行后仿等等。
不同仿真器的功能其实都大同小异,但是是不是只掌握一种仿真器就可以打遍天下无敌手了呢?当然不是。在实际的工程中,我们经常用到第三方IP核,有时候出于保密的需要,第三方IP核会以加密二进制文件的方式提供,加密二进制文件长啥样呢?它们一般以“*.vp”格式命名,文件的开头部分就是标准的Verilog语法,但是在一行注释之后就全部变成了乱码。通常乱码之前的那行注释会指定该加密二进制文件支持的仿真器类型。所以你看,如果你是一个重度VCS使用者,而有一天项目经理突然塞给你一个只支持NCVerilog的加密文件,你内心一定会有千万只草泥马呼啸而过。
如果你是一个开源工具的死忠粉,那么你可以考虑使用Icarus Verilog (iVerilog)进行仿真编译。iVerilog编译器和其自带的vpp仿真器是基于C++开发的,支持Verilog全系列的IEEE标准,但遗憾的是,iVerilog目前对System Verilog的支持还相当有限。iVerilog是跨平台的,无论你喜欢用Windows, Linux还是OS X, iVerilog都提供了非常便捷的安装方式。
F) SimVision/ DVE/ Verdi/ ModelSim/ gtkWave
与上面的仿真器相对应,以上三种也是业界比较主流的波形查看工具。所有的波形查看器都必须支持标准波形文件*.vcd格式,但是由于*.vcd格式的存储性能并不好,冗余信息过多,所以各家波形查看工具都纷纷推出了自己独家支持的波形文件格式,如DVE的*.vpd,Verdi的*.fsdb,ModelSim的*.wlf, SimVision的*.shm等。通常波形查看工具独家支持的文件格式都具有较高的压缩率,举例来说的话,通常1G左右的*.vcd格式波形转换为*.vpd格式后只有40MB左右,而转换为*.fsdb后通常会更小,因此将标准波形文件*.vcd转换为其他压缩格式更加有利于数据备份。
如果希望在仿真过程中不生产*.vcd,而是直接生成压缩率更高的其他波形查看器专用格式,则需要调用对应工具提供的pli接口,同时配合测试平台代码中的系统函数调用(如$fsdbDumpOn等)来完成。
说了这么多,不要以为*.vcd格式就一无是处了,再怎么说这也是IEEE规定的标准格式,其他不同压缩格式的波形文件之间如果需要相互转换,一般都是要先转换为*.vcd后再转到目标压缩格式去的。
对不起,上一段最后一句是错的,近期负责量产方面的事情,对这一块终于加深了了解,实际量产测试环节中ATE环境目前主要使用的激励文件格式主要有两种,分别是*.wgl和*.stil。这两种文件格式与*.vcd及*.fsdb等是有本质不同的。*.wgl和*.stil格式是基于周期数和电平向量的波形文件,而*.vcd和*.fsdb是基于时间和变化的。换句话说,在*.wgl和*.stil里,你会看到类似“0101010100”这样的信号描述,他完整记载了所有信号随时钟周期数(而非时间刻度)的变化过程,如果你以10MHz的时钟频率来播放这个波形,那么他产生的信号长度就是10个100ns,如果你以100MHz来播放则长度为10个10ns,这就是基于周期数记录波形的含义。同时,在*.wgl和*.stil波形里,信号是以向量的形式完整记录的,假如波形里有2个信号,“11”,“10”,“00”这三个向量就表示第一个信号在连续的三个周期里分别是“高高低”,而第二个信号则是“高低低”,这就是基于周期数和电平向量的完整含义。与此相对的,在类似*.vcd这样的波形文件里,经常可以看到#1000 1signal这样的表述(此处的signal通常会用类似#这样的字符代表它的id号),它表示过了1000ns后signal变成了高电平。由此可见,*.vcd文件本质上是通过记录时间增量和信号的变化沿来表示波形的。
那么问题来了,平时我们的仿真结果都是基于时间的类*.vcd格式,如果量产测试的激励必须是基于周期数的类*.wgl格式,要怎么办呢?目前市面上有一些可以将*.vcd转换为*.wgl格式的软件工具,但是授权收费不菲,建议有可能的话,设计人员最好在设计测试激励时就考虑到这一点,通过脚本或者其它方式直接生成*.wgl文件进行交付,如果只能提供*.vcd格式,请确保激励波形可以按统一的固定周期长度进行切割转换,否则在进行波形格式转换过程中可能会存在大量反复工作和沟通问题。
同样的,如果你希望使用开源的波形查看器的话,gtkWave将是你的不二选择。和iVerilog类似,gtkWave也是跨平台的,而且简单易用,支持*.vcd标准格式,同时独家支持高性能压缩格式*.lxt和*.fst(gtkWave自带vcd转fst的转换器,只需在运行过程中加入参数调用即可)。
G) Vim/ Emacs
经常看到一些Verilog新人提出这样一个让人啼笑皆非的问题:“请问一般Verilog编程用什么样的软件?
首先,Verilog是一种电路描述语言,它本质上可能跟电路图的血缘还更近一些,至少不应该把这个描述过程说成是“编程”。其次,写Verilog其实并没有什么专门的软件,大部分业界的工程师都是用Vim或Emacs这样原始粗犷的文本编辑器来写Verilog代码的,如果你愿意的话用Notepad或Texteditor来写也未尝不可,只是如果你有深入了解过Vim或Emacs的话,自然就会明白这么多人选择它们的原因所在——提高效率。
你去问Vim或Emacs的使用者,为什么说这玩意能提高效率,多半对方回你的第一句就是:因为可以丢掉鼠标啊。显然这样一个结论并不能让人信服,而实际上这也只是它们众多优点中的一个而已。那么究竟为什么可以提高编程效率呢?核心原因当然是,因为借助它们,你可以用编程的方式来编程!听起来优点拗口对不对,没关系,请听我解释。
举个例子:如果你设计的模块需要对外输出100个寄存器,每个寄存器的位宽等于他的编号,如果使用普通的文本编辑器,你需要手工写下output reg reg_0到output reg[99:0] reg_99这100行代码,即使用上复制粘贴,你也需要逐行手工修改每行代码里的信号位宽和编号。但是,如果借助Vim编辑器的命令功能的话,你只需要写下for ($i=0;$i<100;$i++) { print("output reg[$i:0] reg_$i\n");},然后在同一行按shift+v,输入:!perl回车,然后就你能看到前面输入的那些代码被替换成了你本来想输入的100行内容。 以上是一个稍微复杂的例子,可能大家平时不一定会遇到这种需求,但是以下情况呢? > 你是否曾经忘记在每行代码末尾加上”,”或”;”符号,编译失败后才发现需要逐行补上?如果使用Vim编辑器的话,只需要用shift+v选中需要修改的行,按下:’<,'>s%$%;%g就可以了,熟练之后整个过程不超过5秒钟。
> 你是否曾经在代码写完之后被老大臭骂一顿原因是你没有把所有的reg和wire定义都放到文件的统一位置(如第38行)?如果使用Vim编辑器的话,只需要使用:g%^\s*reg\s*%m 38加上:g%^\s*wire\s*%m 38就可以了。
> 你是否曾经被要求删除某个文件中所有的注释?只需要:%s%//.*$%%g就可以了。
> 你是否曾经需要把一个模块例化256次,然后因为每次例化的一点微小不同导致你不能直接使用for循环?没关系,用qq录像功能,你只需要操作一次,然后使用256@q就可以把你的动作自动重复256次啦。
> 你是否曾经遇到键盘坏掉了,“a”键经常失灵甚至没有反应?没关系,用:inoremap ‘ a把‘键重新映射为a键吧。
类似的例子简直数都数不完,更多内容参见与Verilog有关的Vim实用技巧。
所以说,使用Vim或Emacs最大的好处就是,你会感觉到你的大脑比手更忙,因为从你想清楚到代码写好只需要花费极短的时间。你可以把全部精力投入到代码的内容上,而不是代码输入这个机械的过程中,就好像用打字机代替毛笔的感觉一样。只要是你能用编程描述清楚的事情,Vim就可以代替你快速完成,而前提就是你要先学会大量的Vim命令和正则表达式,以保证你的表述能被编辑器正确理解。
G) SVN/ CVS/ Git
以上三种都是目前比较主流的“版本管理”工具。什么是版本管理?简而言之,就是一种用于记录和查询文件版本改动的工具,通常都会被部署在公共服务器上,以保证数据的安全和可恢复。在项目的开始阶段,首先需要创建好版本管理的根目录,然后由不同的工程师逐一把自己的设计文件首次加入到版本管理的各级子目录下。在项目执行的过程中,每当有人修改一个文件,都需要通过版本管理工具上传代码并注释改动内容,版本管理工具会自动检查改动内容与服务器上的最新版本是否冲突(冲突的意思即是说,在该工程师改动这个文件的过程中,有其它人也对该文件的同一行代码进行了改动并上传了新版本),如果没有冲突,则会自动将新上传的改动合并到当前最新版本,反之,则将冲突部分进行对比显示,让工程师手工判断应当如何合并冲突行的内容,解决冲突后可以再次重新上传。
SVN和Git都是跨平台的版本管理工具,其中SVN是必须在线工作的,而Git是可以离线工作的。当你需要上传代码的时候,如果你使用的是SVN,则你必须保证从你的计算机到服务器端的通信是畅通的,而如果你使用的是Git的话,由于Git有本机仓库的概念,在你没有主动与服务器端同步之前,所有版本管理都是在本机仓库上完成而不需要与服务器通信的,这样即使是在离线环境下也可以最大限度地保证代码版本的可恢复性,同时也节省了在移动环境下工作时的传输流量。Git是开源的,最早兴起于互联网行业,目前也有逐渐在其他行业里广泛使用的趋势,以之为基础的开源社区GitHub更是为它的繁荣起到了重要的推动作用。
CVS是一款比较老的版本管理工具,只能在Linux平台下运行,不支持目录的递归添加和重命名,用起来略有些麻烦,不过因为目前还有很多公司在用,所以这里也顺带介绍一下,并不推荐。CVS和SVN的最大区别还是版本号的命名思想,在SVN中,任何一个文件的修改都会导致整个工程版本号的更新,而在CVS中,版本号是跟随文件的。因此,在系统的某个时刻,SVN工程中所有文件的版本号都是相同的,而CVS工程下的每个文件都有一个自己的版本号。CVS的这种版本号设定会给工程管理带来很多麻烦,主要是如果有一天你想把整个工程恢复到之前的某个状态的话,要么是你曾经记录下了当时所有文件各自对应的版本号,要么是你记下了当时的准确时间,要么是你当时给所有的文件打上了标签,否则几乎是不可能的。而对SVN来说,你只需要记住当时整个工程的版本号即可。
H) ISE/ Synplify/ Vivado/ Quartus
ISE和Vivado都是Xilinx旗下的FPGA工具,其中ISE比较老,官方已经停止更新了,目前最新的版本是14.7,而Vivado作为新一代的FPGA工具一直在继续更新。Quartus则是Altera旗下的FPGA工具,功能和ISE/ Vivado大同小异。笔者平日里对FPGA工具的接触并不多,但从有限的接触体会而言,Quartus比ISE/ Vivado更适合用于学习,入门的门槛更低一些,操作界面也更加简单易学(但千万不要使用6.2版本以下Quartus中自带的波形仿真工具,那是垃圾)。
学习FPGA有助于帮助大家理解“正确的设计 != 正确的RTL”,而是“正确的设计 == 正确的RTL + 正确的时序约束”这一重要理念(很多同学一直无法从软件编程的思维中跳出来,也是因为一直没能理解好这个理念)。正确的时序约束通常包括管脚约束和时钟约束,任何一项约束出错都会导致综合出来的电路无法按照预设的频率和时序进行工作。Quartus支持的约束文件格式是*.sdc。ISE和Vivado支持的约束文件格式有所不同,ISE支持的是*.ucf,Vivado支持的是*.xdc,但由于Xilinx家的工具中内置了约束文件互相转换的脚本,因此只需一个命令就可以在两个软件的工程之间无缝切换。从时序约束的思想上来说,Quartus与ISE/ Vivado在很多细节上都有所不同,所以从一个平台迁移到另一个平台的过程中依然会有一个学习过程,例如说:Quartus在时钟定义上不太区分管脚输入时钟和内部时钟,但在ISE中则不允许使用管脚输入时钟直接驱动寄存器,而是必须首先经过BUFG/ PLL/ DCM等时钟IP处理后输出方可以使用。Quartus对于输入输出的同步数据信号偏移offset in/out和ISE的定义也正好相反,使用过程中需要尤其注意。最后一句话送给FPGA新手们,千万记住,如果你在设计FPGA工程的时候没有添加任何时序约束或时钟约束,请不要问我为什么电路工作不正确,本段话的第一句已经回答你们了。
在学习FPGA的过程中,掌握信号探针工具(signal probe)的使用是非常必要的,有了它们,大家就可以像在仿真软件里那样,把真实FPGA硬件里的物理信号采样抓取到波形查看工具中去进行debug。Xilinx家的信号探针工具叫ChipScope,而Quartus家的叫SignalTap。相对来说,SignalTap比ChipScope要好用很多,例如说,SignalTap抓取波形的时候,信号名称可以自动识别,而ChipScope会把信号名称自动命名为序号,需要用户手动使用别名进行修改,而其中一旦有一个信号名称写错,就得把该信号以后的全部信号名称重新输入一次。
I) Windows/ Linux/ OS X
相信大多数人的个人计算机使用的都是以上系统或类似以上系统的其他系统吧。以上3个系统,对于专业的数字IC前端设计人员而言,工作的方便程度(注意,是专业人员的方便程度,而非学习曲线的陡峭程度,这里是指均已达到熟练掌握的前提下对于工作效率的帮助)由方便到困难分别是:Linux > Windows > OS X。在Windows下,你可能需要的工具有Cygwin(模拟Linux shell,带有大部分GNU工具),Modelsim,Debussy(更名Verdi后的版本没有对应的Windows版本), Quartus, ISE等。在Linux下,你可能需要的工具包括Bash/Csh/Tcsh,Modelsim,Quartus,ISE,VCS,Simvision,DVE,NCVerilog,Formality,LEC,Synplify等。而在OS X下(笔者不幸就位于该平台下),你可以使用的工具就只剩下Bash/Csh/Zsh,iVerilog,gtkWave这些选择了。
从以上内容不难看出,在工具的多样性角度而言,Linux完爆其它平台,这也是为什么绝大多数IC开发公司的服务器都选择部署在Linux下的主要原因之一。对于个人电脑而言,大部分同学会选择使用虚拟机来兼顾不同平台的工具选择,个人建议大家最好在熟练掌握Linux平台及其工具的前提下,同时也了解一下其它平台的解决方案
推荐阅读:
关注EETOP公众号,后台输入 芯片合集,查看如下推荐文章
精品课程:先进制程工艺集成电路ESD电路如何设计?
精品课程:集成电路闩锁效应与工程应用
7nm : 台积电 VS 三星
格芯成都厂为何会停摆?
半导体的过去、现在和未来
芯片制造新模式--像搭积木一样造芯片
大型IC设计中心的IT环境
芯片设计中电迁移和IR压降的挑战和技术
芯片面积太大了!三星 Exynos 9820 内核照片曝光
麒麟980内核照片:NPU在哪呢?
六家 5G 基带芯片介绍及市场剖析
SoC与5G基带分居了 原因是?
IC大牛10多年的设计分享:数字典型电路知识结构地图及代码实现
关于华为海思,这篇文章值得一看
俄国没有高端芯片,为什么却能造出一流武器?
别拦我,我要做芯片!
芯片春秋·ARM传
中国芯酸往事
印度芯酸往事
国防军工芯片行业深度报告
一位美国芯片公司华人高管对中国芯片行业的思考
学习、积累、交流-IC设计高手的成长之路
女生学微电子是一种什么体验?
MIPS架构开放了,10天设计一款完全免费的MIPS处理器(附源码)
性能之殇:从冯·诺依曼瓶颈谈起
AI芯片设计与开发概览
AI 芯片和传统芯片有何区别?
一个资深工程师老王关于AI芯片的技术感悟
隔隔壁老王:AI芯片与她怎么选?
终于有人把云计算、大数据和人工智能讲明白了!
尺寸减半、功率翻番!——氮化镓技术的现在和未来
逻辑综合 Design Compiler 资料大全
集成电路制造技术简史
半导体科普:IC芯片设计及生产流程
晶圆代工争霸战四部曲(了解各晶圆厂的前世今生,非常详细!)
非常详细的半导体工艺流程讲解
射频半导体工艺介绍
版图中Metal专题——线宽选择
有哪些只有IC工程师才能get到的梗?
为什么7nm工艺制程这么难?从7nm看芯片行业的“贫富差距”
什么是台积电的SoIC?
RISC-V打入主流市场的诸多问题
RISC-V架构有何优势?
关于RISC-V 终于有人讲明白了!
RISC-V软核+FPGA 航天军工产品设计新机遇
ASIC低功耗设计实例分析及书籍推荐
ASIC设计学习总结(包括:工具及书籍文档推荐 、软件环境搭建、RTL设计、验证、工艺库说明、形式验证、综合等共12部分)
ASIC设计学习总结之可测性设计及书籍推荐
ASIC设计学习总结之静态时序分析概要及书籍推荐
ASIC设计学习总结之工具及书籍文档
小芯片大价值 | ASIC工程师如此值钱到底为什么?
芯片面积估计方法简介
自主研发通信芯片有多难?通信行业老兵告诉你,没那么简单!
RISC-V精简到何种程度?能省的都省了!
多核CPU设计及RISC-V相关资料
时序设计与约束资料汇总
模拟版图讲义
GDSII转DEF的flow简介
机器学习将越来越依赖FPGA和SoC
Verilog基本功之:流水线设计Pipeline Design
先进封装发展趋势分析PPT
先进封装发展现状分析PPT
可测试性设计与ATPG
麒麟980是如何诞生的?敢于失败,勇于尝试!(附:华为早期型号处理器研发过程)
IC模拟版图设计讲义
Verilog CPU设计实例
CPU、GPU 和 TPU 都是如何工作的?有什么区别?TPU为什能碾压GPU?
流行数十年的主流芯片架构正在悄然巨变
与IC设计产业相比,EDA产业发展的难处有哪些?
千兆以太网 TCP, UDP协议, FPGA实现
SoC功能仿真验证技术分享
对验证的一些理解
IC Layout 脚本分享
异构整合,半导体下一个关键
用Python编写FPGA以太网MAC(附源码下载方式)
用python进行机器学习
直接产生verilog的testbench的python脚本
干货!ASIC牛人之经典总结
ASIC前后端设计经典的细节讲解
资料分享|时序分析
Verilog基本电路设计(包括:时钟域同步、无缝切换、异步FIFO、去抖滤波)
128点 FFT verilog代码分享
硬核实现 ”春节快乐” 代码分享
FPGA在人工智能时代的独特优势
什么是FPGA工程师的核心竞争力
从芯片到系统:FPGA加速卡的发展历程与展望
基于FPGA的深度学习加速器的挑战与机遇
FPGA正变成“瑞士军刀”, 越来越像SoC
数字前端及FPGA设计相关书目泛读及点评
数字IC设计学习流程
防止毛刺的时钟切换电路的设计思想
函数发生器实现方法简述
用FPGA实现简单的UDP/IP通信(采用纯硬件语言,非软核)
数字集成电路设计入门 --从HDL到版图
同步器的设计
数字IC工程师的技能树
微电子树
IC设计完整流程及工具简述
IC芯片设计及生产流程
IC 芯片的成本从哪里来?
说说芯片设计这点事
关于IC设计的想法
数字IC设计的完整流程(非常详细!)
数字IC Design技术全局观(110页PPT!)
ASIC设计中各个阶段需要注意的问题
深入浅出谈谈Setup和Hold
大话setup time与hold time
静态时序分析中的setup和hold存在负值的问题
关于静态时序分析STA的切入点及方法
静态时序分析(STA)基础与应用
组合逻辑设计中的毛刺现象
数字IC设计工程师的发展前景如何?
一个合格数字IC设计工程师的知识结构
RS编解码Verilog代码RS(255,247)
RS(255,239)编解码算法,verilog代码以及详细讲解
非常详细的Verilog讲义教程,共472页
一个简单的8位处理器完整设计过程及verilog代码
网友经验分享: Verilog设计注意
关于同步与异步时序的Verilog一例
半导体、微电子专业英语词汇汇总
以DAC为例介绍SpectreVerilog数模混合电路仿真方法
IC设计与验证工程师友谊的小船说翻就翻
数字IC设计基本流程和所使用的工具
国外的数字IC面试题(非常详细,有答案)
读懂用好TimingReport
异步FIFO设计(非常详细,图文并茂,值得一看!)
平行宇宙的追逐--异步FIFO控制器的设计
异步FIFO为什么使用格雷码
数字IC设计工程师笔试面试经典100题(1~50)
数字IC设计工程师笔试面试经典100题(51~100)
同步/异步设计及metastability
为什么越来越多的数据中心使用 FPGA ?
基于FPGA的数字识别的实现
FPGA设计中遇到的奇葩问题之“芯片也要看出身”
FPGA就像是一张精密的画布 - DSP 专家给你一个选择 FPGA 的理由
聊聊
FPGA/CPU/PCIE/Cache-Coherency/CAPIFPGA是如何实现30倍速度的云加速的?都加速了哪些东西?
一文了解 FPGA 发展之路
【干货】腾讯云FPGA的深度学习算法
云中的机器学习:FPGA 上的深度神经网络
网友吐槽:9年FPGA工作总结,苦海无涯,穷逼多
FPGA数字电路设计经验分享(干货!)
干货!基于FPGA之低速协议设计实验手稿及源码
FPGA设计高级进阶
CRC循环冗余校验的原理与算法及FPGA实现
关于FPGA设计仿真和硬件实测不一致问题的讨论
如何扩展FPGA的工作温度范围
如何用单个 Xilinx FPGA 芯片数字化数百个信号?
一个FPGA工程师的个人工作经历总结
让 FPGA 视觉功能大众化
FPGA电源简介
FPGA实现除法运算
利用基于FPGA的模糊控制器控制蔗糖提取
利用 Artix-7 FPGA 设计高性能 USB 器件
FPGA应用文章:采用 Zynq SoC 测试新型存储器技术芯片
基于XILINX的FPGA的AES 128bit加解密算法
利用Xilinx FPGA实现高效并行实时上采样
FPGA实战演练逻辑篇(1)-FPGA与ASIC,FPGA与CPLD,VERILOG与VHDL
FPGA实战演练逻辑篇(2)-FPGA应用领域及优势,FPGA开发流程
FPGA实战演练逻辑篇(3)FPGA板级电路设计五要素
基于ARM的CRC算法和基于FPGA的算法性能比较
如何防止基于FPGA的项目误入歧途
Zynq片内XADC应用笔记
Zynq器件时钟子系统介绍
建立及保持时间、建立及保持余量的理解
软核MicroBlaze的C编程经验及技巧
Tcl在Vivado中的应用
Vivado使用详细介绍1:创建工程,编写代码,行为仿真,Testbench
Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
Vivado的使用介绍3:使用IP核
Xilinx FPGA入门连载2:Modelsim SE 10.1安装
Xilinx FPGA入门连载4:ISE中使用notepad++的关联设置
Xilinx FPGA入门连载6:ISE与Modelsim联合仿真之关联设置
Xilinx FPGA入门连载7:新建工程
Xilinx FPGA入门连载8:Verilog源码文件创建与编辑
Xilinx FPGA入门连载9:Verilog语法检查
Xilinx FPGA入门连载10:Modelsim仿真验证
Xilinx FPGA入门连载11:PWM蜂鸣器驱动之功能概述
Xilinx FPGA入门连载12:PWM蜂鸣器驱动之引脚分配
Xilinx FPGA入门连载13:PWM蜂鸣器驱动之综合、实现与配置文件产生
跟着我从零开始入门FPGA(一周入门系列):第一天:Verilog语法
跟着我从零开始入门FPGA(一周入门系列):第二天:组合逻辑设计
跟着我从零开始入门FPGA(一周入门系列):第三天:时序逻辑设计
跟着我从零开始入门FPGA(一周入门系列):第四天:
跟着我从零开始入门FPGA(一周入门系列):第五天:阻塞和非阻塞
跟着我从零开始入门FPGA(一周入门系列)-第六天:有限状态机
跟着我从零开始入门FPGA(一周入门系列):第七天:设计一个只有4条指令的CPU
FPGA入门连载一:0和1——精彩世界由此开始
FPGA入门连载二:Verilog/VHDL语法学习的经验之谈
FPGA入门连载三:表面现象揭秘——逻辑关系
FPGA入门连载四:内里本质探索——器件结构
FPGA入门连载五:第一个工程实例
Vivado使用详细介绍2综合实现管脚分配时钟设置烧写
基于FPGA的DDR3多端口读写存储管理设计
在低成本FPGA开发板上实现Oberon系统
全可编程抽象化:你的编程你做主
XILINX FPGA FIFO使用技巧
智能视觉系统中如何处理多图像传感器?
FPGA时钟和复位电路设计
FPGA设计,视时序为一切
在FPGA设计中,时序就是全部
利用FPGA对大规模MIMO信道进行特性描述
如何将PetaLinux移植到Xilinx FPGA上
关于FPGA设计仿真和硬件实测不一致问题的讨论
FPGA适合用在哪儿?OpenCL,C,和C++语言对FPGA和全SoC有什么用?
入门贴:FPGA中的INOUT接口和高阻态
科普:关于处理器你所需要知道的一切
科普:海思CPU的设计制造过程,看了以后真觉得华为不容易
网友最爱看的处理器IC设计相关图书
一文教你读懂芯片后端报告(做前端的必看!)
干货:数字IC后端设计全局观--数字后端做什么从RTL到GDS(137页PPT)
科普:海思CPU的设计制造过程,看了以后真觉得华为不容易
CPU DIE Photo 大全
普及贴:CPU的发展历程(X86篇)
一个从刚入大学就励志做CPU设计到毕业后如愿以偿的故事!
终于讲清楚了,看完这篇你也可以设计CPU了
科普:GPU是如何工作的?与CPU、DSP有什么区别?
在CPU IP授权上,ARM 是怎样战胜MIPS的?
从沙子到芯片,看看CPU是如何制造出来的
深度分析国产龙芯新架构CPU
CPU诞生鲜为人知的故事:首款8位CPU并不是Intel的,仅比4004晚了两个月
基于RISC-V架构的开源处理器及SoC研究综述
RISC-V与DSA!计算机架构宗师Patterson与Hennessy 演讲实录
RISC-V资料大全中文版!
科普:ARM与X86 CPU架构对比区别
从零到精通--处理器(CPU)的设计之路
说一说CPU与GPU的区别
自己动手设计专用处理器
励志!他设计了先进的指令集,申请三项专利,并设计出了自己的CPU!
分享|开源GPU,RTL源代码+验证环境+文档
Analog IC 难在哪里,结构?参数?版图?系统?(最新更新)
从一篇Datasheet中能学到什么?
IEEE JSSC论文分享:30GHz low-flicker noiseOscillator
彻底厘清振荡器中Flicker Noise问题--IEEE TCAS-II(2019)论文分享
全球顶尖芯片专家揭秘【低功耗芯片设计】真相
关于低功耗、低电压的bandgap电路
Low power RTL 设计优化,同等工艺下让你的设计功耗更低!
两篇关于RF PA 的博士论文
PLL经典讲义
神作:带宽!
功率谱密度
SerDes概述
深入浅出聊抖动(Jitter)
动态失调消除的方法(模拟IC设计黑科技!)
先进制程工艺集成电路ESD电路如何设计?
ESD讲义
成为一个资深Analog/RF IC Designer 需要怎样的经历?
功率半导体(VDMOS,IGBT,TVS)讲义
相比CPU,高性能模拟器件更担心被禁运,那么研发难点在哪儿?
RF PA 那些事
AACD 2017 Hybrid ADCs 资料大全
拉扎维16年写的-TSPC Logic
功率半导体器件基础(Baliga)(1085页)
模拟电路&模拟IC设计
模拟数字产品开发流程
SPICE简史
干货分享:测量自己的心电图(从理论到电路)
好的模拟IC工程师应该具有的素养
模拟IC设计领域的经典之作
是否需要模拟后仿真?
极点零点之我见
六本经典模拟IC书籍精彩评论及总结
模拟设计的100条圣经
模拟电路学习入门的建议
模拟IC流片经验分享
模拟IC年薪几十万师兄的模电学习经历
想成为一名模拟ic设计师在本科期间应该做哪些准备?
模拟电路设计的九重进阶
AnalogIC难在哪里,结构?参数?版图?系统?
模拟集成电路设计第二讲:传输函数,零极点的形成及时域响应
我还要不要继续学习模拟设计--一个跨行硕士的疑问
如何学习模拟IC设计
模拟大牛谈模拟工程师身价及发展方向
模拟电路应知应会200问
模拟后仿真的几种做法以及优缺点
关于模拟地与数字地很意思的解释
干货!深入浅出射频模拟电路设计经典讲义
伏模之路--模拟电路学习感悟
模拟IC设计真的很难学吗?
模拟IC正向设计流程总结
模拟学习感悟与总结
模拟滤波设计讲义
拉扎维模拟CMOS集成电路设计讲义Part3
拉扎维模拟CMOS集成电路设计讲义Part2
模拟学习感悟与总结