mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	Added elsif preproc support
This commit is contained in:
		
							parent
							
								
									921064c200
								
							
						
					
					
						commit
						fbd06a1afc
					
				
					 2 changed files with 243 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -1,9 +1,237 @@
 | 
			
		|||
module test(a, y);
 | 
			
		||||
 | 
			
		||||
module test_def(a, y);
 | 
			
		||||
 | 
			
		||||
`define MSB_LSB_SEP :
 | 
			
		||||
`define get_msb(off, len) ((off)+(len)-1)
 | 
			
		||||
`define get_lsb(off, len) (off)
 | 
			
		||||
`define sel_bits(offset, len) `get_msb(offset, len) `MSB_LSB_SEP `get_lsb(offset, len)
 | 
			
		||||
 | 
			
		||||
input [31:0] a;
 | 
			
		||||
output [7:0] y;
 | 
			
		||||
 | 
			
		||||
assign y = a[`sel_bits(16, 8)];
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
// ---------------------------------------------------
 | 
			
		||||
 | 
			
		||||
module test_ifdef(a, y);
 | 
			
		||||
 | 
			
		||||
input [2:0] a;
 | 
			
		||||
output reg [31:0] y;
 | 
			
		||||
 | 
			
		||||
always @* begin
 | 
			
		||||
	y = 0;
 | 
			
		||||
 | 
			
		||||
	`undef X
 | 
			
		||||
	`ifdef X
 | 
			
		||||
		y = y + 42;
 | 
			
		||||
	`else
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		// ------------------------------------
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		// ------------------------------------
 | 
			
		||||
		`undef A
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		// ------------------------------------
 | 
			
		||||
		`undef A
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
	`endif
 | 
			
		||||
 | 
			
		||||
	`define X
 | 
			
		||||
	`ifdef X
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		// ------------------------------------
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`undef  A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`undef  B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`define B
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`elsif B
 | 
			
		||||
			y = (y << 1) | a[1];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		// ------------------------------------
 | 
			
		||||
		`undef A
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`ifdef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		// ------------------------------------
 | 
			
		||||
		`undef A
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
		`define A
 | 
			
		||||
		`ifndef A
 | 
			
		||||
			y = (y << 1) | a[0];
 | 
			
		||||
		`else
 | 
			
		||||
			y = (y << 1) | a[2];
 | 
			
		||||
		`endif
 | 
			
		||||
	`else
 | 
			
		||||
		y = y + 42;
 | 
			
		||||
	`endif
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue