aboutsummaryrefslogtreecommitdiffstats
path: root/tests/verilog
diff options
context:
space:
mode:
authorZachary Snow <zach@zachjs.com>2021-05-27 16:47:02 -0400
committerZachary Snow <zachary.j.snow@gmail.com>2021-06-01 13:17:41 -0400
commit8cfed1a97957e4c096d1e0a0304d978bcb27e116 (patch)
treeea43c00a06a8e1bf86eb11fbdcd19ecf948dc4c1 /tests/verilog
parent6d5d8457883e5de8df58997d95373d3433b781bf (diff)
downloadyosys-8cfed1a97957e4c096d1e0a0304d978bcb27e116.tar.gz
yosys-8cfed1a97957e4c096d1e0a0304d978bcb27e116.tar.bz2
yosys-8cfed1a97957e4c096d1e0a0304d978bcb27e116.zip
sv: support tasks and functions within packages
Diffstat (limited to 'tests/verilog')
-rw-r--r--tests/verilog/package_task_func.sv30
-rw-r--r--tests/verilog/package_task_func.ys4
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/verilog/package_task_func.sv b/tests/verilog/package_task_func.sv
new file mode 100644
index 000000000..2df7a5205
--- /dev/null
+++ b/tests/verilog/package_task_func.sv
@@ -0,0 +1,30 @@
+package P;
+ localparam Y = 2;
+ localparam X = Y + 1;
+ task t;
+ output integer x;
+ x = Y;
+ endtask
+ function automatic integer f;
+ input integer i;
+ f = i * X;
+ endfunction
+ function automatic integer g;
+ input integer i;
+ g = i == 0 ? 1 : Y * g(i - 1);
+ endfunction
+ localparam Z = g(4);
+endpackage
+
+module top;
+ integer a;
+ initial P::t(a);
+ integer b = P::f(3);
+ integer c = P::g(3);
+ integer d = P::Z;
+
+ assert property (a == 2);
+ assert property (b == 9);
+ assert property (c == 8);
+ assert property (d == 16);
+endmodule
diff --git a/tests/verilog/package_task_func.ys b/tests/verilog/package_task_func.ys
new file mode 100644
index 000000000..c94cc2acb
--- /dev/null
+++ b/tests/verilog/package_task_func.ys
@@ -0,0 +1,4 @@
+read_verilog -sv package_task_func.sv
+proc
+opt -full
+sat -verify -seq 1 -prove-asserts -show-all