ASIC中IP核的使用——包括VCS和DC
🔈声明:
🔑未经作者允许,禁止转载
🚩推荐一个IC、FPGA新手入门的好网站:👉快 点 击 进 入 学 习 吧👈
之前一直想在DC等ASIC中将项目中的寄存器堆换成ram,奈何资源和能力都有限,一直没完成。 最近机缘巧合有条件将这个任务完成了,简单记录并分享一下。
memory compiler
ASIC中的ram和FPGA平台中的ram使用并不同,虽然也是直接调用IP的,但是ASIC中需要厂家的memory compiler工具来生成指定大小功能的ram。
我是用M31公司的工具,其他家的工具内容好像更细致
输入指定words和bits等信息后会自动生成带有.v .datas .lib的文件夹,我们所需的ram的.v文件就在其中,设计电路时直接调用这个IP即可。
VCS仿真
既然生成IP后,就需要验证设计功能是否正确,在此我只做一个ram简单的读写测试来记录VCS的仿真流程
- 大致流程分为编译,运行和波形仿真。
- vcs的脚本是Makefile
通常一个Makefile会反复使用,所以在执行的时候会将测试名作为变量输入,防止反复更改脚本。
使用-ucli选项可以使VCS编译完停在时刻0处,等待用户手动运行。
后面的macro内容为自己编写时需要的macro,用来控制testbench的功能是否执行。
例如此处的FSDB_DUMP用来控制时候产生fsdb波形文件。
这里gsim选项用来控制仿真用DC综合后的.v文件还是rtl级的.v文件,在一些简单的仿真中可以不加这个。
STD_LIB连接的是工艺库对应的文件,估计也是门级仿真用到的。
- 主要还是要记录一下VCS的cmp_options
- -full64(64位机选项)
- +v2k(支持verilog-2001标准)
- -debug_access+all(交互仿真,不清楚意思,一般都加)
- notimingcheck (屏蔽specify块中的时序检查)
- -timescale=1ns/1ps(设置时间范围,最小单位1ns,分辨率1ps)
- error+100(编译允许错误累加到100)
- +lint=TFIPC-L(如果有的模块的端口定义了,但是没有连接,用这个选项,编译器会给出哪些端口没有连接)
然后是verdi的打开
通常在脚本中设置
取消启动界面,将RTL文件,macro选项,STD_LIB库导入verdi中。
随后verdi读取testbench写出的fsdb文件就可以查看波形。
DC综合
整个DC的脚本还是模仿着写的,很多指令都不懂,这里先记录一下整体流程,后续再专门学习一下DC的指令。
如果检查完IP功能都没问题了,就可以进行综合评估面积和频率了。
这里DC的脚本模仿大佬分成了三步写
- 导入库
- 读入rtl文件
- dc选项的设置
- 导入库需要工艺库db,eda自带的sldb(这个不知道是啥),和IP的db。
- 此处需要注意,如果是memory compiler生成是只有lib文件的,db需要用lc进行转换,这个在最后介绍
readRTL脚本中前面应该都是在处理缓存空间?然后读取rtl代码,设置顶层,link
syn_dc脚本则是运行dc的主脚本,综合的选项都在这里设置。
需要注意这里设置的 TOP_MODULE必须需要综合的顶层名
设置选项后就是编译,打印报告了。
如果用了IP后,IP的面积就会算到black box area中。
用lc将lib文件转为db文件
最后介绍一下如何将ram核的lib文件转换成db文件
synopsys有一个library compiler的工具
进入后读取lib文件,后write出db文件就可以了
按照步骤执行即可
最后给大家安利一个好网站:
Verilog的学习还是要多以练习为主,想要练习Verilog的同学,推荐可以去nowcoder看看,他们现在的题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费
搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!