层次化综合中的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问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具