Reputation: 6647
As you can see in code below I have the same parameter name in both package files and the compiler fails due to this ambiguity. How to fix the SystemVerilog code in the case below?
//--------------------------------------
package register1_pkg;
parameter base_core_regs = 32'h00003000;
parameter addr_testreg = (base_axicore_regs + 32'h0000000C);
endpackage
//--------------------------------------
package register2_pkg;
parameter base_user_regs = 32'h00007000;
parameter addr_testreg = (base_user_regs + 32'h00000014);
endpackage
//--------------------------------------
module testbench();
timeunit 1ns/10ps;
import register1_pkg::*;
import register2_pkg::*;
task write;
input integer addr;
input integer data;
begin
$display("write addr:%x data:%x", addr, data);
end
endtask;
initial begin
write(addr_testreg, 32'hABCD1234);
$stop;
end
endmodule
Upvotes: 0
Views: 1804
Reputation: 42748
You cannot use the wildcard import ::*
when you have multiple packages with the same symbol name you want to import. You need to explicitly reference the package symbol to remove the ambiguity.
You can either do an explicit import:
import register1_pkg::addr_testreg;
or you can explicitly reference the symbol without importing it
write(register1_pkg::addr_testreg, 32'hABCD1234);
Upvotes: 1
Reputation: 13987
Just delete your import
statements and do this instead:
write(register1_pkg::addr_testreg, 32'hABCD1234);
write(register2_pkg::addr_testreg, 32'hABCD1234);
https://www.edaplayground.com/x/Kpfe
//--------------------------------------
package register1_pkg;
parameter base_core_regs = 32'h00003000;
parameter addr_testreg = (base_core_regs + 32'h0000000C);
endpackage
//--------------------------------------
package register2_pkg;
parameter base_user_regs = 32'h00007000;
parameter addr_testreg = (base_user_regs + 32'h00000014);
endpackage
//--------------------------------------
module testbench();
timeunit 1ns/10ps;
task write;
input integer addr;
input integer data;
begin
$display("write addr:%x data:%x", addr, data);
end
endtask;
initial begin
write(register1_pkg::addr_testreg, 32'hABCD1234);
write(register2_pkg::addr_testreg, 32'hABCD1234);
$stop;
end
endmodule
Upvotes: 1