ab536597460529ce7eb7ab8e35c631f8.png

\\\插播一条:

自己在今年整理一套单片机单片机相关论文800余篇

论文制作思维导图

原理图+源代码+开题报告+正文+外文资料

想要的同学私信找我。

新手芯片设计工程师如何快速提高自己的水平?

前言

我刚刚入职的时候也有这样的疑问,由于三年没写过一行verilog。在网上的得到答案根本是:

学好Verilog;

要掌握FIFO;

时序处理等等。

但是这些答案在我工作的两年内,发挥的作用聊胜于没。

思来想去,数字IC前端设计(以下简称设计)仿佛没有快捷提高的方法,由于不同的方向区别比较大。抛开编程语言,设计的根底是协议,不同方向的协议根本不同。验证初期不懂协议也能做,把设计当成一个黑盒,依据接口写代码。但是设计不行,不懂协议连设计文档都没法写。

所以本文仅分享我对设计的了解,快捷提高大略谈不上。

岗位要求

在芯片设计的不同方向上,对工程师的知识体系和技能要求不一样。后端和SoC咱没做过,不了解。以我此时的岗位,数字IC设计(video)为例,该岗位对新手的大致要求是:

根据C模型,进行RTL实现;

会基本的验证,以方便配合DV工作。

简而言之,IP设计是算法RTL化。

IP设计类的ASIC岗位(ISP/Display/Video)应掌握以下事项:

懂协议;

依据协议和C模型,归纳总结,将协议硬件化,写设计文档;

依据文档,写RTL化代码;

RTL设计达到的优化;

会用C模型设计测试向量(test vector);

会用Verilog写local验证环境。

1. 协议

ASIC设计岗位工作的本质是协议RTL化。协议是根底,不懂协议,一切是空谈。协议假如简略,可能须要懂全部;假如复杂,只须要懂自己负责的那一块即可。

入职以后,我一直在啃协议,做项目期间也是一边做,一边啃。此外,协议和C模型并非完全相同,协议只是抽象,详细的算法达到和RTL编写要以C模型为准。

a06d5cb258324e6a5a4a392b39bd4860.pngvideo协议六件套

2. 设计文档

文档的内容包括:

模块框架图,

I/O接口,

ram说明,

状态机;

模块功能流程图;

协议实现重点的说明。

文档的意义不仅是给DV和算法看,同时也是整理思维,给自己看。

有些大佬能够不写文档,照着C模型直接写RTL,但是我不建议新手这么做。写完两星期之后,大略率忘记自己之前如何实现,为什么要这么实现。

从抽象层级来说,设计文档>协议>C模型>RTL代码。有时候几千行的RTL,用几句话就能描述完。假如没有文档直接看RTL,自己debug会相当耗时,也不利于后续DV的工作。

文档尽量写的充分些。我见过意识流的文档。虽然是英文的。但是根本是Chinglish。通篇独有框架图和接口表比较有用,真钻研起来,不如直接看代码。

假如项目紧要,来不及整理文档,能够将要点记录下来,写上关键词,方便项目完毕后回溯。

3. 协议RTL化

先依照C模型,堆code实现功能,然后跑通一个case即可,优化后续再做。从0到1是一件不容易的事情。应届生进入公司,一般要么有人带,要么有已完成的项目能够参照。这也体现了团队成熟的重要性。

协议和C模型在设计时是否有考虑硬件优化,直接决定了编写RTL的难度。软件思维和硬件思维差别宏大。

协议和C模型也存在对不上的情况,这时候就须要详细分析,有可能是C模型错了,也可能是协议错了,亦或者是自己了解错了。

算法认为在后台使用了一个简略的数组,然而在硬件用须要一个寄存器

de780f4547f0c706d3fa2d567fe0d9a9.png06e547e0471ca39210c227a3b1d9808b.png172ddb52f5f68987edfbd2d0f158a6fb.png

【文章福利】:小编整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!~点击绿色通讯软件搜索airuimcu加入。

堆,大了就得用ram。而且假如一个多维数组运用的不充分,对于ram设计压力是比较大的。假如依照C模型设计,会有相当多的浪费;假如采取数据不间断排列的方式,时序比较难做,读写控制逻辑也会比较复杂。

四. RTL设计达到的优化

优化是门艺术,作为菜狗,我能做的也不多。而且这是一个循序渐进的过程。遇到的问题和情况多了,会积攒到足够的感性素材,其次整理成理性素材。

独有深层钻研协议和C模型,并且搞懂了算法的达到规则,才好有的放矢。

C模型的设计,大多是依照软件思维设计的,有些设计对硬件不友好,甚至浪费存储空间。虽然功能是跑通了,但是并非最优解。有些数据在C模型中是用5bit表示,但是硬件达到用3bit,甚至1bit就够。

协议不断的在更新,有些子模块在新老协议中的功能相近,那么以前的逻辑能够直接复用或者微调代码即可;但是有些子模块的功能前后相差很大,这时候须要考虑计算单元和存储单元怎么样复用。

假如同一块的buffer变的超大,那么能够考虑新增一个ram,老buffer给其他功能单元或者子模块复用;假如同一块buffer小了很多,能够将老buffer做拆分,多的局部给其他模块复用。

结语

以上是我的经验之谈,仅供参考。

想要学习单片机的朋友关注我们,口令小哥,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

-END-

*本文系网络转载,版权归原作者所有,如有侵权请联系删除

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐