mirror of
https://github.com/YosysHQ/yosys
synced 2025-08-10 05:00:52 +00:00
Basic test for checking correct synthesis of SystemVerilog interfaces
This commit is contained in:
parent
a25f370191
commit
d5aac2650f
6 changed files with 248 additions and 9 deletions
107
tests/svinterfaces/svinterface1_ref.v
Normal file
107
tests/svinterfaces/svinterface1_ref.v
Normal file
|
@ -0,0 +1,107 @@
|
|||
|
||||
module TopModule(
|
||||
input logic clk,
|
||||
input logic rst,
|
||||
input logic [1:0] sig,
|
||||
input logic flip,
|
||||
output logic [15:0] passThrough,
|
||||
output logic [21:0] outOther,
|
||||
output logic [1:0] sig_out);
|
||||
|
||||
|
||||
logic MyInterfaceInstance_setting;
|
||||
logic [3:0] MyInterfaceInstance_other_setting;
|
||||
logic [1:0] MyInterfaceInstance_mysig_out;
|
||||
|
||||
SubModule1 u_SubModule1 (
|
||||
.clk(clk),
|
||||
.rst(rst),
|
||||
.u_MyInterface_setting(MyInterfaceInstance_setting),
|
||||
.u_MyInterface_mysig_out(MyInterfaceInstance_mysig_out),
|
||||
.u_MyInterface_other_setting(MyInterfaceInstance_other_setting),
|
||||
.outOther(outOther),
|
||||
.passThrough (passThrough),
|
||||
.sig (sig)
|
||||
);
|
||||
|
||||
assign sig_out = MyInterfaceInstance_mysig_out;
|
||||
|
||||
|
||||
assign MyInterfaceInstance_setting = flip;
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
module SubModule1(
|
||||
input logic clk,
|
||||
input logic rst,
|
||||
input logic u_MyInterface_setting,
|
||||
output logic [3:0] u_MyInterface_other_setting,
|
||||
output logic [1:0] u_MyInterface_mysig_out,
|
||||
output logic [21:0] outOther,
|
||||
input logic [1:0] sig,
|
||||
output logic [15:0] passThrough
|
||||
);
|
||||
|
||||
always @(posedge clk or posedge rst)
|
||||
if(rst)
|
||||
u_MyInterface_mysig_out <= 0;
|
||||
else begin
|
||||
if(u_MyInterface_setting)
|
||||
u_MyInterface_mysig_out <= sig;
|
||||
else
|
||||
u_MyInterface_mysig_out <= ~sig;
|
||||
end
|
||||
|
||||
logic MyInterfaceInstanceInSub_setting;
|
||||
logic [21:0] MyInterfaceInstanceInSub_other_setting;
|
||||
logic [1:0] MyInterfaceInstanceInSub_mysig_out;
|
||||
|
||||
|
||||
SubModule2 u_SubModule2 (
|
||||
.clk(clk),
|
||||
.rst(rst),
|
||||
.u_MyInterfaceInSub2_setting(u_MyInterface_setting),
|
||||
.u_MyInterfaceInSub2_mysig_out(u_MyInterface_mysig_out),
|
||||
.u_MyInterfaceInSub2_other_setting(u_MyInterface_other_setting),
|
||||
.u_MyInterfaceInSub3_setting(MyInterfaceInstanceInSub_setting),
|
||||
.u_MyInterfaceInSub3_mysig_out(MyInterfaceInstanceInSub_mysig_out),
|
||||
.u_MyInterfaceInSub3_other_setting(MyInterfaceInstanceInSub_other_setting),
|
||||
.passThrough (passThrough)
|
||||
);
|
||||
assign outOther = MyInterfaceInstanceInSub_other_setting;
|
||||
|
||||
assign MyInterfaceInstanceInSub_setting = 0;
|
||||
assign MyInterfaceInstanceInSub_mysig_out = sig;
|
||||
|
||||
endmodule
|
||||
|
||||
module SubModule2(
|
||||
|
||||
input logic clk,
|
||||
input logic rst,
|
||||
input logic u_MyInterfaceInSub2_setting,
|
||||
output logic [3:0] u_MyInterfaceInSub2_other_setting,
|
||||
input logic [1:0] u_MyInterfaceInSub2_mysig_out,
|
||||
input logic u_MyInterfaceInSub3_setting,
|
||||
output logic [21:0] u_MyInterfaceInSub3_other_setting,
|
||||
input logic [1:0] u_MyInterfaceInSub3_mysig_out,
|
||||
output logic [15:0] passThrough
|
||||
|
||||
);
|
||||
|
||||
always @(u_MyInterfaceInSub3_mysig_out) begin
|
||||
if (u_MyInterfaceInSub3_mysig_out == 2'b00)
|
||||
u_MyInterfaceInSub3_other_setting[21:0] = 1000;
|
||||
else if (u_MyInterfaceInSub3_mysig_out == 2'b01)
|
||||
u_MyInterfaceInSub3_other_setting[21:0] = 2000;
|
||||
else if (u_MyInterfaceInSub3_mysig_out == 2'b10)
|
||||
u_MyInterfaceInSub3_other_setting[21:0] = 3000;
|
||||
else
|
||||
u_MyInterfaceInSub3_other_setting[21:0] = 4000;
|
||||
end
|
||||
|
||||
assign passThrough[7:0] = 124;
|
||||
assign passThrough[15:8] = 200;
|
||||
|
||||
endmodule
|
Loading…
Add table
Add a link
Reference in a new issue