文章目录
1. 设计前期规划
1.1 设计需求分析
- IP要完成哪些功能,如何分步实现
- 输入输出分别是什么
- 用到哪些资源
1.2 IP分类:算法模型、接口
- 将算法翻译称为逻辑电路,涉及到算法优化使得其更容易被实现,如数据定点化、整形化;
- 接口如USB、SATA等,对算法的要求不高,但是要对协议足够理解;
1.3 数据结构定义
- 每一个子模块需要什么变量
- 若需要memory,数据如何在memory中排布
- 通过数据结构应能够描述清楚IP的功能流程,看着数据能够描述功能如何实现
- 下面是一个卷积神经网络数据结构的截图:
1.4 系统框架定义、功能级流水线划分
- 整个的IP顶层接口如何
- 如何将大的IP划分成多个小的功能模块
- 模块间功能流水线是怎样的
- 预先考虑是否需要FIFO、RAM等资源,需求量、位宽如何
- 预先考虑是否需要DDR,需要多大容量,带宽如何
1.4.1 一个IP的大框架示意图
1.4.2 子模块划分
1.4.3 功能级流水示意图
- 按照算法功能划分各个模块的功能,以流水线的形式表达出来
1.4.4 数据在DDR中的结构
1.5 子模块功能定义
- 将上述1.4.3 功能级流水示意图中各个功能模块进行功能定义
1.6 子模块电路结构定义、时序级流水划分
- 子模块内部也需要数据结构
- 完成功能需要如何设计流水线或状态机
2. 设计中期RTL coding
2.1 子模块RTL设计
2.2 子模块RTL仿真、验证
- 大的IP有必要做子模块的仿真验证,这样比较快
- 总的模块仿真时候bug累积太多不易排查、仿真验证速度太慢,影响效率。
2.3 IP集成与IP系统级别仿真验证
- 顶层例化与连线,信号名最好有关联,这样比较容易
- IP级别的仿真验证
2.4 代码检查
- 是否生成latch
- 是否有信号未赋值
2.5 总的设计检查
- 将最初的设计目标进行检测,如功能是否完全实现、带宽是否匹配
3. 设计后期综合与验证
3.1 逻辑综合
3.2 形式验证
- 检查RTL设计与综合的网表是否匹配,防止EDA软件出错。
3.3 FPGA验证
- 看FPGA上运算结果是否和算法模型一致,从而确认RTL设计无误