mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Add some simple SVA test cases for future Verific work
This commit is contained in:
		
							parent
							
								
									2785aaffeb
								
							
						
					
					
						commit
						024ba310ec
					
				
					 4 changed files with 45 additions and 0 deletions
				
			
		
							
								
								
									
										7
									
								
								tests/sva/basic00.sv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tests/sva/basic00.sv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
module top (input clk, reset, antecedent, output reg consequent);
 | 
			
		||||
	always @(posedge clk)
 | 
			
		||||
		consequent <= reset ? 0 : antecedent;
 | 
			
		||||
 | 
			
		||||
	test_assert: assert property ( @(posedge clk) disable iff (reset) antecedent |-> consequent )
 | 
			
		||||
			else $error("Failed with consequent = ", $sampled(consequent));
 | 
			
		||||
endmodule
 | 
			
		||||
							
								
								
									
										12
									
								
								tests/sva/basic01.sv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								tests/sva/basic01.sv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
module top (input logic clock, ctrl);
 | 
			
		||||
	logic read = 0, write = 0, ready = 0;
 | 
			
		||||
 | 
			
		||||
	always @(posedge clock) begin
 | 
			
		||||
		read <= !ctrl;
 | 
			
		||||
		write <= ctrl;
 | 
			
		||||
		ready <= write;
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	a_rw: assert property ( @(posedge clock) !(read && write) );
 | 
			
		||||
	a_wr: assert property ( @(posedge clock) write |-> ready );
 | 
			
		||||
endmodule
 | 
			
		||||
							
								
								
									
										16
									
								
								tests/sva/basic02.sv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								tests/sva/basic02.sv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
module top (input logic clock, ctrl);
 | 
			
		||||
	logic read = 0, write = 0, ready = 0;
 | 
			
		||||
 | 
			
		||||
	always @(posedge clock) begin
 | 
			
		||||
		read <= !ctrl;
 | 
			
		||||
		write <= ctrl;
 | 
			
		||||
		ready <= write;
 | 
			
		||||
	end
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module top_properties (input logic clock, read, write, ready);
 | 
			
		||||
	a_rw: assert property ( @(posedge clock) !(read && write) );
 | 
			
		||||
	a_wr: assert property ( @(posedge clock) write |-> ready );
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
bind top top_properties inst (.*);
 | 
			
		||||
							
								
								
									
										10
									
								
								tests/sva/basic03.sv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								tests/sva/basic03.sv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
module top (input logic clk, input logic selA, selB, QA, QB, output logic Q);
 | 
			
		||||
	always @(posedge clk) begin
 | 
			
		||||
		if (selA) Q <= QA;
 | 
			
		||||
		if (selB) Q <= QB;
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	check_selA: assert property ( @(posedge clk) selA|=> Q == $past(QA) );
 | 
			
		||||
	check_selB: assert property ( @(posedge clk) selB|=> Q == $past(QB) );
 | 
			
		||||
	assume_not_11: assume property ( @(posedge clk) !(selA& selB) );
 | 
			
		||||
endmodule
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue