代码看不懂,逻辑理不清,尤其是控制信号加上时序电路就蒙了,有时候还会钻牛角尖。我的基础感觉就是会写个状态机,会画时序图。现在我每天都很茫然,而且感觉自己越来越笨了。我到底该怎么办?


这个问题让我想起了才入行的自己,那时候我也不过是一个才入坑的新人,估计跟楼主情况差不多,对任何协议任何经典架构都没有什么认识,研究生实习了一两年就入了坑,什么也没想,什么前途如何,薪资如何等等。那时候的IC行业根本没有现在火爆,隔壁互联网行业如火如荼,IC产业也只是很多人口中的「夕阳产业」。

只是我觉得自己脑容量有限,不想考虑十几年过后的事情,脑子里面只有一个好奇的事情,我就想知道所谓的数字电路究竟里面是怎么样的?就选择了这个行业,仅此而已。

言归正传,我自己有一套比较成熟的复盘体系,早期的一些总结里面的一些话我觉得很适合送给你作为参考。

1,细节迷宫

新手最容易犯的错误就是上来就啃代码,这是一个非常大的错误。这个错误的危害之大是很多不会总结的人直到职业生涯结束都没法悟透的问题。接手一个新的task,第一件事情应该是寻找spec或者做过的同事寻求帮助和具体指导。如果是一个对公司来说都是完全陌生的新业务那么需要寻找更高层演算法或者架构师的帮助,总之,代码只是表征数字电路模型运行的表相,归根到底是designer们对演算法的理解的向外表达。具体说,在看懂架构读懂并理解演算法要做什么事情之前,和大致步骤之前,RTL是完全不能碰的。一旦你触碰了代码并陷于其中,你会被细节锁死在前任designer设计的「细节迷宫」当中。直到心态爆炸为止。应该就是题主的状态。

2,逻辑沼泽

所谓」逻辑沼泽「是指在对设计不熟悉的情况下阅读RTL,因为追寻一个细节信号,把自己陷入由逻辑构成了沼泽当中,最终的结果就是在沼泽中"追兔子",把自己彻底陷死为止 。具体的说,需要等你自己不看spec或者寻求前任帮助就可以大概在脑中刻画出演算法的准确步骤和一些重要细节过后,这时候你才可以开始接触RTL,切记在新接到的陌生设计中,最重要的就是要避开"逻辑沼泽",抓大放小。你前期的知识储备就是你在这个沼泽中的地图,从具体RTL中找到演算法的那些重要步骤的体现,再以此为主线对细节进行梳理。这个顺序非常重要,绝不能改变。

3.复盘

很多新入行的或者才开始工作的朋友会忽略复盘的重要性,我另一篇回答中分析过这个能力。这一点的重要程度一点不比前两点弱,甚至更重要。如果你一股脑的向前冲,很容易偏离路线而不自知,你的知识体系只是在苟且中累积。具体到细节就是说在一段时间过后,(间隔长短根据各自的情况有所不同)全面回看前一段时间的所有事务,并形成书面文字总结下来,主要内容最少要包括技术方面,时间把握方面,知识储备方面,或者一些经验性质的总结以及后续弥补的措施等等。需要注意一点就是,总结不要过于流水账,要至少3个月的时间间隔,但不能长于半年。

最后,送题主一句话,识不足则多虑,威不足则多怒,信不足则多言。

希望题主你不要想太多,混乱状态只是暂时的,每个人都会遇到,如果遇到这么点困难就轻易转行或者退缩,总有一天会无路可退。


1)首先对数字电路有一个基本的概念:全并行,想像你面前的代码就是一堆分立元件,同时工作。

2)数字电路对比高级语言,加上一个时间维度,每个单位时间(时钟周期)是一个单位。

3)在每个单位时间之间,也就是时钟的edge,这一堆代码,触发一次,各自动一下,随后的整个单位时间就保持不变。

搞清楚上面之后,再到如何看代码,理逻辑。

先看总体功能,做了什么事;再去看代码,理时序,一般Spec文档不会把工作时序写的特别详细,这就需要慢慢看懂了,数据如何进入,中间如何处理等等。最好能要个波形对著看,就比较容易明白。


小弟也是刚入行不久,学生时代也做过一些晶元,可能稍微有点经验,就当心得分享一下。

1.理解需求

不要被数字电路的外表迷惑了,以为这是个写代码的工作。它本质上还是电路设计,只不过你用行为级的方法描述了出来。所以理解电路的需求就非常重要。首先要清楚你的电路从哪来,到哪去,你用它想做什么,实现了什么功能,前面大佬说的好,这些一般都会在spec中体现,spec看不明白不要紧,交给你的同事大多都会了解一些,多请教。当你彻底搞明白你用这个电路要干嘛后,开始分析RTL就会有一种豁然开朗的感觉。

2.找寻主干

刚接触数字电路很容易犯的错误就是:从头看代码 看到一个不懂的逻辑 开始研究 陷入迷茫。显然这是错误的,卡住你的这个部分,很可能只是整个module中的一小块,可能只管一个输出,或者仅仅是一个bit位校验。

那正确的看代码方式是什么呢?其实看代码就跟语文阅读理解一样,先找主干,很可能是一个/几个关键的状态机,如果你觉得找这个很困难,建议先顺著top的interface开始看,把interface的信号捋清。主干看明白,再去填补细枝末节,就eazy多了

3.细节实现

看明白主干,到RTL的具体实现,演算法的具体实现上,还有很多技巧,这个靠悟我觉得比较难,主要还是多看,多学别人的写法,遇到好的实现,就记录下来。一个模块你写出来的和别人写出来的,功能可能一样,但综合出来面积功耗可能天差地别,这时候就要想一想,代码里这个地方为什么他要这样实现?我的写法行不行?如果行,那优劣各在哪?比较的多了,你就会明白很多东西。

以上也是我个人的一点经验,可能有谬误的地方,希望大佬们指出,轻喷,谢谢!


没事,做个几年,会发现更迷茫了,然后就改行去做互联网了~


慢慢啃,这是个长一期努力的工作,祝你成功。


坚持下去,转任CEO,迎娶白富美,指日可待


跑一遍模拟试试,加速理解


有个HDL语法练习的网站


推荐阅读:
相关文章