mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/xaig' into xc7mux
This commit is contained in:
		
						commit
						d54dceb547
					
				
					 9 changed files with 85 additions and 391 deletions
				
			
		|  | @ -18,16 +18,17 @@ Yosys 0.8 .. Yosys 0.8-dev | ||||||
|     - Added "equiv_opt" pass |     - Added "equiv_opt" pass | ||||||
|     - Added "shregmap -tech xilinx" |     - Added "shregmap -tech xilinx" | ||||||
|     - Added "read_aiger" frontend |     - Added "read_aiger" frontend | ||||||
|     - Added "shregmap -tech xilinx" |     - Added "muxcover -mux{4,8,16}=<cost>" | ||||||
|  |     - Added "muxcover -dmux=<cost>" | ||||||
|  |     - Added "muxcover -nopartial" | ||||||
|  |     - Added "muxpack" pass | ||||||
|     - Added "abc9" pass for timing-aware techmapping (experimental, FPGA only, no FFs) |     - Added "abc9" pass for timing-aware techmapping (experimental, FPGA only, no FFs) | ||||||
|     - Added "synth_xilinx -abc9" (experimental) |     - Added "synth_xilinx -abc9" (experimental) | ||||||
|     - Added "synth_ice40 -abc9" (experimental) |     - Added "synth_ice40 -abc9" (experimental) | ||||||
|     - Added "synth -abc9" (experimental) |     - Added "synth -abc9" (experimental) | ||||||
|     - Added "muxpack" pass |  | ||||||
|     - Extended "muxcover -mux{4,8,16}=<cost>" |  | ||||||
|     - Fixed sign extension of unsized constants with 'bx and 'bz MSB |  | ||||||
|     - "synth_xilinx" to now infer hard shift registers (-nosrl to disable) |     - "synth_xilinx" to now infer hard shift registers (-nosrl to disable) | ||||||
|     - "synth_xilinx" to now infer wide multiplexers (-nomux to disable) |     - "synth_xilinx" to now infer wide multiplexers (-nomux to disable) | ||||||
|  |     - Fixed sign extension of unsized constants with 'bx and 'bz MSB | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Yosys 0.7 .. Yosys 0.8 | Yosys 0.7 .. Yosys 0.8 | ||||||
|  |  | ||||||
|  | @ -309,38 +309,46 @@ struct XAigerWriter | ||||||
| 
 | 
 | ||||||
| 				if (box_module->attributes.count("\\abc_carry") && !abc_carry_modules.count(box_module)) { | 				if (box_module->attributes.count("\\abc_carry") && !abc_carry_modules.count(box_module)) { | ||||||
| 					RTLIL::Wire* carry_in = nullptr, *carry_out = nullptr; | 					RTLIL::Wire* carry_in = nullptr, *carry_out = nullptr; | ||||||
| 					RTLIL::Wire* last_in = nullptr, *last_out = nullptr; | 					auto &ports = box_module->ports; | ||||||
| 					for (const auto &port_name : box_module->ports) { | 					for (auto it = ports.begin(); it != ports.end(); ) { | ||||||
| 						RTLIL::Wire* w = box_module->wire(port_name); | 						RTLIL::Wire* w = box_module->wire(*it); | ||||||
| 						log_assert(w); | 						log_assert(w); | ||||||
| 						if (w->port_input) { | 						if (w->port_input && w->attributes.count("\\abc_carry_in")) { | ||||||
| 							if (w->attributes.count("\\abc_carry_in")) { | 							if (carry_in) | ||||||
| 								log_assert(!carry_in); | 								log_error("More than one port with attribute 'abc_carry_in' found in module '%s'\n", log_id(box_module)); | ||||||
| 								carry_in = w; | 							carry_in = w; | ||||||
| 							} | 							it = ports.erase(it); | ||||||
| 							log_assert(!last_in || last_in->port_id < w->port_id); | 							continue; | ||||||
| 							last_in = w; |  | ||||||
| 						} | 						} | ||||||
| 						if (w->port_output) { | 						if (w->port_output && w->attributes.count("\\abc_carry_out")) { | ||||||
| 							if (w->attributes.count("\\abc_carry_out")) { | 							if (carry_out) | ||||||
| 								log_assert(!carry_out); | 								log_error("More than one port with attribute 'abc_carry_out' found in module '%s'\n", log_id(box_module)); | ||||||
| 								carry_out = w; | 							carry_out = w; | ||||||
| 							} | 							it = ports.erase(it); | ||||||
| 							log_assert(!last_out || last_out->port_id < w->port_id); | 							continue; | ||||||
| 							last_out = w; |  | ||||||
| 						} | 						} | ||||||
|  | 						++it; | ||||||
| 					} | 					} | ||||||
| 
 | 
 | ||||||
| 					if (carry_in) { | 					if (!carry_in) | ||||||
| 						log_assert(last_in); | 						log_error("Port with attribute 'abc_carry_in' not found in module '%s'\n", log_id(box_module)); | ||||||
| 						std::swap(box_module->ports[carry_in->port_id-1], box_module->ports[last_in->port_id-1]); | 					if (!carry_out) | ||||||
| 						std::swap(carry_in->port_id, last_in->port_id); | 						log_error("Port with attribute 'abc_carry_out' not found in module '%s'\n", log_id(box_module)); | ||||||
| 					} | 
 | ||||||
| 					if (carry_out) { | 					for (const auto port_name : ports) { | ||||||
| 						log_assert(last_out); | 						RTLIL::Wire* w = box_module->wire(port_name); | ||||||
| 						std::swap(box_module->ports[carry_out->port_id-1], box_module->ports[last_out->port_id-1]); | 						log_assert(w); | ||||||
| 						std::swap(carry_out->port_id, last_out->port_id); | 						if (w->port_id > carry_in->port_id) | ||||||
|  | 							--w->port_id; | ||||||
|  | 						if (w->port_id > carry_out->port_id) | ||||||
|  | 							--w->port_id; | ||||||
|  | 						log_assert(w->port_input || w->port_output); | ||||||
|  | 						log_assert(ports[w->port_id-1] == w->name); | ||||||
| 					} | 					} | ||||||
|  | 					ports.push_back(carry_in->name); | ||||||
|  | 					carry_in->port_id = ports.size(); | ||||||
|  | 					ports.push_back(carry_out->name); | ||||||
|  | 					carry_out->port_id = ports.size(); | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				// Fully pad all unused input connections of this box cell with S0
 | 				// Fully pad all unused input connections of this box cell with S0
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,11 @@ | ||||||
|  | # NB: Inputs/Outputs must be ordered alphabetically | ||||||
|  | #     (with exceptions for carry in/out) | ||||||
|  | 
 | ||||||
| # Box 1 : CCU2C (2xCARRY + 2xLUT4) | # Box 1 : CCU2C (2xCARRY + 2xLUT4) | ||||||
| # Outputs: S0, S1, COUT | # Outputs: S0, S1, COUT | ||||||
|  | #   (NB: carry chain input/output must be last | ||||||
|  | #        input/output and have been moved there | ||||||
|  | #        overriding the alphabetical ordering) | ||||||
| # name  ID   w/b   ins    outs | # name  ID   w/b   ins    outs | ||||||
| CCU2C   1      1   9      3 | CCU2C   1      1   9      3 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,113 +1,17 @@ | ||||||
| # From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_hx8k.txt | # From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_hx8k.txt | ||||||
| 
 | 
 | ||||||
| # NB: Inputs/Outputs must be ordered alphabetically | # NB: Inputs/Outputs must be ordered alphabetically | ||||||
|  | #     (with exceptions for carry in/out) | ||||||
| 
 | 
 | ||||||
| # Inputs: C D | # Inputs: I0 I1 CI | ||||||
| # Outputs: Q |  | ||||||
| SB_DFF 1 0 2 1 |  | ||||||
| - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFE 2 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFSR 3 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFR 4 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFSS 5 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFS 6 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFESR 7 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFER 8 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFESS 9 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFES 10 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFN 11 0 2 1 |  | ||||||
| - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNE 12 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNSR 13 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNR 14 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNSS 15 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNS 16 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNESR 17 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNER 18 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNESS 19 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNES 20 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: CI I0 I1 |  | ||||||
| # Outputs: CO | # Outputs: CO | ||||||
| SB_CARRY 21 1 3 1 | #   (NB: carry chain input/output must be last | ||||||
| 126 259 231 | #        input/output and have been moved there | ||||||
|  | #        overriding the alphabetical ordering) | ||||||
|  | SB_CARRY 1 1 3 1 | ||||||
|  | 259 231 126 | ||||||
| 
 | 
 | ||||||
| # Inputs: I0 I1 I2 I3 | # Inputs: I0 I1 I2 I3 | ||||||
| # Outputs: O | # Outputs: O | ||||||
| SB_LUT4 22 1 4 1 | SB_LUT4 2 1 4 1 | ||||||
| 449 400 379 316 | 449 400 379 316 | ||||||
|  |  | ||||||
|  | @ -1,113 +1,17 @@ | ||||||
| # From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_lp8k.txt | # From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_lp8k.txt | ||||||
| 
 | 
 | ||||||
| # NB: Inputs/Outputs must be ordered alphabetically | # NB: Inputs/Outputs must be ordered alphabetically | ||||||
| 
 | #     (with exceptions for carry in/out) | ||||||
| # Inputs: C D |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFF 1 0 2 1 |  | ||||||
| - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFE 2 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFSR 3 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFR 4 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFSS 5 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFS 6 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFESR 7 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFER 8 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFESS 9 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFES 10 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFN 11 0 2 1 |  | ||||||
| - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNE 12 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNSR 13 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNR 14 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNSS 15 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNS 16 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNESR 17 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNER 18 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNESS 19 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNES 20 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 | 
 | ||||||
| # Inputs: CI I0 I1 | # Inputs: CI I0 I1 | ||||||
| # Outputs: CO | # Outputs: CO | ||||||
| SB_CARRY 21 1 3 1 | #   (NB: carry chain input/output must be last | ||||||
| 186 675 609 | #        input/output and have been moved there | ||||||
|  | #        overriding the alphabetical ordering) | ||||||
|  | SB_CARRY 1 1 3 1 | ||||||
|  | 675 609 186  | ||||||
| 
 | 
 | ||||||
| # Inputs: I0 I1 I2 I3 | # Inputs: I0 I1 I2 I3 | ||||||
| # Outputs: O | # Outputs: O | ||||||
| SB_LUT4 22 1 4 1 | SB_LUT4 2 1 4 1 | ||||||
| 661 589 558 465 | 661 589 558 465 | ||||||
|  |  | ||||||
|  | @ -1,113 +1,17 @@ | ||||||
| # From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_up5k.txt | # From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_up5k.txt | ||||||
| 
 | 
 | ||||||
| # NB: Inputs/Outputs must be ordered alphabetically | # NB: Inputs/Outputs must be ordered alphabetically | ||||||
|  | #     (with exceptions for carry in/out) | ||||||
| 
 | 
 | ||||||
| # Inputs: C D | # Inputs: I0 I1 CI | ||||||
| # Outputs: Q |  | ||||||
| SB_DFF 1 0 2 1 |  | ||||||
| - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFE 2 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFSR 3 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFR 4 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFSS 5 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFS 6 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFESR 7 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFER 8 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFESS 9 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFES 10 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFN 11 0 2 1 |  | ||||||
| - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNE 12 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNSR 13 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNR 14 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNSS 15 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNS 16 0 3 1 |  | ||||||
| - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNESR 17 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E R |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNER 18 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNESS 19 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C D E S |  | ||||||
| # Outputs: Q |  | ||||||
| SB_DFFNES 20 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: CI I0 I1 |  | ||||||
| # Outputs: CO | # Outputs: CO | ||||||
| SB_CARRY 21 1 3 1 | #   (NB: carry chain input/output must be last | ||||||
| 278 675 609 | #        input/output and have been moved there | ||||||
|  | #        overriding the alphabetical ordering) | ||||||
|  | SB_CARRY 1 1 3 1 | ||||||
|  | 675 609 278 | ||||||
| 
 | 
 | ||||||
| # Inputs: I0 I1 I2 I3 | # Inputs: I0 I1 I2 I3 | ||||||
| # Outputs: O | # Outputs: O | ||||||
| SB_LUT4 22 1 4 1 | SB_LUT4 2 1 4 1 | ||||||
| 1285 1231 1205 874 | 1285 1231 1205 874 | ||||||
|  |  | ||||||
|  | @ -127,7 +127,7 @@ endmodule | ||||||
| 
 | 
 | ||||||
| // SiliconBlue Logic Cells | // SiliconBlue Logic Cells | ||||||
| 
 | 
 | ||||||
| (* abc_box_id = 22, lib_whitebox *) | (* abc_box_id = 2, lib_whitebox *) | ||||||
| module SB_LUT4 (output O, input I0, I1, I2, I3); | module SB_LUT4 (output O, input I0, I1, I2, I3); | ||||||
| 	parameter [15:0] LUT_INIT = 0; | 	parameter [15:0] LUT_INIT = 0; | ||||||
| 	wire [7:0] s3 = I3 ? LUT_INIT[15:8] : LUT_INIT[7:0]; | 	wire [7:0] s3 = I3 ? LUT_INIT[15:8] : LUT_INIT[7:0]; | ||||||
|  | @ -136,7 +136,7 @@ module SB_LUT4 (output O, input I0, I1, I2, I3); | ||||||
| 	assign O = I0 ? s1[1] : s1[0]; | 	assign O = I0 ? s1[1] : s1[0]; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| (* abc_box_id = 21, abc_carry, lib_whitebox *) | (* abc_box_id = 1, abc_carry, lib_whitebox *) | ||||||
| module SB_CARRY ((* abc_carry_out *) output CO, input I0, I1, (* abc_carry_in *) input CI); | module SB_CARRY ((* abc_carry_out *) output CO, input I0, I1, (* abc_carry_in *) input CI); | ||||||
| 	assign CO = (I0 && I1) || ((I0 || I1) && CI); | 	assign CO = (I0 && I1) || ((I0 || I1) && CI); | ||||||
| endmodule | endmodule | ||||||
|  |  | ||||||
|  | @ -1,5 +1,8 @@ | ||||||
| # Max delays from https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf | # Max delays from https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf | ||||||
| 
 | 
 | ||||||
|  | # NB: Inputs/Outputs must be ordered alphabetically | ||||||
|  | #     (with exceptions for carry in/out) | ||||||
|  | 
 | ||||||
| # Average across F7[AB]MUX | # Average across F7[AB]MUX | ||||||
| # Inputs: I0 I1 S0 | # Inputs: I0 I1 S0 | ||||||
| # Outputs: O | # Outputs: O | ||||||
|  | @ -17,51 +20,17 @@ MUXF78 10 1 6 1 | ||||||
| 190 193 217 223 296 273 | 190 193 217 223 296 273 | ||||||
| 
 | 
 | ||||||
| # CARRY4 + CARRY4_[ABCD]X | # CARRY4 + CARRY4_[ABCD]X | ||||||
| # Inputs: S0 S1 S2 S3 CYINIT DI0 DI1 DI2 DI3 CI | # Inputs: CYINIT DI0 DI1 DI2 DI3 S0 S1 S2 S3 CI | ||||||
| # Outputs:  O0 O1 O2 O3 CO0 CO1 CO2 CO3 | # Outputs:  O0 O1 O2 O3 CO0 CO1 CO2 CO3 | ||||||
| #   (NB: carry chain input/output must be last input/output, | #   (NB: carry chain input/output must be last | ||||||
| #        swapped with what normally would have been the last | #        input/output and have been moved there | ||||||
| #        output, here: CI <-> S, CO <-> O | #        overriding the alphabetical ordering) | ||||||
| CARRY4 3 1 10 8 | CARRY4 3 1 10 8 | ||||||
| 223 -   -   -   482 -   -   -   -   222 | 482 -   -   -   -   223 -   -   -   222 | ||||||
| 400 205 -   -   598 407 -   -   -   334 | 598 407 -   -   -   400 205 -   -   334 | ||||||
| 523 558 226 -   584 556 537 -   -   239 | 584 556 537 -   -   523 558 226 -   239 | ||||||
| 582 618 330 227 642 615 596 438 -   313 | 642 615 596 438 -   582 618 330 227 313 | ||||||
| 340 -   -   -   536 379 -   -   -   271 | 536 379 -   -   -   340 -   -   -   271 | ||||||
| 433 469 -   -   494 465 445 -   -   157 | 494 465 445 -   -   433 469 -   -   157 | ||||||
| 512 548 292 -   592 540 520 356 -   228 | 592 540 520 356 -   512 548 292 -   228 | ||||||
| 508 528 378 380 580 526 507 398 385 114 | 580 526 507 398 385 508 528 378 380 114 | ||||||
| 
 |  | ||||||
| # SLICEM/A6LUT |  | ||||||
| # Inputs: A0 A1 A2 A3 A4 A5 D DPRA0 DPRA1 DPRA2 DPRA3 DPRA4 DPRA5 WCLK WE |  | ||||||
| # Outputs: DPO SPO |  | ||||||
| RAM64X1D 4 0 15 2 |  | ||||||
| -   -   -   -   -   -   - 124 124 124 124 124 124 - - |  | ||||||
| 124 124 124 124 124 124 - -   -   -   -   -   124 - - |  | ||||||
| 
 |  | ||||||
| # SLICEM/A6LUT + F7[AB]MUX |  | ||||||
| # Inputs: A0 A1 A2 A3 A4 A5 A6 D DPRA0 DPRA1 DPRA2 DPRA3 DPRA4 DPRA5 DPRA6 WCLK WE |  | ||||||
| # Outputs: DPO SPO |  | ||||||
| RAM128X1D 5 0 17 2 |  | ||||||
| -   -   -   -   -   -   -   - 314 314 314 314 314 314 292 - - |  | ||||||
| 347 347 347 347 347 347 296 - -   -   -   -   -   -   -   - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C CE D R |  | ||||||
| # Outputs: Q |  | ||||||
| FDRE 6 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C CE D S |  | ||||||
| # Outputs: Q |  | ||||||
| FDSE 7 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C CE CLR D |  | ||||||
| # Outputs: Q |  | ||||||
| FDCE 8 0 4 1 |  | ||||||
| - - - - |  | ||||||
| 
 |  | ||||||
| # Inputs: C CE D PRE |  | ||||||
| # Outputs: Q |  | ||||||
| FDPE 9 0 4 1 |  | ||||||
| - - - - |  | ||||||
|  |  | ||||||
|  | @ -289,7 +289,6 @@ module FDPE_1 (output reg Q, input C, CE, D, PRE); | ||||||
|   always @(negedge C, posedge PRE) if (PRE) Q <= 1'b1; else if (CE) Q <= D; |   always @(negedge C, posedge PRE) if (PRE) Q <= 1'b1; else if (CE) Q <= D; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| //(* abc_box_id = 4 /*, lib_whitebox*/ *) |  | ||||||
| module RAM64X1D ( | module RAM64X1D ( | ||||||
|   output DPO, SPO, |   output DPO, SPO, | ||||||
|   input  D, WCLK, WE, |   input  D, WCLK, WE, | ||||||
|  | @ -307,7 +306,6 @@ module RAM64X1D ( | ||||||
|   always @(posedge clk) if (WE) mem[a] <= D; |   always @(posedge clk) if (WE) mem[a] <= D; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| //(* abc_box_id = 5 /*, lib_whitebox*/ *) |  | ||||||
| module RAM128X1D ( | module RAM128X1D ( | ||||||
|   output       DPO, SPO, |   output       DPO, SPO, | ||||||
|   input        D, WCLK, WE, |   input        D, WCLK, WE, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue