mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Right now neither `sat` nor `sim` have support for the `$check` cell. For formal verification it is a good idea to always run either async2sync or clk2fflogic which will (in a future commit) lower `$check` to `$assert`, etc. While `sim` should eventually support `$check` directly, using `async2sync` is ok for the current tests that use `sim`, so this commit also runs `async2sync` before running sim on designs containing assertions.
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			937 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			937 B
		
	
	
	
		
			Text
		
	
	
	
	
	
logger -expect-no-warnings
 | 
						|
 | 
						|
read_verilog -formal <<EOT
 | 
						|
module top(input clk);
 | 
						|
    reg [-1:-1] x;
 | 
						|
    reg good = 0;
 | 
						|
    reg signed [31:0] zero = 0;
 | 
						|
 | 
						|
    always @(posedge clk) begin
 | 
						|
        case ($left(x) + zero) 36'shfffffffff: good = 1; endcase
 | 
						|
        assert (good);
 | 
						|
    end
 | 
						|
endmodule
 | 
						|
EOT
 | 
						|
 | 
						|
prep -top top
 | 
						|
async2sync
 | 
						|
sim -n 3 -clock clk
 | 
						|
 | 
						|
design -reset
 | 
						|
 | 
						|
read_verilog -formal <<EOT
 | 
						|
module top(input clk);
 | 
						|
    reg [-1:-1] x;
 | 
						|
    reg good = 0;
 | 
						|
 | 
						|
    always @(posedge clk) begin
 | 
						|
        case ($left(x)) 36'sh0ffffffff: good = 1; (32'h0 + $left(good)): ; endcase
 | 
						|
        assert (good);
 | 
						|
    end
 | 
						|
 | 
						|
endmodule
 | 
						|
EOT
 | 
						|
 | 
						|
prep -top top
 | 
						|
async2sync
 | 
						|
sim -n 3 -clock clk
 | 
						|
 | 
						|
design -reset
 | 
						|
 | 
						|
read_verilog -formal <<EOT
 | 
						|
module top(input clk);
 | 
						|
    reg [-1:-1] x;
 | 
						|
    reg good = 1;
 | 
						|
 | 
						|
    always @(posedge clk) begin
 | 
						|
        case (36'sh100000000 + $left(x)) -1: good = 0; endcase
 | 
						|
        assert (good);
 | 
						|
    end
 | 
						|
endmodule
 | 
						|
EOT
 | 
						|
 | 
						|
prep -top top
 | 
						|
async2sync
 | 
						|
sim -n 3 -clock clk
 |