mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			244 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			244 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
 | 
						|
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
 | 
						|
 | 
						|
`define SIZE 4 // comment supported in this part
 | 
						|
module test_comment_in_macro ( din_a, dout_a );
 | 
						|
input [`SIZE-1:0] din_a;
 | 
						|
output [`SIZE-1:0] dout_a;
 | 
						|
assign dout_a = din_a | `SIZE'ha;
 | 
						|
endmodule
 |