mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into xaig_dff
This commit is contained in:
		
						commit
						bbc0e06af3
					
				
					 8 changed files with 33 additions and 184 deletions
				
			
		|  | @ -3554,6 +3554,12 @@ bool RTLIL::SigSpec::operator ==(const RTLIL::SigSpec &other) const | |||
| 	if (width_ != other.width_) | ||||
| 		return false; | ||||
| 
 | ||||
| 	// Without this, SigSpec() == SigSpec(State::S0, 0) will fail
 | ||||
| 	//   since the RHS will contain one SigChunk of width 0 causing
 | ||||
| 	//   the size check below to fail
 | ||||
| 	if (width_ == 0) | ||||
| 		return true; | ||||
| 
 | ||||
| 	pack(); | ||||
| 	other.pack(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -609,8 +609,11 @@ struct RTLIL::Const | |||
| 	std::string decode_string() const; | ||||
| 
 | ||||
| 	inline int size() const { return bits.size(); } | ||||
| 	inline bool empty() const { return bits.empty(); } | ||||
| 	inline RTLIL::State &operator[](int index) { return bits.at(index); } | ||||
| 	inline const RTLIL::State &operator[](int index) const { return bits.at(index); } | ||||
| 	inline decltype(bits)::iterator begin() { return bits.begin(); } | ||||
| 	inline decltype(bits)::iterator end() { return bits.end(); } | ||||
| 
 | ||||
| 	bool is_fully_zero() const; | ||||
| 	bool is_fully_ones() const; | ||||
|  |  | |||
|  | @ -277,7 +277,9 @@ match postAdd | |||
| 	index <SigBit> port(postAdd, AB)[0] === sigP[0] | ||||
| 	filter GetSize(port(postAdd, AB)) >= GetSize(sigP) | ||||
| 	filter port(postAdd, AB).extract(0, GetSize(sigP)) == sigP | ||||
| 	filter port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(sigP[GetSize(sigP)-1], GetSize(port(postAdd, AB))-GetSize(sigP)) | ||||
| 	// Check that remainder of AB is a sign-extension | ||||
| 	define <bool> AB_SIGNED (param(postAdd, AB == \A ? \A_SIGNED : \B_SIGNED).as_bool()) | ||||
| 	filter port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(AB_SIGNED ? sigP[GetSize(sigP)-1] : State::S0, GetSize(port(postAdd, AB))-GetSize(sigP)) | ||||
| 	set postAddAB AB | ||||
| 	optional | ||||
| endmatch | ||||
|  |  | |||
|  | @ -242,7 +242,7 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *module, std::string scrip | |||
| 		bool cleanup, vector<int> lut_costs, bool /*dff_mode*/, std::string /*clk_str*/, | ||||
| 		bool /*keepff*/, std::string delay_target, std::string /*lutin_shared*/, bool fast_mode, | ||||
| 		bool show_tempdir, std::string box_file, std::string lut_file, | ||||
| 		std::string wire_delay, const dict<int,IdString> &box_lookup | ||||
| 		std::string wire_delay, const dict<int,IdString> &box_lookup, bool nomfs | ||||
| ) | ||||
| { | ||||
| 	map_autoidx = autoidx++; | ||||
|  | @ -307,6 +307,10 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *module, std::string scrip | |||
| 	for (size_t pos = abc9_script.find("{W}"); pos != std::string::npos; pos = abc9_script.find("{W}", pos)) | ||||
| 		abc9_script = abc9_script.substr(0, pos) + wire_delay + abc9_script.substr(pos+3); | ||||
| 
 | ||||
| 	if (nomfs) | ||||
| 		for (size_t pos = abc9_script.find("&mfs"); pos != std::string::npos; pos = abc9_script.find("&mfs", pos)) | ||||
| 			abc9_script = abc9_script.erase(pos, strlen("&mfs")); | ||||
| 
 | ||||
| 	abc9_script += stringf("; &write %s/output.aig", tempdir_name.c_str()); | ||||
| 	abc9_script = add_echos_to_abc9_cmd(abc9_script); | ||||
| 
 | ||||
|  | @ -868,6 +872,7 @@ struct Abc9Pass : public Pass { | |||
| 		std::string delay_target, lutin_shared = "-S 1", wire_delay; | ||||
| 		bool fast_mode = false, /*dff_mode = false,*/ keepff = false, cleanup = true; | ||||
| 		bool show_tempdir = false; | ||||
| 		bool nomfs = false; | ||||
| 		vector<int> lut_costs; | ||||
| 		markgroups = false; | ||||
| 
 | ||||
|  | @ -990,6 +995,10 @@ struct Abc9Pass : public Pass { | |||
| 				wire_delay = "-W " + args[++argidx]; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (arg == "-nomfs") { | ||||
| 				nomfs = true; | ||||
| 				continue; | ||||
| 			} | ||||
| 			break; | ||||
| 		} | ||||
| 		extra_args(args, argidx, design); | ||||
|  | @ -1241,7 +1250,8 @@ struct Abc9Pass : public Pass { | |||
| 				sel.selected_members[module->name] = std::move(it.second); | ||||
| 				abc9_module(design, module, script_file, exe_file, cleanup, lut_costs, false, "$", | ||||
| 						keepff, delay_target, lutin_shared, fast_mode, show_tempdir, | ||||
| 						box_file, lut_file, wire_delay, box_lookup); | ||||
| 						box_file, lut_file, wire_delay, box_lookup, nomfs); | ||||
| 				assign_map.set(mod); | ||||
| 			} | ||||
| 			design->selection_stack.pop_back(); | ||||
| 			design->selected_active_module.clear(); | ||||
|  |  | |||
|  | @ -137,7 +137,7 @@ XC6V_CELLS = [ | |||
|     Cell('SYSMON'), | ||||
| 
 | ||||
|     # Arithmetic functions. | ||||
|     Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}), | ||||
|     #Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}), | ||||
| 
 | ||||
|     # Clock components. | ||||
|     # Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}), | ||||
|  | @ -264,7 +264,7 @@ XC7_CELLS = [ | |||
|     Cell('XADC'), | ||||
| 
 | ||||
|     # Arithmetic functions. | ||||
|     Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}), | ||||
|     #Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}), | ||||
| 
 | ||||
|     # Clock components. | ||||
|     # Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}), | ||||
|  |  | |||
|  | @ -481,10 +481,14 @@ struct SynthXilinxPass : public ScriptPass | |||
| 							"will use timing for 'xc7' instead.\n", family.c_str()); | ||||
| 				run("techmap -map +/xilinx/abc9_map.v -max_iter 1"); | ||||
| 				run("read_verilog -icells -lib +/xilinx/abc9_model.v"); | ||||
| 				std::string abc9_opts = " -box +/xilinx/abc_xc7.box"; | ||||
| 				abc9_opts += stringf(" -W %d", XC7_WIRE_DELAY); | ||||
| 				abc9_opts += " -nomfs"; | ||||
| 				if (nowidelut) | ||||
| 					run("abc9 -lut +/xilinx/abc9_xc7_nowide.lut -box +/xilinx/abc9_xc7.box -W " + std::to_string(XC7_WIRE_DELAY)); | ||||
| 					abc9_opts += " -lut +/xilinx/abc_xc7_nowide.lut"; | ||||
| 				else | ||||
| 					run("abc9 -lut +/xilinx/abc9_xc7.lut -box +/xilinx/abc9_xc7.box -W " + std::to_string(XC7_WIRE_DELAY)); | ||||
| 					abc9_opts += " -lut +/xilinx/abc_xc7.lut"; | ||||
| 				run("abc9" + abc9_opts); | ||||
| 			} | ||||
| 			else { | ||||
| 				if (nowidelut) | ||||
|  |  | |||
|  | @ -647,94 +647,6 @@ module SYSMON (...); | |||
|     input [6:0] DADDR; | ||||
| endmodule | ||||
| 
 | ||||
| module DSP48E1 (...); | ||||
|     parameter integer ACASCREG = 1; | ||||
|     parameter integer ADREG = 1; | ||||
|     parameter integer ALUMODEREG = 1; | ||||
|     parameter integer AREG = 1; | ||||
|     parameter AUTORESET_PATDET = "NO_RESET"; | ||||
|     parameter A_INPUT = "DIRECT"; | ||||
|     parameter integer BCASCREG = 1; | ||||
|     parameter integer BREG = 1; | ||||
|     parameter B_INPUT = "DIRECT"; | ||||
|     parameter integer CARRYINREG = 1; | ||||
|     parameter integer CARRYINSELREG = 1; | ||||
|     parameter integer CREG = 1; | ||||
|     parameter integer DREG = 1; | ||||
|     parameter integer INMODEREG = 1; | ||||
|     parameter integer MREG = 1; | ||||
|     parameter integer OPMODEREG = 1; | ||||
|     parameter integer PREG = 1; | ||||
|     parameter SEL_MASK = "MASK"; | ||||
|     parameter SEL_PATTERN = "PATTERN"; | ||||
|     parameter USE_DPORT = "FALSE"; | ||||
|     parameter USE_MULT = "MULTIPLY"; | ||||
|     parameter USE_PATTERN_DETECT = "NO_PATDET"; | ||||
|     parameter USE_SIMD = "ONE48"; | ||||
|     parameter [47:0] MASK = 48'h3FFFFFFFFFFF; | ||||
|     parameter [47:0] PATTERN = 48'h000000000000; | ||||
|     parameter [3:0] IS_ALUMODE_INVERTED = 4'b0; | ||||
|     parameter [0:0] IS_CARRYIN_INVERTED = 1'b0; | ||||
|     parameter [0:0] IS_CLK_INVERTED = 1'b0; | ||||
|     parameter [4:0] IS_INMODE_INVERTED = 5'b0; | ||||
|     parameter [6:0] IS_OPMODE_INVERTED = 7'b0; | ||||
|     output [29:0] ACOUT; | ||||
|     output [17:0] BCOUT; | ||||
|     output CARRYCASCOUT; | ||||
|     output [3:0] CARRYOUT; | ||||
|     output MULTSIGNOUT; | ||||
|     output OVERFLOW; | ||||
|     output [47:0] P; | ||||
|     output PATTERNBDETECT; | ||||
|     output PATTERNDETECT; | ||||
|     output [47:0] PCOUT; | ||||
|     output UNDERFLOW; | ||||
|     input [29:0] A; | ||||
|     input [29:0] ACIN; | ||||
|     (* invertible_pin = "IS_ALUMODE_INVERTED" *) | ||||
|     input [3:0] ALUMODE; | ||||
|     input [17:0] B; | ||||
|     input [17:0] BCIN; | ||||
|     input [47:0] C; | ||||
|     input CARRYCASCIN; | ||||
|     (* invertible_pin = "IS_CARRYIN_INVERTED" *) | ||||
|     input CARRYIN; | ||||
|     input [2:0] CARRYINSEL; | ||||
|     input CEA1; | ||||
|     input CEA2; | ||||
|     input CEAD; | ||||
|     input CEALUMODE; | ||||
|     input CEB1; | ||||
|     input CEB2; | ||||
|     input CEC; | ||||
|     input CECARRYIN; | ||||
|     input CECTRL; | ||||
|     input CED; | ||||
|     input CEINMODE; | ||||
|     input CEM; | ||||
|     input CEP; | ||||
|     (* clkbuf_sink *) | ||||
|     (* invertible_pin = "IS_CLK_INVERTED" *) | ||||
|     input CLK; | ||||
|     input [24:0] D; | ||||
|     (* invertible_pin = "IS_INMODE_INVERTED" *) | ||||
|     input [4:0] INMODE; | ||||
|     input MULTSIGNIN; | ||||
|     (* invertible_pin = "IS_OPMODE_INVERTED" *) | ||||
|     input [6:0] OPMODE; | ||||
|     input [47:0] PCIN; | ||||
|     input RSTA; | ||||
|     input RSTALLCARRYIN; | ||||
|     input RSTALUMODE; | ||||
|     input RSTB; | ||||
|     input RSTC; | ||||
|     input RSTCTRL; | ||||
|     input RSTD; | ||||
|     input RSTINMODE; | ||||
|     input RSTM; | ||||
|     input RSTP; | ||||
| endmodule | ||||
| 
 | ||||
| module BUFGCE (...); | ||||
|     parameter CE_TYPE = "SYNC"; | ||||
|     parameter [0:0] IS_CE_INVERTED = 1'b0; | ||||
|  |  | |||
|  | @ -3376,94 +3376,6 @@ module XADC (...); | |||
|     input [6:0] DADDR; | ||||
| endmodule | ||||
| 
 | ||||
| module DSP48E1 (...); | ||||
|     parameter integer ACASCREG = 1; | ||||
|     parameter integer ADREG = 1; | ||||
|     parameter integer ALUMODEREG = 1; | ||||
|     parameter integer AREG = 1; | ||||
|     parameter AUTORESET_PATDET = "NO_RESET"; | ||||
|     parameter A_INPUT = "DIRECT"; | ||||
|     parameter integer BCASCREG = 1; | ||||
|     parameter integer BREG = 1; | ||||
|     parameter B_INPUT = "DIRECT"; | ||||
|     parameter integer CARRYINREG = 1; | ||||
|     parameter integer CARRYINSELREG = 1; | ||||
|     parameter integer CREG = 1; | ||||
|     parameter integer DREG = 1; | ||||
|     parameter integer INMODEREG = 1; | ||||
|     parameter integer MREG = 1; | ||||
|     parameter integer OPMODEREG = 1; | ||||
|     parameter integer PREG = 1; | ||||
|     parameter SEL_MASK = "MASK"; | ||||
|     parameter SEL_PATTERN = "PATTERN"; | ||||
|     parameter USE_DPORT = "FALSE"; | ||||
|     parameter USE_MULT = "MULTIPLY"; | ||||
|     parameter USE_PATTERN_DETECT = "NO_PATDET"; | ||||
|     parameter USE_SIMD = "ONE48"; | ||||
|     parameter [47:0] MASK = 48'h3FFFFFFFFFFF; | ||||
|     parameter [47:0] PATTERN = 48'h000000000000; | ||||
|     parameter [3:0] IS_ALUMODE_INVERTED = 4'b0; | ||||
|     parameter [0:0] IS_CARRYIN_INVERTED = 1'b0; | ||||
|     parameter [0:0] IS_CLK_INVERTED = 1'b0; | ||||
|     parameter [4:0] IS_INMODE_INVERTED = 5'b0; | ||||
|     parameter [6:0] IS_OPMODE_INVERTED = 7'b0; | ||||
|     output [29:0] ACOUT; | ||||
|     output [17:0] BCOUT; | ||||
|     output CARRYCASCOUT; | ||||
|     output [3:0] CARRYOUT; | ||||
|     output MULTSIGNOUT; | ||||
|     output OVERFLOW; | ||||
|     output [47:0] P; | ||||
|     output PATTERNBDETECT; | ||||
|     output PATTERNDETECT; | ||||
|     output [47:0] PCOUT; | ||||
|     output UNDERFLOW; | ||||
|     input [29:0] A; | ||||
|     input [29:0] ACIN; | ||||
|     (* invertible_pin = "IS_ALUMODE_INVERTED" *) | ||||
|     input [3:0] ALUMODE; | ||||
|     input [17:0] B; | ||||
|     input [17:0] BCIN; | ||||
|     input [47:0] C; | ||||
|     input CARRYCASCIN; | ||||
|     (* invertible_pin = "IS_CARRYIN_INVERTED" *) | ||||
|     input CARRYIN; | ||||
|     input [2:0] CARRYINSEL; | ||||
|     input CEA1; | ||||
|     input CEA2; | ||||
|     input CEAD; | ||||
|     input CEALUMODE; | ||||
|     input CEB1; | ||||
|     input CEB2; | ||||
|     input CEC; | ||||
|     input CECARRYIN; | ||||
|     input CECTRL; | ||||
|     input CED; | ||||
|     input CEINMODE; | ||||
|     input CEM; | ||||
|     input CEP; | ||||
|     (* clkbuf_sink *) | ||||
|     (* invertible_pin = "IS_CLK_INVERTED" *) | ||||
|     input CLK; | ||||
|     input [24:0] D; | ||||
|     (* invertible_pin = "IS_INMODE_INVERTED" *) | ||||
|     input [4:0] INMODE; | ||||
|     input MULTSIGNIN; | ||||
|     (* invertible_pin = "IS_OPMODE_INVERTED" *) | ||||
|     input [6:0] OPMODE; | ||||
|     input [47:0] PCIN; | ||||
|     input RSTA; | ||||
|     input RSTALLCARRYIN; | ||||
|     input RSTALUMODE; | ||||
|     input RSTB; | ||||
|     input RSTC; | ||||
|     input RSTCTRL; | ||||
|     input RSTD; | ||||
|     input RSTINMODE; | ||||
|     input RSTM; | ||||
|     input RSTP; | ||||
| endmodule | ||||
| 
 | ||||
| module BUFGCE (...); | ||||
|     parameter CE_TYPE = "SYNC"; | ||||
|     parameter [0:0] IS_CE_INVERTED = 1'b0; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue