开源项目的代码学习
在阅读verilog代码之前,建议你需要了解大体功能,再去阅读代码,这样你读起代码来会很顺畅。
一、如何阅读源代码
1.基础知识:相关的语言和基础技术的知识。
2.项目功能:你先要知道这个项目完成的是什么样的功能,有哪些特性,哪些配置项。一般readme.md文件可以知道大概功能。(readme.md超级重要,一定要先熟悉)
3.用户手册:你先要读一遍用户手册,然后让项目跑起来,自己先用一下感受一下。
4.代码的组织结构:也就是代码目录中每个目录是什么样的功能,每个模块是干什么的。(自顶而下,先找顶层)
二、代码是由哪些部分构成的?
1.接口抽象定义。任何代码都会有很多接口或抽象定义,其描述了代码需要处理的数据结构或者业务实体,以及它们之间的关系,理清楚这些关系是非常重要的。
2.模块之间的联系。我们的代码经常调用其他模块,因为它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。
3.流程。这是代码运行的过程。一开始,我们不要进入细节,但需要在高层搞清楚整个业务的流程是什么样的,在这个流程中,数据是怎么被传递和处理的。一般来说,我们需要画程序流程图或者时序处理图。
4.具体实现。了解上述的三个方面的内容,相信你对整个代码的框架和逻辑已经有了总体认识。这个时候,你就可以深入细节,开始阅读具体实现的代码了。对于代码的具体实现,一般来说,你需要知道下面一些事实,这样有助于你在阅读代码时找到重点。
代码逻辑。代码有两种逻辑,一种是业务逻辑,这种逻辑是真正的业务处理逻辑;另一种是控制逻辑,这种逻辑只是用控制程序流转。
出错处理。根据二八原则,20% 的代码是正常的逻辑,80% 的代码是在处理各种错误,所以,你在读代码的时候,完全可以把处理错误的代码全部删除掉,这样就会留下比较干净和简单的正常逻辑的代码。排除干扰因素,可以更高效地读代码。
数据处理。只要你认真观察,就会发现,我们好多代码就是在那里倒腾数据。比如:打拍。我们可以借助仿真结果查看数据。
重要的算法。一般来说,我们的代码里会有很多重要的算法,比如加法器等。这些比较核心的算法可能会非常难读,但它们往往是最有技术含量的部分。
三、总结
阅读代码的方法如下:
1.一般采用自顶向下,从总体到细节的“剥洋葱皮”的读法。
2.画图是必要的,程序流程图,调用时序图,模块组织图……
3.根据结果分析代码逻辑,将逻辑归一下类,排除杂音,主要逻辑才会更清楚。