SystemVerilog模块端口宽度不匹配:单bit输入受前置向量影响?
问题根源与解决方法
为什么works被识别为3位?
你在模块端口声明里写了:
input logic [2:0] In, works,
SystemVerilog的语法规则是:同一个方向+数据类型+位宽修饰符下的所有端口,会共享这个位宽。所以这里的[2:0]不仅作用于In,也会自动应用到后面的works,导致works被声明为3位的logic [2:0] works,而你的测试平台里works是1位的logic works;,自然出现端口宽度不匹配。
为什么Out也出现宽度不匹配?
错误信息显示测试平台的8位Out连接到了模块的1位Out,这是因为你模块里的端口声明写法有语法歧义:第一行末尾的逗号,导致模拟器错误解析了Out的位宽。正确的端口声明应该将不同方向、不同位宽的端口分开写,避免解析混淆。
修正后的模块代码
module random ( input logic [2:0] In, input logic works, // 明确指定works为1位 output logic [7:0] Out // 独立声明输出端口的位宽 ); // 模块内部逻辑 endmodule
如果你的实际需求是works为3位,那只需要把测试平台里的works改成logic [2:0] works;即可,不需要修改模块声明。
内容的提问来源于stack exchange,提问作者destroyer806
相关产品推荐
相关产品推荐

