mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Systemverilog
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Systemverilog
		
	
	
	
	
	
| module top;
 | |
|     function automatic [30:0] func;
 | |
|         input integer inp;
 | |
|         func = { // self-determined context
 | |
|             (
 | |
|                 inp == 0
 | |
|                 ? -1 // causes whole ternary to be 32 bits
 | |
|                 : func(inp - 1) // 31 bits, unsigned
 | |
|             ) >> 2};
 | |
|     endfunction
 | |
|     function automatic signed [3:0] dunk;
 | |
|         input integer inp;
 | |
|         dunk = (
 | |
|                 inp == 0
 | |
|                 ? 4'hF
 | |
|                 // shouldn't make the ternary signed
 | |
|                 : dunk(inp - 1)
 | |
|             ) == -1;
 | |
|     endfunction
 | |
|     localparam A = func(0);
 | |
|     localparam B = func(1);
 | |
|     localparam C = func(2);
 | |
|     localparam D = func(3);
 | |
|     localparam X = dunk(0);
 | |
|     localparam Y = dunk(1);
 | |
|     initial begin
 | |
|         assert(A == 31'h3F_FFFFFF);
 | |
|         assert(B == 31'h0F_FFFFFF);
 | |
|         assert(C == 31'h03_FFFFFF);
 | |
|         assert(D == 31'h00_FFFFFF);
 | |
|         assert(X == 0);
 | |
|         assert(Y == 0);
 | |
|     end
 | |
|     initial begin
 | |
|         logic x;
 | |
|         case (1'b1)
 | |
|             dunk(0): x = 0;
 | |
|             default: x = 1;
 | |
|         endcase
 | |
|         assert(x);
 | |
|     end
 | |
| endmodule
 |