aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorRuben Undheim <ruben.undheim@gmail.com>2018-10-11 23:33:31 +0200
committerRuben Undheim <ruben.undheim@gmail.com>2018-10-12 21:11:36 +0200
commit75009ada3c2a4bcd38c52c8fb871c9e8c1f2e6b1 (patch)
treee8d3be5d6134dbf4fc26b47f9481f80a4bdfc4c7 /tests
parent9850de405a11fe93e4562c86be0a0830b83c2785 (diff)
downloadyosys-75009ada3c2a4bcd38c52c8fb871c9e8c1f2e6b1.tar.gz
yosys-75009ada3c2a4bcd38c52c8fb871c9e8c1f2e6b1.tar.bz2
yosys-75009ada3c2a4bcd38c52c8fb871c9e8c1f2e6b1.zip
Synthesis support for SystemVerilog interfaces
This time doing the changes mostly in AST before RTLIL generation
Diffstat (limited to 'tests')
-rw-r--r--tests/simple/svinterface1.sv76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/simple/svinterface1.sv b/tests/simple/svinterface1.sv
new file mode 100644
index 000000000..779d50c14
--- /dev/null
+++ b/tests/simple/svinterface1.sv
@@ -0,0 +1,76 @@
+
+
+module TopModule(
+ input logic clk,
+ input logic rst,
+ input logic [1:0] sig,
+ output logic [1:0] sig_out);
+
+ MyInterface #(.WIDTH(4)) MyInterfaceInstance();
+
+ SubModule1 u_SubModule1 (
+ .clk(clk),
+ .rst(rst),
+ .u_MyInterface(MyInterfaceInstance),
+ .sig (sig)
+ );
+
+ assign sig_out = MyInterfaceInstance.mysig_out;
+
+
+ assign MyInterfaceInstance.setting = 1;
+ assign MyInterfaceInstance.other_setting[2:0] = 3'b101;
+
+endmodule
+
+interface MyInterface #(
+ parameter WIDTH = 3)(
+ );
+
+ logic setting;
+ logic [WIDTH-1:0] other_setting;
+
+ logic [1:0] mysig_out;
+
+endinterface
+
+
+module SubModule1(
+ input logic clk,
+ input logic rst,
+ MyInterface u_MyInterface,
+ input logic [1:0] sig
+
+ );
+
+ always_ff @(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
+
+ MyInterface #(.WIDTH(22)) MyInterfaceInstanceInSub();
+
+ SubModule2 u_SubModule2 (
+ .clk(clk),
+ .rst(rst),
+ .u_MyInterfaceInSub2(u_MyInterface),
+ .sig (sig)
+ );
+
+endmodule
+
+module SubModule2(
+
+ input logic clk,
+ input logic rst,
+ MyInterface u_MyInterfaceInSub2,
+ input logic [1:0] sig
+
+ );
+
+endmodule