NVDLA学习笔记:002

少说废话,多看代码。

002.

使用tmake生成NVDLA的rtl代码,配置

Tree

芯片开发项目要处理各种数据,不同的数据需要放在不同的目录下,就构成了一个项目的文件树。小到IP模块,大到SoC系统,都要有相应的目录结构。

以芯片前端为例,需要处理的数据可能包括以下几类:

1. 各种文档

比如模块设计spec,验证plan,环境使用手册,软件API手册等。

2. rtl源码

模块设计代码,顶层集成,以及各种通用模块的代码库。

3. 验证环境

testbench,测试用例以及运行脚本环境。

4. 综合环境

综合脚本,时序约束。

5. FPGA

与FPGA相关的环境、脚本、与电路板相关的文档资料。

6. 第三方IP数据

依据交付方式不同,可能是源码、网表,也可能是硬核交付提供相关的行为仿真模型。当然也包括相关的验证环境和测试用例。

7. 工艺库

foundry提供的标准单元,IO库,以及memory库,前端会用到仿真模型和时序库。

8. 算法、软件

比如算法模型代码及相关运行环境,各类应用软件相关代码等

9. 设计完成的输出数据

除了源代码之外,有netlist,约束脚本,验证环境,各类report,文档等。

10. 运行时产生的临时数据

包括各类log文件,波形文件,编译的中间结果,程序出错的coredump

如何构建一个项目的目录树,好像没有通用标准,根据项目的类型,团队的规模,公司的项目继承性,各家有各家的不同。有一些通用的思路可能需要考虑:

公用的数据要保证版本唯一性。比如公用代码库,工艺库文件等,需要统一存放,由专门的账号进行维护。

不同类型的数据要分开存放。比如文本类型适合源码管理软件(svn,git等),但是大规模测试数据可能更适合集中存放,另外Windows平台编辑的一些文档可能需要单独维护。

临时数据要单独存放,最好用quota为每个用户的磁盘容量进行限制,防止由于调试过程中出错导致磁盘空间耗尽(出错的情况下,coredump,log文件,波形文件,编译数据都可能出现异常)。

不同用户的数据和项目公共数据要方便同步,避免出现用户的局部修改影响整个项目database的运行。

Config

项目开发中需要用到各种配置文件。比如:

EDA工具的版本和路径

第三方IP和工艺库版本及路径

全局参数

Linux环境,比如shell版本,make版本,源码数据库,job提交参数等。

这些文件要小心管理,严格统一,确保整个团队所有用户都使用相同的配置。

Make

IC前端设计开发,有很多琐碎的事情,会用到各种不同的工具。为了简化流程,提高效率,可能会写各种大大小小的脚本,比如shell脚本,perl/python/Tcl,也可能再调用一些C/C++,Java代码,可以用Makefile做流程的管理,也有可能在Makefile上面再包一层合适的人机接口程序,最终希望一个就完全搞定。

是一个perl脚本,读入tools/etc/build.cfg,然后按照spec/defs/*.spec中描述的依赖关系,完成相应的代码配置工作,相当于对Makefile做了一层封装。在每个具体步骤中,又会有单独的脚本(shell/perl/python)来完成。

在生成RTL代码过程中,需要首先生成整个IP的配置和寄存器相关文件,然后根据配置(主要是一些全局的参数/宏定义)来对源码进行一定的修改。生成输出后目录结构如下:

以上抛砖引玉,希望大家一起交流。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181024G20M6U00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券