mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			271 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| read_verilog << EOT
 | |
| 
 | |
| // FDRE, mergeable CE and R.
 | |
| 
 | |
| module t0 (...);
 | |
| input wire clk;
 | |
| input wire [7:0] i;
 | |
| output wire [0:0] o;
 | |
| 
 | |
| wire [7:0] tmp ;
 | |
| 
 | |
| LUT2 #(.INIT(4'h6)) lut0 (.I0(i[0]), .I1(i[1]), .O(tmp[0]));
 | |
| LUT2 #(.INIT(4'h6)) lut1 (.I0(i[1]), .I1(i[2]), .O(tmp[1]));
 | |
| LUT2 #(.INIT(4'h6)) lut2 (.I0(i[3]), .I1(i[4]), .O(tmp[2]));
 | |
| 
 | |
| FDRE ff (.D(tmp[0]), .CE(tmp[1]), .R(tmp[2]), .Q(o[0]));
 | |
| 
 | |
| endmodule
 | |
| 
 | |
| EOT
 | |
| read_verilog -lib +/xilinx/cells_sim.v
 | |
| design -save t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDRE
 | |
| select -assert-count 1 t:LUT6
 | |
| select -assert-none t:FDRE t:LUT6 %% t:* %D
 | |
| 
 | |
| design -load t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt -lut4
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDRE
 | |
| select -assert-count 1 t:LUT4
 | |
| select -assert-count 1 t:LUT2
 | |
| select -assert-none t:FDRE t:LUT4 t:LUT2 %% t:* %D
 | |
| 
 | |
| design -reset
 | |
| 
 | |
| 
 | |
| read_verilog << EOT
 | |
| 
 | |
| // FDSE, mergeable CE and S, inversions.
 | |
| 
 | |
| module t0 (...);
 | |
| input wire clk;
 | |
| input wire [7:0] i;
 | |
| output wire [0:0] o;
 | |
| 
 | |
| wire [7:0] tmp ;
 | |
| 
 | |
| LUT2 #(.INIT(4'h6)) lut0 (.I0(i[0]), .I1(i[1]), .O(tmp[0]));
 | |
| LUT2 #(.INIT(4'h6)) lut1 (.I0(i[1]), .I1(i[2]), .O(tmp[1]));
 | |
| LUT2 #(.INIT(4'h6)) lut2 (.I0(i[3]), .I1(i[4]), .O(tmp[2]));
 | |
| 
 | |
| FDSE #(.IS_D_INVERTED(1'b1), .IS_S_INVERTED(1'b1)) ff (.D(tmp[0]), .CE(tmp[1]), .S(tmp[2]), .Q(o[0]));
 | |
| 
 | |
| endmodule
 | |
| 
 | |
| EOT
 | |
| 
 | |
| read_verilog -lib +/xilinx/cells_sim.v
 | |
| design -save t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDSE
 | |
| select -assert-count 1 t:LUT6
 | |
| select -assert-none t:FDSE t:LUT6 %% t:* %D
 | |
| 
 | |
| design -load t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt -lut4
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDSE
 | |
| select -assert-count 1 t:LUT4
 | |
| select -assert-count 1 t:LUT2
 | |
| select -assert-none t:FDSE t:LUT4 t:LUT2 %% t:* %D
 | |
| 
 | |
| design -reset
 | |
| 
 | |
| 
 | |
| read_verilog << EOT
 | |
| 
 | |
| // FDCE, mergeable CE.
 | |
| 
 | |
| module t0 (...);
 | |
| input wire clk;
 | |
| input wire [7:0] i;
 | |
| output wire [0:0] o;
 | |
| 
 | |
| wire [7:0] tmp ;
 | |
| 
 | |
| LUT2 #(.INIT(4'h6)) lut0 (.I0(i[0]), .I1(i[1]), .O(tmp[0]));
 | |
| LUT2 #(.INIT(4'h6)) lut1 (.I0(i[1]), .I1(i[2]), .O(tmp[1]));
 | |
| LUT2 #(.INIT(4'h6)) lut2 (.I0(i[3]), .I1(i[4]), .O(tmp[2]));
 | |
| 
 | |
| FDCE ff (.D(tmp[0]), .CE(tmp[1]), .CLR(tmp[2]), .Q(o[0]));
 | |
| 
 | |
| endmodule
 | |
| 
 | |
| EOT
 | |
| 
 | |
| read_verilog -lib +/xilinx/cells_sim.v
 | |
| design -save t0
 | |
| 
 | |
| equiv_opt -async2sync -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDCE
 | |
| select -assert-count 1 t:LUT4
 | |
| select -assert-count 1 t:LUT2
 | |
| select -assert-none t:FDCE t:LUT4 t:LUT2 %% t:* %D
 | |
| 
 | |
| design -reset
 | |
| 
 | |
| 
 | |
| read_verilog << EOT
 | |
| 
 | |
| // FDSE, mergeable CE and S, but CE only not worth it.
 | |
| 
 | |
| module t0 (...);
 | |
| input wire clk;
 | |
| input wire [7:0] i;
 | |
| output wire [0:0] o;
 | |
| 
 | |
| wire [7:0] tmp ;
 | |
| 
 | |
| LUT2 #(.INIT(4'h6)) lut0 (.I0(i[0]), .I1(i[1]), .O(tmp[0]));
 | |
| LUT2 #(.INIT(4'h6)) lut1 (.I0(i[1]), .I1(i[2]), .O(tmp[1]));
 | |
| 
 | |
| FDSE ff (.D(tmp[0]), .CE(i[7]), .S(tmp[1]), .Q(o[0]));
 | |
| 
 | |
| endmodule
 | |
| 
 | |
| EOT
 | |
| 
 | |
| read_verilog -lib +/xilinx/cells_sim.v
 | |
| design -save t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDSE
 | |
| select -assert-count 1 t:LUT5
 | |
| select -assert-none t:FDSE t:LUT5 %% t:* %D
 | |
| 
 | |
| design -load t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt -lut4
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDSE
 | |
| select -assert-count 2 t:LUT2
 | |
| select -assert-none t:FDSE t:LUT2 %% t:* %D
 | |
| 
 | |
| design -reset
 | |
| 
 | |
| 
 | |
| read_verilog << EOT
 | |
| 
 | |
| // FDRSE, mergeable CE, S, R.
 | |
| 
 | |
| module t0 (...);
 | |
| input wire clk;
 | |
| input wire [7:0] i;
 | |
| output wire [0:0] o;
 | |
| 
 | |
| wire [7:0] tmp ;
 | |
| 
 | |
| LUT2 #(.INIT(4'h6)) lut0 (.I0(i[0]), .I1(i[1]), .O(tmp[0]));
 | |
| LUT2 #(.INIT(4'h6)) lut1 (.I0(i[1]), .I1(i[2]), .O(tmp[1]));
 | |
| LUT2 #(.INIT(4'h8)) lut2 (.I0(i[2]), .I1(i[0]), .O(tmp[2]));
 | |
| LUT2 #(.INIT(4'h6)) lut3 (.I0(i[3]), .I1(i[4]), .O(tmp[3]));
 | |
| 
 | |
| FDRSE ff (.D(tmp[0]), .CE(tmp[1]), .S(tmp[2]), .R(tmp[3]), .Q(o[0]));
 | |
| 
 | |
| endmodule
 | |
| 
 | |
| EOT
 | |
| 
 | |
| read_verilog -lib +/xilinx/cells_sim.v
 | |
| design -save t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDRSE
 | |
| select -assert-count 1 t:LUT6
 | |
| select -assert-none t:FDRSE t:LUT6 %% t:* %D
 | |
| 
 | |
| design -load t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt -lut4
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDRSE
 | |
| select -assert-count 1 t:LUT4
 | |
| select -assert-count 1 t:LUT2
 | |
| select -assert-none t:FDRSE t:LUT4 t:LUT2 %% t:* %D
 | |
| 
 | |
| design -reset
 | |
| 
 | |
| 
 | |
| read_verilog << EOT
 | |
| 
 | |
| // FDSE_1, mergeable CE and S, but CE only not worth it.
 | |
| 
 | |
| module t0 (...);
 | |
| input wire clk;
 | |
| input wire [7:0] i;
 | |
| output wire [0:0] o;
 | |
| 
 | |
| wire [7:0] tmp ;
 | |
| 
 | |
| LUT2 #(.INIT(4'h6)) lut0 (.I0(i[0]), .I1(i[1]), .O(tmp[0]));
 | |
| LUT2 #(.INIT(4'h6)) lut1 (.I0(i[1]), .I1(i[2]), .O(tmp[1]));
 | |
| 
 | |
| FDSE_1 ff (.D(tmp[0]), .CE(i[7]), .S(tmp[1]), .Q(o[0]));
 | |
| 
 | |
| endmodule
 | |
| 
 | |
| EOT
 | |
| 
 | |
| read_verilog -lib +/xilinx/cells_sim.v
 | |
| design -save t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDSE_1
 | |
| select -assert-count 1 t:LUT5
 | |
| select -assert-none t:FDSE_1 t:LUT5 %% t:* %D
 | |
| 
 | |
| design -load t0
 | |
| 
 | |
| equiv_opt -blacklist xilinx_dffopt_blacklist.txt -assert -map +/xilinx/cells_sim.v xilinx_dffopt -lut4
 | |
| design -load postopt
 | |
| clean
 | |
| 
 | |
| cd t0
 | |
| select -assert-count 1 t:FDSE_1
 | |
| select -assert-count 2 t:LUT2
 | |
| select -assert-none t:FDSE_1 t:LUT2 %% t:* %D
 | |
| 
 | |
| design -reset
 |