层次化综合中的uniquify和set_dont_touch问题

在之前的博客里介绍过了层次化的综合方法。

但在使用该方法时有一个特殊问题需要注意,对于需要多次例化的模块来说,直接设置set_dont_touch属性会导致pr阶段时工具报ununique问题。

参考如下文章,可以知道问题的来源是如果Non_uniquified 网表,多次实例化模块在网表中只有一个定义,而多次引用同一定义的各个实例内部的flop都需要各自的时钟,从而时钟树上这些模块的clock_net名是不同的,来自layout 工具的时钟树的信息和DC中原网表无法对应,所以会出现两个不同的net和一个相同的port连结,这是不允许的。

https://blog.csdn.net/hepiaopiao_wemedia/article/details/123334713

https://blog.csdn.net/kevindas/article/details/115920834

尽管在综合阶段时,compile_ultra命令会自带uniquify的功能,但如果在约束时就对网表设置了set_dont_touch属性,那么compile_ultra阶段时的uniquify功能就会失败。因此解决的方案其实也很简单,只需要在set_dont_touch属性前运行uniquify,完成多次实例化模块的定义重命名后,再设置set_dont_touch属性就可以了。

通过对比网表,对于non_uniquified网表来说,多个被实例化的模块只能找到一个定义,例如

module U (...)
...
endmodule

module TOP (...)

U U1 ();

U U2 ();

...
endmodule

而uniquify之后就可以发现定义也区分开了:

module U_1 (...)
...
endmodule

module U_2 (...)
...
endmodule

module TOP (...)

U_1 U1 ();

U_2 U2 ();

...
endmodule

因此也不会再出现之前的ununique问题。

posted @   sasasatori  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
主题色彩
点击右上角即可分享
微信分享提示