IC项目,门级代码的工艺库移植

  • 应用背景
  • 笨方法
  • 最佳方法
  • 关于RAM单元的替换思路

应用背景

IC项目,要求工艺从90nm移植到45nm环境。但是有一些模块,只有门级代码描述,而非RTL代码描述。

笨方法

针对门级代码,替换单元名称,替换单元的端口信号。

最佳方法

以DC综合为例,利用综合工具,实现门级代码的工艺库移植。
1. DC综合,吃库文件的时候,有link_librarytarget_library,分别对应源代码转换为DC综合库过程、以及DC综合库转换为最终目标库过程。
2. link_library吃90nm的标准单元库;
3. target_library吃45nm的标准单元库;
4. 由此实现应用要求。优势是没有人为改动,节省大量工作量。可以看做是完美移植,基本无需验证。
5. 最终用LEC,即形式化验证工具,比较90nm门级网表和45nm门级网表,达到完美验证效果。这一步骤是必要的,因为即便RTL综合,也需要做LEC,因为不能相信综合过程没有错误。
6. 如果有RAM单元,还需要RAM替换。这一步只能手动,因为RAM是不可综合的。

关于RAM单元的替换思路

假设有100种(共计200个实例化单元)RAM单元,实际类型肯定只有1r/1r1w/1rw/2r2w等4~5种。
最普遍的做法是,100种RAM单元,建立100个module。
还有一种做法是,利用参数不同,和verilog generate用法;只需要4~5个module声明。但是实例化部分就要修改200个实例化的名称。

综上所述,上述两种做法,没有太多区别。不过,个人仍然喜欢第二种做法,因为修改代码量会少很多;这样验证关心的内容也相应减少了。

另外,做RAM替换这样的行为,建议每一步骤,均使用shell或者perl脚本实现;这样可以提供一种验证软思路,用于多次检查代码修改的质量。
还有一点,做这种大量替换行为,一定要做好代码版本管理,利用svn或者git;git本地代码版本管理,相对svn,更方便一些。

你可能感兴趣的:(verilog)