集成电路设计(Integrated Circuit,简称IC)一般分为数字IC设计、模拟IC设计和数模混合IC设计。数字IC设计一般又会进一步细分为前端设计(Front-end Design)和后端设计(Backend Design)。 

前端数字IC工程师的工作一般包括电路规范(Spec.)的撰写,电路架构的设计,电路的实现以及验证、综合出符合要求的电路网表(netlist),最后按一定的工作规范要求提交netlist 给后端部门。

一个前端设计工程师的一天是怎样度过的呢? 早上九点打卡进入公司,到了公司座位后,多年养成的习惯是首先打开邮箱浏览一下邮件,看看昨天下班后有没有收到新的邮件,是否有比较紧急的事情需要优先处理的。今天还算不错,只有几封邮件,没有特别紧急的事情;不过有一封邮件是验证部门同事发的,邮件内容是我负责的一个IP昨天跑完的某个test case 有结果不对。 浏览完邮件后,就要对今天的工作任务做个简单的计划。每天早上花5~10分钟进行简单工作计划是很有必要的,既可以避免漏掉一些重要的事情,又可以清楚知道当天工作内容的轻重缓急。 今天主要有三件事:一、同仁负责的一个IP 有一个bug,需要对neltist 进行ECO 改掉,约好今天协助他一起解掉;二、前面说的负责IP 有test case 结果不对,需要今天跟验证部门的同事尽快沟通解决掉;三、今天下午四点有个技术讨论会,这是昨天就已经约好的会议。 工作计划安排好后,就是撸起袖子加油干了。 

首先介绍下ECO,ECO修改是基于标准单元设计流程中的一步。如下图所示:

ECO(Engineering Change Order)中文意思是工程改变命令,这一步实际上是正常设计流程的一个例外。它是对设计的layout进行局部的小范围的修改和重新布线,而不影响到设计的其它部分的布局布线,所以其它部分的时序信息没有改变。 根据功能的不同,ECO 可以分为功能改变和非功能改变。功能改变是指由于来自客户对设计的追加需求(spec改变)或者设计的最后阶段发现芯片存在 bug 的情况下进行的 ECO; 而非功能改变则是为了在不改变 RTL 网表的基础上修复部分时序以及串扰等问题而 做的 ECO。大规模的IC设计中,ECO是比较有效率的省时的方法,通常都会被采用。 昨天已经跟同事了解到,bug 是因为跨时钟域引起的,改起来比较简单。但是因为这个bug 是在netlist 交给后端部门后发现的,为了节省时间,不能再重新synthesis,只能通过ECO 的方法来改正。Bug不可避免,也无法知道会在什么时候被发现,所以ECO 是前端设计必须掌握的一项重要技能。ECO 完neltist之后,还要进行LEC( Logic Equivalence Checker是Cadence的一款形式验证软件) 检查,通过了LEC检查,才算是ECO 完成。LEC环境设置好后,丢job下去跑,等结果出来确认即可。这时就可以去做别的工作了。 接下来要去debug 验证部门同事反馈的testcase了。开始debug 之前先跟验证部门同事做了简单的沟通,确认了testcase 的设置情况,他建立这支case 要验证的电路功能,以及他是否有输出(dump) 我们想要的RTL waveform。这样的沟通对提高工作效率是非常有必要的,有经验的designer有时候可以通过这样的沟通,猜测出电路大概发生了什么问题,debug起来效率会事半功倍。简单的沟通之后,大致了解了case的状况,不过我并没有想出bug 的可能原因。因为RTL 是跟C model 做比对(这个IP建立了C model的算法模型),采用最基本的debug 手段,用verdi 打开这个testbench跑出来的波形,同时用gdb(C语言unix下的调试工具) 运行cmodel,从发生mismatch 的点一步一步往前查。对于电子专业的学生来说,写RTL代码看波形debug都轻车熟路,但是对C语言就不一定很熟练,C程序的debug可能也不很熟悉。如果还是学生或者工作有需要,建议C语言还是要花点时间来提高的。经过C model和RTL 的逐级电路比对确认后,发现有个运算式的RTL代码有饱和溢出现象,但是C model里面没有位宽的限制,所以结果没有问题。跟算法部门沟通确认后,C model和RTL 要都做相同的饱和处理。回过来想想,bug的发生是design的时候,考虑不够严谨,导致位宽计算有误,而运算结果溢出有要满足比较严苛的条件,验证都不容易能验到。 搞完这两件事之后,就到下午的技术讨论会了。技术讨论会的主题是跟验证部门同事讨论异步界面处理的验证问题。异步界面信号能不能从一个时钟域传到另外一个时钟域,大多时候是概率问题,验证很难全面验证电路是否正确。会议讨论的很激烈,刚提出一种验证方法很快就有人提出疑问,在不断的提议和不断的释疑过程中,大家慢慢形成了共识。 这就是一个前端数字IC设计工程师的普通一天。设计、验证、debug只是工作的一部分,当然是重要的一部分;技术讨论,跨部门沟通,还有定期或非定期的头脑风暴同样不可或缺。随着工作年资的增长,或许还要承担一定的技术传承。 用到的工具:DC(design compiler) /LEC/ RTL/VCS/ verdi /GDB /C语言 

E课网《数字前端设计工程师就业班》即将开课了!从理论基础到项目实战,由浅入深,帮助你全面掌握数字前端的专业技能和项目经验。目前已帮助2000+同学成功拿到高薪的数字设计offer!

【扫码咨询课程详情】