mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
| 
 | |
| module dff(clk, d, q);
 | |
| input clk, d;
 | |
| output reg q;
 | |
| always @(posedge clk)
 | |
| 	q <= d;
 | |
| endmodule
 | |
| 
 | |
| module dffa(clk, arst, d, q);
 | |
| input clk, arst, d;
 | |
| output reg q;
 | |
| always @(posedge clk or posedge arst) begin
 | |
| 	if (arst)
 | |
| 		q <= 1;
 | |
| 	else
 | |
| 		q <= d;
 | |
| end
 | |
| endmodule
 | |
| 
 | |
| module dffa1(clk, arst, d, q);
 | |
| input clk, arst, d;
 | |
| output reg q;
 | |
| always @(posedge clk or negedge arst) begin
 | |
| 	if (~arst)
 | |
| 		q <= 0;
 | |
| 	else
 | |
| 		q <= d;
 | |
| end
 | |
| endmodule
 | |
| 
 | |
| module dffa2(clk, arst, d, q);
 | |
| input clk, arst, d;
 | |
| output reg q;
 | |
| always @(posedge clk or negedge arst) begin
 | |
| 	if (!arst)
 | |
| 		q <= 0;
 | |
| 	else
 | |
| 		q <= d;
 | |
| end
 | |
| endmodule
 | |
| 
 | |
| module dffa3(clk, arst, d, q);
 | |
| input clk, arst, d;
 | |
| output reg q;
 | |
| always @(posedge clk or negedge arst) begin
 | |
| 	if (~(!arst))
 | |
| 		q <= d;
 | |
| 	else
 | |
| 		q <= 1;
 | |
| end
 | |
| endmodule
 | |
| 
 | |
| module dffa4(clk, arst1, arst2, arst3, d, q);
 | |
| input clk, arst1, arst2, arst3, d;
 | |
| output reg q;
 | |
| always @(posedge clk, posedge arst1, posedge arst2, negedge arst3) begin
 | |
| 	if (arst1)
 | |
| 		q <= 0;
 | |
| 	else if (arst2)
 | |
| 		q <= 0;
 | |
| 	else if (!arst3)
 | |
| 		q <= 0;
 | |
| 	else
 | |
| 		q <= d;
 | |
| end
 | |
| endmodule
 | |
| 
 | |
| // SR-Flip-Flops are on the edge of well defined Verilog constructs in terms of
 | |
| // simulation-implementation mismatches. The following testcases try to cover the
 | |
| // part that is defined and avoid the undefined cases.
 | |
| 
 | |
| module dffsr1(clk, arst, d, q);
 | |
| input clk, arst, d;
 | |
| output reg q;
 | |
| always @(posedge clk, posedge arst) begin
 | |
| 	if (arst)
 | |
| 		q <= d^d; // constant expression -- but the frontend optimizer does not know that..
 | |
| 	else
 | |
| 		q <= d;
 | |
| end
 | |
| endmodule
 | |
| 
 | |
| module dffsr2(clk, preset, clear, d, q);
 | |
| input clk, preset, clear, d;
 | |
| output q;
 | |
| (* gentb_clock *)
 | |
| wire clk, preset, clear, d;
 | |
| dffsr2_sub uut (clk, preset && !clear, !preset && clear, d, q);
 | |
| endmodule
 | |
| 
 | |
| (* gentb_skip *)
 | |
| module dffsr2_sub(clk, preset, clear, d, q);
 | |
| input clk, preset, clear, d;
 | |
| output reg q;
 | |
| always @(posedge clk, posedge preset, posedge clear) begin
 | |
| 	if (preset)
 | |
| 		q <= 1;
 | |
| 	else if (clear)
 | |
| 		q <= 0;
 | |
| 	else
 | |
| 		q <= d;
 | |
| end
 | |
| endmodule
 | |
| 
 | |
| 
 |