mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into xc7mux
This commit is contained in:
		
						commit
						f81a0ed92e
					
				
					 6 changed files with 40 additions and 5 deletions
				
			
		
							
								
								
									
										4
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -46,6 +46,10 @@ OS := $(shell uname -s) | ||||||
| PREFIX ?= /usr/local | PREFIX ?= /usr/local | ||||||
| INSTALL_SUDO := | INSTALL_SUDO := | ||||||
| 
 | 
 | ||||||
|  | ifneq ($(wildcard Makefile.conf),) | ||||||
|  | include Makefile.conf | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| BINDIR := $(PREFIX)/bin | BINDIR := $(PREFIX)/bin | ||||||
| LIBDIR := $(PREFIX)/lib | LIBDIR := $(PREFIX)/lib | ||||||
| DATDIR := $(PREFIX)/share/yosys | DATDIR := $(PREFIX)/share/yosys | ||||||
|  |  | ||||||
|  | @ -48,6 +48,14 @@ USING_YOSYS_NAMESPACE | ||||||
| #include "VhdlUnits.h" | #include "VhdlUnits.h" | ||||||
| #include "VeriLibrary.h" | #include "VeriLibrary.h" | ||||||
| 
 | 
 | ||||||
|  | #ifndef SYMBIOTIC_VERIFIC_API_VERSION | ||||||
|  | #  error "Only Symbiotic EDA flavored Verific is supported. Please contact office@symbioticeda.com for commercial support for Yosys+Verific." | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if SYMBIOTIC_VERIFIC_API_VERSION < 1 | ||||||
|  | #  error "Please update your version of Symbiotic EDA flavored Verific." | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #ifdef __clang__ | #ifdef __clang__ | ||||||
| #pragma clang diagnostic pop | #pragma clang diagnostic pop | ||||||
| #endif | #endif | ||||||
|  | @ -2016,6 +2024,9 @@ struct VerificPass : public Pass { | ||||||
| 			// WARNING: instantiating unknown module 'XYZ' (VERI-1063)
 | 			// WARNING: instantiating unknown module 'XYZ' (VERI-1063)
 | ||||||
| 			Message::SetMessageType("VERI-1063", VERIFIC_ERROR); | 			Message::SetMessageType("VERI-1063", VERIFIC_ERROR); | ||||||
| 
 | 
 | ||||||
|  | 			// https://github.com/YosysHQ/yosys/issues/1055
 | ||||||
|  | 			RuntimeFlags::SetVar("veri_elaborate_top_level_modules_having_interface_ports", 1) ; | ||||||
|  | 
 | ||||||
| #ifndef DB_PRESERVE_INITIAL_VALUE | #ifndef DB_PRESERVE_INITIAL_VALUE | ||||||
| #  warning Verific was built without DB_PRESERVE_INITIAL_VALUE. | #  warning Verific was built without DB_PRESERVE_INITIAL_VALUE. | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -52,7 +52,9 @@ struct TeePass : public Pass { | ||||||
| 	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE | 	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE | ||||||
| 	{ | 	{ | ||||||
| 		std::vector<FILE*> backup_log_files, files_to_close; | 		std::vector<FILE*> backup_log_files, files_to_close; | ||||||
|  | 		std::vector<std::ostream*> backup_log_streams; | ||||||
| 		int backup_log_verbose_level = log_verbose_level; | 		int backup_log_verbose_level = log_verbose_level; | ||||||
|  | 		backup_log_streams = log_streams; | ||||||
| 		backup_log_files = log_files; | 		backup_log_files = log_files; | ||||||
| 
 | 
 | ||||||
| 		size_t argidx; | 		size_t argidx; | ||||||
|  | @ -60,6 +62,7 @@ struct TeePass : public Pass { | ||||||
| 		{ | 		{ | ||||||
| 			if (args[argidx] == "-q" && files_to_close.empty()) { | 			if (args[argidx] == "-q" && files_to_close.empty()) { | ||||||
| 				log_files.clear(); | 				log_files.clear(); | ||||||
|  | 				log_streams.clear(); | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			if ((args[argidx] == "-o" || args[argidx] == "-a") && argidx+1 < args.size()) { | 			if ((args[argidx] == "-o" || args[argidx] == "-a") && argidx+1 < args.size()) { | ||||||
|  | @ -89,6 +92,7 @@ struct TeePass : public Pass { | ||||||
| 			for (auto cf : files_to_close) | 			for (auto cf : files_to_close) | ||||||
| 				fclose(cf); | 				fclose(cf); | ||||||
| 			log_files = backup_log_files; | 			log_files = backup_log_files; | ||||||
|  | 			log_streams = backup_log_streams; | ||||||
| 			throw; | 			throw; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -97,6 +101,7 @@ struct TeePass : public Pass { | ||||||
| 
 | 
 | ||||||
| 		log_verbose_level = backup_log_verbose_level; | 		log_verbose_level = backup_log_verbose_level; | ||||||
| 		log_files = backup_log_files; | 		log_files = backup_log_files; | ||||||
|  | 		log_streams = backup_log_streams; | ||||||
| 	} | 	} | ||||||
| } TeePass; | } TeePass; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,7 @@ | ||||||
| pattern shiftmul | pattern shiftmul | ||||||
|  | // | ||||||
|  | // Optimize mul+shift pairs that result from expressions such as foo[s*W+:W] | ||||||
|  | // | ||||||
| 
 | 
 | ||||||
| state <SigSpec> shamt | state <SigSpec> shamt | ||||||
| 
 | 
 | ||||||
|  | @ -49,12 +52,16 @@ code | ||||||
| 	if (GetSize(port(shift, \Y)) > const_factor) | 	if (GetSize(port(shift, \Y)) > const_factor) | ||||||
| 		reject; | 		reject; | ||||||
| 
 | 
 | ||||||
|  | 	int factor_bits = ceil_log2(const_factor); | ||||||
|  | 	SigSpec mul_din = port(mul, const_factor_port == \A ? \B : \A); | ||||||
|  | 
 | ||||||
|  | 	if (GetSize(shamt) < factor_bits+GetSize(mul_din)) | ||||||
|  | 		reject; | ||||||
|  | 
 | ||||||
| 	did_something = true; | 	did_something = true; | ||||||
| 	log("shiftmul pattern in %s: shift=%s, mul=%s\n", log_id(module), log_id(shift), log_id(mul)); | 	log("shiftmul pattern in %s: shift=%s, mul=%s\n", log_id(module), log_id(shift), log_id(mul)); | ||||||
| 
 | 
 | ||||||
| 	int new_const_factor_log2 = ceil_log2(const_factor); | 	int new_const_factor = 1 << factor_bits; | ||||||
| 	int new_const_factor = 1 << new_const_factor_log2; |  | ||||||
| 
 |  | ||||||
| 	SigSpec padding(State::Sx, new_const_factor-const_factor); | 	SigSpec padding(State::Sx, new_const_factor-const_factor); | ||||||
| 	SigSpec old_a = port(shift, \A), new_a; | 	SigSpec old_a = port(shift, \A), new_a; | ||||||
| 	int trunc = 0; | 	int trunc = 0; | ||||||
|  | @ -73,7 +80,7 @@ code | ||||||
| 	if (trunc > 0) | 	if (trunc > 0) | ||||||
| 		new_a.remove(GetSize(new_a)-trunc, trunc); | 		new_a.remove(GetSize(new_a)-trunc, trunc); | ||||||
| 
 | 
 | ||||||
| 	SigSpec new_b = {port(mul, const_factor_port == \A ? \B : \A), SigSpec(State::S0, new_const_factor_log2)}; | 	SigSpec new_b = {mul_din, SigSpec(State::S0, factor_bits)}; | ||||||
| 	if (param(shift, \B_SIGNED).as_bool()) | 	if (param(shift, \B_SIGNED).as_bool()) | ||||||
| 		new_b.append(State::S0); | 		new_b.append(State::S0); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -277,7 +277,11 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 			if (!nomux || help_mode) | 			if (!nomux || help_mode) | ||||||
| 				run("techmap -map +/xilinx/cells_map.v"); | 				run("techmap -map +/xilinx/cells_map.v"); | ||||||
| 
 | 
 | ||||||
| 			run("techmap"); | 			if (!vpr || help_mode) | ||||||
|  | 				run("techmap -map +/techmap.v -map +/xilinx/arith_map.v"); | ||||||
|  | 			else | ||||||
|  | 				run("techmap -map +/techmap.v +/xilinx/arith_map.v -D _EXPLICIT_CARRY"); | ||||||
|  | 
 | ||||||
| 			run("opt -fast"); | 			run("opt -fast"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,6 +2,10 @@ module peepopt_shiftmul_0 #(parameter N=3, parameter W=3) (input [N*W-1:0] i, in | ||||||
| assign o = i[s*W+:W]; | assign o = i[s*W+:W]; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  | module peepopt_shiftmul_1 (output y, input [2:0] w); | ||||||
|  | assign y = 1'b1 >> (w * (3'b110)); | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
| module peepopt_muldiv_0(input [1:0] i, output [1:0] o); | module peepopt_muldiv_0(input [1:0] i, output [1:0] o); | ||||||
| wire [3:0] t; | wire [3:0] t; | ||||||
| assign t = i * 3; | assign t = i * 3; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue