| (* 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 |