如何阅读大型verilog模块

理解芯片设计的过程包括从顶层spec开始,逐步深入到模块功能、数据流向、算法代码和状态机。通过查看模块图、代码和波形,以及运用工具如verdi,有助于提升对RTL代码的理解。在提问和学习时,应自顶向下,避免直接看底层代码和忽视整体功能。
摘要由CSDN通过智能技术生成
  1. 首先看最顶层spec,即整个芯片的功能描述,搞懂基本功能,模块划分,工作流程
  2. 看目标模块spec前面的基础介绍部分,搞懂基本功能,模块划分,工作流程,位宽定义,输入输出
  3. 看模块算法流程图,搞懂数据流向
  4. 再看高级语言表达的算法代码,如python
  5. 利用verdi查看电路模块图(类似于简单的综合图),了解子模块与相互连接
  6. 看主要子模块(某些模块是debug模块,一般不执行),画出主要模块之间的数据流向简图
  7. 看每个模块IO口,明白需要处理哪些数据,处理后输出的结果是什么
  8. 如果有状态机,看懂状态机的动作,必要时画出状态转移图配合理解
  9. 看assign和always,这才是真正执行功能的部分,配合注释理解,always块只看下面一半模块(上面一半一般是复位,不用看),先看赋值然后最后再看if中的条件
  10. 用verdi追踪重要信号的上游来源信号,和下游被驱动的目的信号,理解相互关系
  11. 拉出波形看,因为verilog是并行的,所以多了一个时间维度,很多时候只有几条波形并行变化的时候才能看懂
  12. 对着代码敲一遍,能够理解代码每一行的细节

注意:

  1. 步骤1-4可以多询问大佬,多网上搜索,因为大部分都是通用知识
  2. 步骤5-8只能多询问对应设计人员,这部分涉及模块具体的功能,在网上基本只能找到类似的参考问题
  3. 步骤9-12只能自己多琢磨,琢磨不透的再询问,因为RTL代码很容易理解,RTL的细节问题太多容易导致被问的人烦躁,通常不理解设计逻辑的时候再询问

避免:

  1. 避免一上来就看代码,RTL代码描述层次很低,一个简单的功能写十几行,很多都是没必要的重复,直接看几百上千行代码很容易看懂后面的就忘了前面的,很容易只见树木不见泰山
  2. 避免没搞懂顶层或整个模块的具体功能就向他人询问某处RTL代码细节,因为此时会出现自己无法提出清晰的问题,即使对方给出解答自己也难以理解,自顶向下理解很重要,上层还没理解就去理解下层容易淹没在一堆细节问题之中

以上,个人经验,欢迎讨论 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值