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 | ||||
| INSTALL_SUDO := | ||||
| 
 | ||||
| ifneq ($(wildcard Makefile.conf),) | ||||
| include Makefile.conf | ||||
| endif | ||||
| 
 | ||||
| BINDIR := $(PREFIX)/bin | ||||
| LIBDIR := $(PREFIX)/lib | ||||
| DATDIR := $(PREFIX)/share/yosys | ||||
|  |  | |||
|  | @ -48,6 +48,14 @@ USING_YOSYS_NAMESPACE | |||
| #include "VhdlUnits.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__ | ||||
| #pragma clang diagnostic pop | ||||
| #endif | ||||
|  | @ -2016,6 +2024,9 @@ struct VerificPass : public Pass { | |||
| 			// WARNING: instantiating unknown module 'XYZ' (VERI-1063)
 | ||||
| 			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 | ||||
| #  warning Verific was built without DB_PRESERVE_INITIAL_VALUE. | ||||
| #endif | ||||
|  |  | |||
|  | @ -52,7 +52,9 @@ struct TeePass : public Pass { | |||
| 	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE | ||||
| 	{ | ||||
| 		std::vector<FILE*> backup_log_files, files_to_close; | ||||
| 		std::vector<std::ostream*> backup_log_streams; | ||||
| 		int backup_log_verbose_level = log_verbose_level; | ||||
| 		backup_log_streams = log_streams; | ||||
| 		backup_log_files = log_files; | ||||
| 
 | ||||
| 		size_t argidx; | ||||
|  | @ -60,6 +62,7 @@ struct TeePass : public Pass { | |||
| 		{ | ||||
| 			if (args[argidx] == "-q" && files_to_close.empty()) { | ||||
| 				log_files.clear(); | ||||
| 				log_streams.clear(); | ||||
| 				continue; | ||||
| 			} | ||||
| 			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) | ||||
| 				fclose(cf); | ||||
| 			log_files = backup_log_files; | ||||
| 			log_streams = backup_log_streams; | ||||
| 			throw; | ||||
| 		} | ||||
| 
 | ||||
|  | @ -97,6 +101,7 @@ struct TeePass : public Pass { | |||
| 
 | ||||
| 		log_verbose_level = backup_log_verbose_level; | ||||
| 		log_files = backup_log_files; | ||||
| 		log_streams = backup_log_streams; | ||||
| 	} | ||||
| } TeePass; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,7 @@ | |||
| pattern shiftmul | ||||
| // | ||||
| // Optimize mul+shift pairs that result from expressions such as foo[s*W+:W] | ||||
| // | ||||
| 
 | ||||
| state <SigSpec> shamt | ||||
| 
 | ||||
|  | @ -49,12 +52,16 @@ code | |||
| 	if (GetSize(port(shift, \Y)) > const_factor) | ||||
| 		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; | ||||
| 	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 << new_const_factor_log2; | ||||
| 
 | ||||
| 	int new_const_factor = 1 << factor_bits; | ||||
| 	SigSpec padding(State::Sx, new_const_factor-const_factor); | ||||
| 	SigSpec old_a = port(shift, \A), new_a; | ||||
| 	int trunc = 0; | ||||
|  | @ -73,7 +80,7 @@ code | |||
| 	if (trunc > 0) | ||||
| 		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()) | ||||
| 		new_b.append(State::S0); | ||||
| 
 | ||||
|  |  | |||
|  | @ -277,7 +277,11 @@ struct SynthXilinxPass : public ScriptPass | |||
| 			if (!nomux || help_mode) | ||||
| 				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"); | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -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]; | ||||
| 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); | ||||
| wire [3:0] t; | ||||
| assign t = i * 3; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue