模块端口多维数组拼接:VCS与DC Next编译兼容性问题咨询
解决VCS与DC Next的Unpacked数组端口连接兼容性问题
问题背景
需要将3个64位packed输出端口拼接成temp_v1模块的unpacked数组输出端口,但两款工具对语法的支持存在冲突:
- 直接使用
{top_fab_diu_tmu_time_o_0,top_fab_diu_tmu_time_o_1,top_fab_diu_tmu_time_o_2}连接时,VCS报错要求添加'转为赋值模式;但添加'后,DC Next又不支持端口连接中的赋值模式语法。
兼容解决方案
核心思路是通过中间信号过渡,绕开工具对端口连接语法的支持差异:
- 在
temp模块内部定义与temp_v1端口类型完全一致的unpacked数组中间信号 - 用标准的数组索引赋值语法,给中间数组的每个元素分别赋值(该语法两款工具均完全支持)
- 将中间信号直接连接到
temp_v1的对应端口
修改后的完整代码如下:
module temp ( output logic [64-1:0] top_fab_diu_tmu_time_o_0, output logic [64-1:0] top_fab_diu_tmu_time_o_1, output logic [64-1:0] top_fab_diu_tmu_time_o_2, ); // 定义与temp_v1端口匹配的中间unpacked数组信号 logic [63:0] temp_tmu_time [3]; // 标准数组索引赋值,两款工具均支持 assign temp_tmu_time[0] = top_fab_diu_tmu_time_o_0; assign temp_tmu_time[1] = top_fab_diu_tmu_time_o_1; assign temp_tmu_time[2] = top_fab_diu_tmu_time_o_2; // 直接连接中间信号到端口 temp_v1 u_temp_v1 ( .top_fab_diu_tmu_time (temp_tmu_time) ); endmodule
module temp_v1 ( output logic [63:0] top_fab_diu_tmu_time [3], ); // 模块内部逻辑实现 endmodule
方案原理
完全避开工具支持不一致的端口连接语法,改用两款工具都兼容的标准SystemVerilog语法,彻底消除兼容性冲突,同时保持代码的可读性和可维护性。
内容的提问来源于stack exchange,提问作者Idan Rahamim
相关产品推荐
相关产品推荐

