少说废话,多看代码。
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的配置和寄存器相关文件,然后根据配置(主要是一些全局的参数/宏定义)来对源码进行一定的修改。生成输出后目录结构如下:
以上抛砖引玉,希望大家一起交流。
领取专属 10元无门槛券
私享最新 技术干货