牛人说说自己数字设计的经验_陈涛
这个问题大了点,要花些时间才能写完,写错了自己挨顿骂是小事,减慢了大家奔小康的速度,耽误了国家的经济建设,可就是大事了,,,开个玩笑,其实我就是有那个贼心,也没有那贼能量!
下面言归正传。 要提高自己的IC设计水平(仅限于我熟悉的前端和后端,不包括 circuit design, RF等领域),自己的体会是: 深刻理解基本概念, 熟练掌握设计语言, 正确理解设计流程, 虚心学习前辈经验。 估计是我语文没有学好,所有这些道理听起来没有什么新意,等我详细解释这后,希望大家能够觉得还有那么一点点收获。 (1) 深刻理解基本概念 无论是做前端还是后端,有些共同的基本概念一定要理解它的真正含义,以及与之相关连的因素,只有这样,在以后的实际应用当中,特别是遇到了复杂的情况时,才能够从基本概念出发,分析出真正的问题所在。 比如:hold time, 什么是hold time估计大家都知道,如果要深入了解的话,就要问自己, 为什么要设定hold time? 哪些pin要hold time? 为什么hold time有负数? 为什么hold time与时钟周期无关? 有时同一个单元在电路的不同地方被使用,为什么hold time相差很多? 综合时要不要解决hold time的violation? 在multicycle时,为什么一般hold time不是setup的周期数减一? 类似的基本概念包括:flop & latch, clock gating cell, setup time, hold time, input delay, output delay, fanout, transition time (slew), clock skew, clock latency, clock uncertainty, clock skew, generated clock, capacitance & loading, multicycle, false path, ideal net, 应该还有很多,大家接着补充吧。 (2) 熟练掌握设计语言 至少一门ASIC设计语言还是需要的吧,建议学习verilog,它不但比VHDL好学好写,而且EDA工具对它的支持也比对VHDL的支持好,记得有人问过,有没有遇到synopsys DC综合出来的netlist做equivalence检查时通不过的,据说在VHDL上发生得较多。 verilog里面纵向又分为verilog-XL,Verilog2001和system verilog,横向分为verilog function和Verilog RTL。不要你精通所有的语言,但是要精通一门,要知道它们的区别,懂得何时使用什么样的模式,读得懂别人写的程序,会做仿真和调试。 (3) 正确理解设计流程 就算你是只做前端,或者只做后端,还是要了解整个设计的流程,每一步作的是什么,为什么是这个顺序,每一步要达到什么样的结果,哪些是一定要在这一步里解决的问题,哪些是可以留到下一步解决的。这样你就不但知道如何同别人合作,还知道如何避免被别人栽赃陷害,还是说好听一点,叫保护自己吧。 (4) 虚心学习前辈经验 讲到这里你一定会问:怎样才能学到上面说的知识哪?有两点十分重要,这是我多年来最深刻的体会。 第一:要有实际的设计,虚拟的作业、光啃书本见效甚微,只有亲手去作真正的设计,遇到困难,解决问题才能提高。 第二:初学者一定要有一个经验丰富的前辈指引。现在的EDA工具太复杂,选项多如牛毛,实在让人无从下手,自带的教程也很肤浅,从那里学不到什么高深的知识。如果有一个专家指点迷津,跟着他作过一两个设计后,就能学到很多书本上没有的东西,比如如何分析问题,找出解决的方法,什么是标准的设计流程,完整的脚本文件等。 |