在IC设计过程中,我们时常需要接触新模块,因此如何高效学习一个新的模块尤为重要。
本文将简述自上而下结合自下而上的学习方式。
自上而下,即从整体到细节:首先了解模块核心功能,其模块在系统中的位置,数据流是如何处理的
自下而上,即从细节到整体:从通过模块代码、详细设计说明文档等细节点梳理功能是如何实现的。
自上而下
明确模块定位
首先理清楚模块的定位,用简单文字描述模块作用,可以找熟悉的同事请教。
模块的功能定位有很多,例如控制调度、数据缓存(Cache)、数据校验(CRC)、数据搬运(DMA)等等。
例如,在 SoC 设计中,一个新的 DMA 模块,其核心目标是实现外设与内存之间的高速数据搬运,以减轻 CPU 负担;而一个 PCIe 模块则是作为芯片与外部设备的通信接口,负责数据的高速传输。
明确模块间的交互
梳理当前模块与其他模块之间存在哪些接口,以及接口的作用
数据接口。
例如:一个读请求接口能够发起读请求,一个读响应接口能够接收读数据,例如一个发包接口,将收到的读数据按协议格式将数据包发送出去。
流控接口
流控接口能够了解反压是如何实现的
时钟、复位信号等等
整理模块数据流
梳理模块数据流是如何处理的,不同的数据流分布经过了哪些模块,进行了哪些处理步骤。
例如以太网帧在MAC模块会添加前导码、帧起始定界符(SFD)、目的 MAC 地址(DA)、源 MAC 地址(SA)、类型 / 长度字段(Type/Length)、添加CRC字段,并且填充帧间隔。
通过仿真波形查询
阅读配置流程说明文档
通过阅读配置流程说明文档了解模块配置步骤,进一步理解其功能作用
自下而上
自下而上,即从细节到整体:从通过模块代码、详细设计说明文档等细节点梳理功能是如何实现的。
采用2H+5W方法对自己提出问题,寻找答案
5W(明确问题)
What(是什么)、Why(为什么)、Who(谁)、When(何时)
2H(明确执行的具体方式)
How to do(如何做)、How much(多少 / 程度)
可以从如下角度使用2H5W进行分析
接口上模块的输入、输出信号入手
内部逻辑从memory、fifo 的读写使能信号入手
案例说明
请求信号vld是如何产生的、是如何产生的
收到的rsp data存到了哪里
Data buffer中的数据是如何写入的,是何时读出的
memory读写信号是如何产生的,是何时产生的
调度模块的请求是如何产生的,是如何产生的
什么操作触发了数据读写请求,在何时产生的
文章来源于IC小鸽,作者
报名即将关闭
西门子EDA大会
8月28日 上海