mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
| (* techmap_celltype = "$reduce_or" *)
 | |
| module my_opt_reduce_or(...);
 | |
|     parameter A_SIGNED = 0;
 | |
|     parameter A_WIDTH = 2;
 | |
|     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
 |