上一篇文章细说了设计文档对于IC前端设计人员的重要性;这次集中在前端设计从RTL编码–>RTL freeze这个过程中所要工作和打交道的地方;
IC前端设计具体工作:前期方案讨论参与、设计文档Review、微码code、Spyglass质量检查---->交付第一版代码----》验证&debug—》DC综合;
1 前端
1.1 前端设计
- 编码时心中有电路
RTL编码 = code Standards + quality check.
slef-annote is the good annotion;
1.Name: 变量命名、模块命名、代码段命名;能在代码里自注释的就不要额外添加注释,cleaner is beauty.
2.能复用的东西,尽量参数化;
3.敏感信号列表用*,而不需要用具体的信号;后面综合会自动替换掉;
3.No latch: 产生latch的原因是:时序逻辑值可以不变,但组合逻辑必须每个周期都赋值;具体避免:实现组合逻辑的时候:case有default,if有else;
4.No 组合逻辑环:指同周期内A变化的条件是B,B变化依赖A;
5.异步信号绝不能直接打拍:特别考虑清楚怎么做,是用多级打拍,DMUX、异步FIFO等;
6.划分模块编写,top集成代码;
… - Spyglass检查
code写完后,经过spyglass质量检查,主要是涉及Lint和CDC检查;
Lint检查:fatal、error、warnning和info;
CDC检查:用于检查跨时钟域的信号;
Spyglass是一个吃经验的家伙,不断进行看检查分析信息提示;这样才能成长;
1.2 前端验证(DV)
这个EDA验证目前是基于UVM框架来搭建的验证环境;UVM是System Verilog的类库:验证的思想能够在这里面通过具体的技术很好地支持;
使用SV+UVM机制快速搭建验证环境,但前提是要能够比较准确理解Design Spec,完成串讲 + 验证环境搭建 串讲;后就开始环境搭建工作了;
验证有按照不同角度分类和衡量验证地完备行地客观机制;验证一定要细心,有高度地责任心;验证绝不是DE地一个附庸,而是非常非常重要地岗位和自己有自己地技术栈;
作为一个前端人员,我的小目标就是能够先充分掌握设计和验证,在自己的设计基础上,进行快速搭建一个验证环境,能够快速进行逻辑迭代
对于验证最重要的一个技术栈:UVM;展开说是一个很大的章节;学习使用UVM对使用SV和C++都是一个好的具体实践;
----End—到这应该前端的范围是包括设计和验证了;
1.3 FPGA原型验证
即将SoC的设计代码裁剪移植到FPGA上,有时候一个FPGA板子不够,需要2~4块板子,这块没有具体接触过;即先做个10:1的快速验证和debug;毕竟FPGA硬件还是比基于CPU上跑的EDA要快得多;
1.4 Emulator
这个具体没接触和了解过,但是和这个同事打过交道;给她回答过一些问题和一些路径;
具体的:cadence Palladium,Synopsys Zebu,Mentor Veloce.
1.5 软件验证
软件同事也会进行跑case进行设计的逻辑验证,相比EDA验证,他们的优势是:烤机;可以进行超大流量、超长时间的测试,最接近实际芯片应用场景,最了解芯片实际应用场景;在这里软件同事会和EDA验证同事都会向设计进行提问题单;
所以对于大芯片,越是芯片规模大,验证就越重要 越规范 越受重视
–End–以上是我在工作过程中:RTL freeze之前所要必须进行和要完成的工作
[Refer]
1.https://zhuanlan.zhihu.com/p/510955407