mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +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
 | 
						|
 | 
						|
 |