应用背景笨方法最佳方法关于RAM单元的替换思路
IC项目,要求工艺从90nm移植到45nm环境。但是有一些模块,只有门级代码描述,而非RTL代码描述。
针对门级代码,替换单元名称,替换单元的端口信号。
以DC综合为例,利用综合工具,实现门级代码的工艺库移植。 1. DC综合,吃库文件的时候,有link_library
和target_library
,分别对应源代码转换为DC综合库过程、以及DC综合库转换为最终目标库过程。 2. link_library
吃90nm的标准单元库; 3. target_library
吃45nm的标准单元库; 4. 由此实现应用要求。优势是没有人为改动,节省大量工作量。可以看做是完美移植,基本无需验证。 5. 最终用LEC,即形式化验证工具,比较90nm门级网表和45nm门级网表,达到完美验证效果。这一步骤是必要的,因为即便RTL综合,也需要做LEC,因为不能相信综合过程没有错误。 6. 如果有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,更方便一些。
新闻热点
疑难解答