summaryrefslogtreecommitdiff
path: root/tests/various/constmsk_testmap.v
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-09-04 15:07:30 +0200
committerClifford Wolf <clifford@clifford.at>2014-09-04 15:07:30 +0200
commit01ef34c147dd3e3e3d13864f9c726727a4013207 (patch)
tree472d5471b0e816959cadc25d883b1556221407e0 /tests/various/constmsk_testmap.v
parentf5a40e70431bc09072ca79c22c356ec0c0c9bb8b (diff)
Added tests/various/constmsk_test.ys
Diffstat (limited to 'tests/various/constmsk_testmap.v')
-rw-r--r--tests/various/constmsk_testmap.v49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/various/constmsk_testmap.v b/tests/various/constmsk_testmap.v
new file mode 100644
index 00000000..fab1b1bb
--- /dev/null
+++ b/tests/various/constmsk_testmap.v
@@ -0,0 +1,49 @@
+(* techmap_celltype = "$reduce_or" *)
+module my_opt_reduce_or(...);
+ parameter A_SIGNED = 0;
+ parameter A_WIDTH = 1;
+ parameter Y_WIDTH = 1;
+
+ input [A_WIDTH-1:0] A;
+ output reg [Y_WIDTH-1:0] Y;
+
+ parameter _TECHMAP_CONSTMSK_A_ = 0;
+ parameter _TECHMAP_CONSTVAL_A_ = 0;
+
+ wire _TECHMAP_FAIL_ = count_nonconst_bits() == A_WIDTH;
+ wire [1024:0] _TECHMAP_DO_ = "proc;;";
+
+ function integer count_nonconst_bits;
+ integer i;
+ begin
+ count_nonconst_bits = 0;
+ for (i = 0; i < A_WIDTH; i=i+1)
+ if (!_TECHMAP_CONSTMSK_A_[i])
+ count_nonconst_bits = count_nonconst_bits+1;
+ end
+ endfunction
+
+ function has_const_one;
+ integer i;
+ begin
+ has_const_one = 0;
+ for (i = 0; i < A_WIDTH; i=i+1)
+ if (_TECHMAP_CONSTMSK_A_[i] && _TECHMAP_CONSTVAL_A_[i] === 1'b1)
+ has_const_one = 1;
+ end
+ endfunction
+
+ integer i;
+ reg [count_nonconst_bits()-1:0] tmp;
+
+ always @* begin
+ if (has_const_one()) begin
+ Y = 1;
+ end else begin
+ for (i = 0; i < A_WIDTH; i=i+1)
+ if (!_TECHMAP_CONSTMSK_A_[i])
+ tmp = {A[i], tmp[count_nonconst_bits()-1:1]};
+ Y = |tmp;
+ end
+ end
+endmodule