mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Revert "Merge upstream"
This reverts commitc58a50f880, reversing changes made toa1c3c98773.
This commit is contained in:
		
							parent
							
								
									c58a50f880
								
							
						
					
					
						commit
						e73d51dbf0
					
				
					 15 changed files with 49 additions and 110 deletions
				
			
		
							
								
								
									
										2
									
								
								.github/actions/setup-build-env/action.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/actions/setup-build-env/action.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -8,7 +8,7 @@ runs: | ||||||
|       shell: bash |       shell: bash | ||||||
|       run: | |       run: | | ||||||
|         sudo apt-get update |         sudo apt-get update | ||||||
|         sudo apt-get install gperf build-essential bison flex libreadline-dev gawk tcl-dev libffi-dev git graphviz xdot pkg-config python3 libboost-system-dev libboost-python-dev libboost-filesystem-dev zlib1g-dev libbz2-dev libnsl-dev libdwarf-dev libelf-dev elfutils libdw-dev |         sudo apt-get install gperf build-essential bison flex libreadline-dev gawk tcl-dev libffi-dev git graphviz xdot pkg-config python3 libboost-system-dev libboost-python-dev libboost-filesystem-dev zlib1g-dev libnsl-dev libbz2-dev libdwarf-dev libelf-dev elfutils libdw-dev | ||||||
| 
 | 
 | ||||||
|     - name: Install macOS Dependencies |     - name: Install macOS Dependencies | ||||||
|       if: runner.os == 'macOS' |       if: runner.os == 'macOS' | ||||||
|  |  | ||||||
							
								
								
									
										9
									
								
								.github/workflows/test-compile.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/workflows/test-compile.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -30,15 +30,18 @@ jobs: | ||||||
|           - ubuntu-latest |           - ubuntu-latest | ||||||
|         compiler: |         compiler: | ||||||
|           # oldest supported |           # oldest supported | ||||||
|           - 'clang-10' |           - 'clang-14' | ||||||
|           - 'gcc-10' |           - 'gcc-10' | ||||||
|           # newest, make sure to update maximum standard step to match |           # newest, make sure to update maximum standard step to match | ||||||
|           - 'clang-19' |           - 'clang-18' | ||||||
|           - 'gcc-13' |           - 'gcc-13' | ||||||
|         include: |         include: | ||||||
|           # macOS |           # macOS | ||||||
|           - os: macos-13 |           - os: macos-13 | ||||||
|             compiler: 'clang' |             compiler: 'clang' | ||||||
|  |           # oldest clang not available on ubuntu-latest | ||||||
|  |           - os: ubuntu-20.04 | ||||||
|  |             compiler: 'clang-10' | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout Yosys |       - name: Checkout Yosys | ||||||
|  | @ -69,7 +72,7 @@ jobs: | ||||||
| 
 | 
 | ||||||
|       # maximum standard, only on newest compilers |       # maximum standard, only on newest compilers | ||||||
|       - name: Build C++20 |       - name: Build C++20 | ||||||
|         if: ${{ matrix.compiler == 'clang-19' || matrix.compiler == 'gcc-13' }} |         if: ${{ matrix.compiler == 'clang-18' || matrix.compiler == 'gcc-13' }} | ||||||
|         shell: bash |         shell: bash | ||||||
|         run: | |         run: | | ||||||
|           make config-$CC_SHORT |           make config-$CC_SHORT | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								COPYING
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								COPYING
									
										
									
									
									
								
							|  | @ -1,6 +1,6 @@ | ||||||
| ISC License | ISC License | ||||||
| 
 | 
 | ||||||
| Copyright (C) 2012 - 2025  Claire Xenia Wolf <claire@yosyshq.com> | Copyright (C) 2012 - 2020  Claire Xenia Wolf <claire@yosyshq.com> | ||||||
| 
 | 
 | ||||||
| Permission to use, copy, modify, and/or distribute this software for any | Permission to use, copy, modify, and/or distribute this software for any | ||||||
| purpose with or without fee is hereby granted, provided that the above | purpose with or without fee is hereby granted, provided that the above | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -171,7 +171,7 @@ ifeq ($(OS), Haiku) | ||||||
| CXXFLAGS += -D_DEFAULT_SOURCE | CXXFLAGS += -D_DEFAULT_SOURCE | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| YOSYS_VER := 0.48+98 | YOSYS_VER := 0.48+77 | ||||||
| 
 | 
 | ||||||
| # Note: We arrange for .gitcommit to contain the (short) commit hash in
 | # Note: We arrange for .gitcommit to contain the (short) commit hash in
 | ||||||
| # tarballs generated with git-archive(1) using .gitattributes. The git repo
 | # tarballs generated with git-archive(1) using .gitattributes. The git repo
 | ||||||
|  |  | ||||||
|  | @ -11,29 +11,6 @@ yosys_ver = "0.48" | ||||||
| # select HTML theme | # select HTML theme | ||||||
| html_theme = 'furo-ys' | html_theme = 'furo-ys' | ||||||
| html_css_files = ['custom.css'] | html_css_files = ['custom.css'] | ||||||
| html_theme_options: dict[str] = { |  | ||||||
|     "source_repository": "https://github.com/YosysHQ/yosys/", |  | ||||||
|     "source_branch": "main", |  | ||||||
|     "source_directory": "docs/source/", |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # try to fix the readthedocs detection |  | ||||||
| html_context: dict[str] = { |  | ||||||
|     "READTHEDOCS": True, |  | ||||||
|     "display_github": True, |  | ||||||
|     "github_user": "YosysHQ", |  | ||||||
|     "github_repo": "yosys", |  | ||||||
|     "slug": "yosys", |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # override source_branch if not main |  | ||||||
| git_slug = os.getenv("READTHEDOCS_VERSION_NAME") |  | ||||||
| if git_slug not in [None, "latest", "stable"]: |  | ||||||
|     html_theme_options["source_branch"] = git_slug |  | ||||||
| 
 |  | ||||||
| # edit only works on branches, not tags |  | ||||||
| if os.getenv("READTHEDOCS_VERSION_TYPE", "branch") != "branch": |  | ||||||
|         html_theme_options["top_of_page_buttons"] = ["view"] |  | ||||||
| 
 | 
 | ||||||
| # These folders are copied to the documentation's HTML output | # These folders are copied to the documentation's HTML output | ||||||
| html_static_path = ['_static', "_images"] | html_static_path = ['_static', "_images"] | ||||||
|  |  | ||||||
|  | @ -97,8 +97,8 @@ Making a type hashable | ||||||
| 
 | 
 | ||||||
| Let's first take a look at the external interface on a simplified level. | Let's first take a look at the external interface on a simplified level. | ||||||
| Generally, to get the hash for ``T obj``, you would call the utility function | Generally, to get the hash for ``T obj``, you would call the utility function | ||||||
| ``run_hash<T>(const T& obj)``, corresponding to ``hash_ops<T>::hash(obj)``, | ``run_hash<T>(const T& obj)``, corresponding to ``hash_top_ops<T>::hash(obj)``, | ||||||
| the default implementation of which uses ``hash_ops<T>::hash_into(Hasher(), obj)``. | the default implementation of which is ``hash_ops<T>::hash_into(Hasher(), obj)``. | ||||||
| ``Hasher`` is the class actually implementing the hash function, hiding its | ``Hasher`` is the class actually implementing the hash function, hiding its | ||||||
| initialized internal state, and passing it out on ``hash_t yield()`` with | initialized internal state, and passing it out on ``hash_t yield()`` with | ||||||
| perhaps some finalization steps. | perhaps some finalization steps. | ||||||
|  | @ -121,14 +121,8 @@ size containers like ``std::vector<U>`` the size of the container is hashed | ||||||
| first. That is also how implementing hashing for a custom record data type | first. That is also how implementing hashing for a custom record data type | ||||||
| should be - unless there is strong reason to do otherwise, call ``h.eat(m)`` on | should be - unless there is strong reason to do otherwise, call ``h.eat(m)`` on | ||||||
| the ``Hasher h`` you have received for each member in sequence and ``return | the ``Hasher h`` you have received for each member in sequence and ``return | ||||||
| h;``. | h;``. If you do have a strong reason to do so, look at how | ||||||
| 
 | ``hash_top_ops<RTLIL::SigBit>`` is implemented in ``kernel/rtlil.h``. | ||||||
| The ``hash_ops<T>::hash(obj)`` method is not indended to be called when |  | ||||||
| context of implementing the hashing for a record or other compound type. |  | ||||||
| When writing it, you should connect it to ``hash_ops<T>::hash_into(Hasher h)`` |  | ||||||
| as shown below. If you have a strong reason to do so, and you have |  | ||||||
| to create a special implementation for top-level hashing, look at how |  | ||||||
| ``hash_ops<RTLIL::SigBit>::hash(...)`` is implemented in ``kernel/rtlil.h``. |  | ||||||
| 
 | 
 | ||||||
| Porting plugins from the legacy interface | Porting plugins from the legacy interface | ||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  | @ -154,11 +148,6 @@ based on the existance and value of `YS_HASHING_VERSION`. | ||||||
|       h.eat(b); |       h.eat(b); | ||||||
|       return h; |       return h; | ||||||
|    } |    } | ||||||
|    Hasher T::hash() const { |  | ||||||
|       Hasher h; |  | ||||||
|       h.eat(*this); |  | ||||||
|       return h; |  | ||||||
|    } |  | ||||||
|    #else |    #else | ||||||
|    #error "Unsupported hashing interface" |    #error "Unsupported hashing interface" | ||||||
|    #endif |    #endif | ||||||
|  |  | ||||||
|  | @ -1535,7 +1535,6 @@ void VerificImporter::import_netlist(RTLIL::Design *design, Netlist *nl, std::ma | ||||||
| 		log("Importing module %s.\n", RTLIL::id2cstr(module->name)); | 		log("Importing module %s.\n", RTLIL::id2cstr(module->name)); | ||||||
| 	} | 	} | ||||||
| 	import_attributes(module->attributes, nl, nl); | 	import_attributes(module->attributes, nl, nl); | ||||||
| 	if (module->name.isPublic()) |  | ||||||
| 	module->set_string_attribute(ID::hdlname, nl->CellBaseName()); | 	module->set_string_attribute(ID::hdlname, nl->CellBaseName()); | ||||||
| 	module->set_string_attribute(ID(library), nl->Owner()->Owner()->Name()); | 	module->set_string_attribute(ID(library), nl->Owner()->Owner()->Name()); | ||||||
| #ifdef VERIFIC_VHDL_SUPPORT | #ifdef VERIFIC_VHDL_SUPPORT | ||||||
|  |  | ||||||
|  | @ -61,9 +61,19 @@ namespace legacy { | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Hash a type with an accumulator in a record or array context | ||||||
|  |  */ | ||||||
| template<typename T> | template<typename T> | ||||||
| struct hash_ops; | struct hash_ops; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Hash a single instance in isolation. | ||||||
|  |  * Can have explicit specialization, but the default redirects to hash_ops | ||||||
|  |  */ | ||||||
|  | template<typename T> | ||||||
|  | struct hash_top_ops; | ||||||
|  | 
 | ||||||
| inline unsigned int mkhash_xorshift(unsigned int a) { | inline unsigned int mkhash_xorshift(unsigned int a) { | ||||||
| 	if (sizeof(a) == 4) { | 	if (sizeof(a) == 4) { | ||||||
| 		a ^= a << 13; | 		a ^= a << 13; | ||||||
|  | @ -137,14 +147,15 @@ private: | ||||||
| 
 | 
 | ||||||
| using Hasher = HasherDJB32; | using Hasher = HasherDJB32; | ||||||
| 
 | 
 | ||||||
| // Boilerplate compressor for trivially implementing
 | template<typename T> | ||||||
| // top-level hash method with hash_into
 | struct hash_top_ops { | ||||||
| #define HASH_TOP_LOOP_FST [[nodiscard]] static inline Hasher hash | 	static inline bool cmp(const T &a, const T &b) { | ||||||
| #define HASH_TOP_LOOP_SND { \ | 		return hash_ops<T>::cmp(a, b); | ||||||
| 	Hasher h; \ |  | ||||||
| 	h = hash_into(a, h); \ |  | ||||||
| 	return h; \ |  | ||||||
| 	} | 	} | ||||||
|  | 	static inline Hasher hash(const T &a) { | ||||||
|  | 		return hash_ops<T>::hash_into(a, Hasher()); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| template<typename T> | template<typename T> | ||||||
| struct hash_ops { | struct hash_ops { | ||||||
|  | @ -172,7 +183,6 @@ struct hash_ops { | ||||||
| 			return a.hash_into(h); | 			return a.hash_into(h); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	HASH_TOP_LOOP_FST (const T &a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<typename P, typename Q> struct hash_ops<std::pair<P, Q>> { | template<typename P, typename Q> struct hash_ops<std::pair<P, Q>> { | ||||||
|  | @ -184,7 +194,6 @@ template<typename P, typename Q> struct hash_ops<std::pair<P, Q>> { | ||||||
| 		h = hash_ops<Q>::hash_into(a.second, h); | 		h = hash_ops<Q>::hash_into(a.second, h); | ||||||
| 		return h; | 		return h; | ||||||
| 	} | 	} | ||||||
| 	HASH_TOP_LOOP_FST (std::pair<P, Q> a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<typename... T> struct hash_ops<std::tuple<T...>> { | template<typename... T> struct hash_ops<std::tuple<T...>> { | ||||||
|  | @ -202,7 +211,6 @@ template<typename... T> struct hash_ops<std::tuple<T...>> { | ||||||
| 		h = element_ops_t::hash_into(std::get<I>(a), h); | 		h = element_ops_t::hash_into(std::get<I>(a), h); | ||||||
| 		return h; | 		return h; | ||||||
| 	} | 	} | ||||||
| 	HASH_TOP_LOOP_FST (std::tuple<T...> a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<typename T> struct hash_ops<std::vector<T>> { | template<typename T> struct hash_ops<std::vector<T>> { | ||||||
|  | @ -215,7 +223,6 @@ template<typename T> struct hash_ops<std::vector<T>> { | ||||||
| 			h.eat(k); | 			h.eat(k); | ||||||
| 		return h; | 		return h; | ||||||
| 	} | 	} | ||||||
| 	HASH_TOP_LOOP_FST (std::vector<T> a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<typename T, size_t N> struct hash_ops<std::array<T, N>> { | template<typename T, size_t N> struct hash_ops<std::array<T, N>> { | ||||||
|  | @ -227,7 +234,6 @@ template<typename T, size_t N> struct hash_ops<std::array<T, N>> { | ||||||
|             h = hash_ops<T>::hash_into(k, h); |             h = hash_ops<T>::hash_into(k, h); | ||||||
|         return h; |         return h; | ||||||
|     } |     } | ||||||
| 	HASH_TOP_LOOP_FST (std::array<T, N> a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct hash_cstr_ops { | struct hash_cstr_ops { | ||||||
|  | @ -239,7 +245,6 @@ struct hash_cstr_ops { | ||||||
| 			h.hash32(*(a++)); | 			h.hash32(*(a++)); | ||||||
| 		return h; | 		return h; | ||||||
| 	} | 	} | ||||||
| 	HASH_TOP_LOOP_FST (const char *a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template <> struct hash_ops<char*> : hash_cstr_ops {}; | template <> struct hash_ops<char*> : hash_cstr_ops {}; | ||||||
|  | @ -251,7 +256,6 @@ struct hash_ptr_ops { | ||||||
| 	[[nodiscard]] static inline Hasher hash_into(const void *a, Hasher h) { | 	[[nodiscard]] static inline Hasher hash_into(const void *a, Hasher h) { | ||||||
| 		return hash_ops<uintptr_t>::hash_into((uintptr_t)a, h); | 		return hash_ops<uintptr_t>::hash_into((uintptr_t)a, h); | ||||||
| 	} | 	} | ||||||
| 	HASH_TOP_LOOP_FST (const void *a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct hash_obj_ops { | struct hash_obj_ops { | ||||||
|  | @ -266,8 +270,6 @@ struct hash_obj_ops { | ||||||
| 			h.eat(0); | 			h.eat(0); | ||||||
| 		return h; | 		return h; | ||||||
| 	} | 	} | ||||||
| 	template<typename T> |  | ||||||
| 	HASH_TOP_LOOP_FST (const T *a) HASH_TOP_LOOP_SND |  | ||||||
| }; | }; | ||||||
| /**
 | /**
 | ||||||
|  * If you find yourself using this function, think hard |  * If you find yourself using this function, think hard | ||||||
|  | @ -278,7 +280,7 @@ struct hash_obj_ops { | ||||||
| template<typename T> | template<typename T> | ||||||
| [[nodiscard]] | [[nodiscard]] | ||||||
| Hasher::hash_t run_hash(const T& obj) { | Hasher::hash_t run_hash(const T& obj) { | ||||||
| 	return hash_ops<T>::hash(obj).yield(); | 	return hash_top_ops<T>::hash(obj).yield(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** Refer to docs/source/yosys_internals/hashing.rst */ | /** Refer to docs/source/yosys_internals/hashing.rst */ | ||||||
|  | @ -350,10 +352,10 @@ inline unsigned int hashtable_size(unsigned int min_size) | ||||||
| 	throw std::length_error("hash table exceeded maximum size."); | 	throw std::length_error("hash table exceeded maximum size."); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename K, typename T, typename OPS = hash_ops<K>> class dict; | template<typename K, typename T, typename OPS = hash_top_ops<K>> class dict; | ||||||
| template<typename K, int offset = 0, typename OPS = hash_ops<K>> class idict; | template<typename K, int offset = 0, typename OPS = hash_top_ops<K>> class idict; | ||||||
| template<typename K, typename OPS = hash_ops<K>> class pool; | template<typename K, typename OPS = hash_top_ops<K>> class pool; | ||||||
| template<typename K, typename OPS = hash_ops<K>> class mfp; | template<typename K, typename OPS = hash_top_ops<K>> class mfp; | ||||||
| 
 | 
 | ||||||
| template<typename K, typename T, typename OPS> | template<typename K, typename T, typename OPS> | ||||||
| class dict { | class dict { | ||||||
|  |  | ||||||
|  | @ -1221,7 +1221,7 @@ struct LicensePass : public Pass { | ||||||
| 		log(" |                                                                            |\n"); | 		log(" |                                                                            |\n"); | ||||||
| 		log(" |  yosys -- Yosys Open SYnthesis Suite                                       |\n"); | 		log(" |  yosys -- Yosys Open SYnthesis Suite                                       |\n"); | ||||||
| 		log(" |                                                                            |\n"); | 		log(" |                                                                            |\n"); | ||||||
| 		log(" |  Copyright (C) 2012 - 2025  Claire Xenia Wolf <claire@yosyshq.com>         |\n"); | 		log(" |  Copyright (C) 2012 - 2024  Claire Xenia Wolf <claire@yosyshq.com>         |\n"); | ||||||
| 		log(" |                                                                            |\n"); | 		log(" |                                                                            |\n"); | ||||||
| 		log(" |  Permission to use, copy, modify, and/or distribute this software for any  |\n"); | 		log(" |  Permission to use, copy, modify, and/or distribute this software for any  |\n"); | ||||||
| 		log(" |  purpose with or without fee is hereby granted, provided that the above    |\n"); | 		log(" |  purpose with or without fee is hereby granted, provided that the above    |\n"); | ||||||
|  |  | ||||||
|  | @ -398,16 +398,13 @@ struct RTLIL::IdString | ||||||
| 
 | 
 | ||||||
| namespace hashlib { | namespace hashlib { | ||||||
| 	template <> | 	template <> | ||||||
| 	struct hash_ops<RTLIL::IdString> { | 	struct hash_top_ops<RTLIL::IdString> { | ||||||
| 		static inline bool cmp(const RTLIL::IdString &a, const RTLIL::IdString &b) { | 		static inline bool cmp(const RTLIL::IdString &a, const RTLIL::IdString &b) { | ||||||
| 			return a == b; | 			return a == b; | ||||||
| 		} | 		} | ||||||
| 		[[nodiscard]] static inline Hasher hash(const RTLIL::IdString id) { | 		static inline Hasher hash(const RTLIL::IdString id) { | ||||||
| 			return id.hash_top(); | 			return id.hash_top(); | ||||||
| 		} | 		} | ||||||
| 		[[nodiscard]] static inline Hasher hash_into(const RTLIL::IdString id, Hasher h) { |  | ||||||
| 			return id.hash_into(h); |  | ||||||
| 		} |  | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -929,16 +926,13 @@ struct RTLIL::SigBit | ||||||
| 
 | 
 | ||||||
| namespace hashlib { | namespace hashlib { | ||||||
| 	template <> | 	template <> | ||||||
| 	struct hash_ops<RTLIL::SigBit> { | 	struct hash_top_ops<RTLIL::SigBit> { | ||||||
| 		static inline bool cmp(const RTLIL::SigBit &a, const RTLIL::SigBit &b) { | 		static inline bool cmp(const RTLIL::SigBit &a, const RTLIL::SigBit &b) { | ||||||
| 			return a == b; | 			return a == b; | ||||||
| 		} | 		} | ||||||
| 		[[nodiscard]] static inline Hasher hash(const RTLIL::SigBit sb) { | 		static inline Hasher hash(const RTLIL::SigBit sb) { | ||||||
| 			return sb.hash_top(); | 			return sb.hash_top(); | ||||||
| 		} | 		} | ||||||
| 		[[nodiscard]] static inline Hasher hash_into(const RTLIL::SigBit sb, Hasher h) { |  | ||||||
| 			return sb.hash_into(h); |  | ||||||
| 		} |  | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -337,14 +337,12 @@ template<typename O> | ||||||
| std::vector<IdString> parse_hdlname(const O* object) | std::vector<IdString> parse_hdlname(const O* object) | ||||||
| { | { | ||||||
| 	std::vector<IdString> path; | 	std::vector<IdString> path; | ||||||
|  | 	if (!object->name.isPublic()) | ||||||
|  | 		return path; | ||||||
| 	for (auto const &item : object->get_hdlname_attribute()) | 	for (auto const &item : object->get_hdlname_attribute()) | ||||||
| 		path.push_back("\\" + item); | 		path.push_back("\\" + item); | ||||||
| 	if (path.empty() && object->name.isPublic()) | 	if (path.empty()) | ||||||
| 		path.push_back(object->name); | 		path.push_back(object->name); | ||||||
| 	if (!path.empty() && !(object->name.isPublic() || object->name.begins_with("$paramod") || object->name.begins_with("$abstract"))) { |  | ||||||
| 		path.pop_back(); |  | ||||||
| 		path.push_back(object->name); |  | ||||||
| 	} |  | ||||||
| 	return path; | 	return path; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -353,22 +351,17 @@ std::pair<std::vector<IdString>, IdString> parse_scopename(const O* object) | ||||||
| { | { | ||||||
| 	std::vector<IdString> path; | 	std::vector<IdString> path; | ||||||
| 	IdString trailing = object->name; | 	IdString trailing = object->name; | ||||||
| 	if (object->name.isPublic() || object->name.begins_with("$paramod") || object->name.begins_with("$abstract")) { | 	if (object->name.isPublic()) { | ||||||
| 		for (auto const &item : object->get_hdlname_attribute()) | 		for (auto const &item : object->get_hdlname_attribute()) | ||||||
| 			path.push_back("\\" + item); | 			path.push_back("\\" + item); | ||||||
| 		if (!path.empty()) { | 		if (!path.empty()) { | ||||||
| 			trailing = path.back(); | 			trailing = path.back(); | ||||||
| 			path.pop_back(); | 			path.pop_back(); | ||||||
| 		} | 		} | ||||||
| 	} else if (object->has_attribute(ID::hdlname)) { |  | ||||||
| 		for (auto const &item : object->get_hdlname_attribute()) |  | ||||||
| 			path.push_back("\\" + item); |  | ||||||
| 		if (!path.empty()) { |  | ||||||
| 			path.pop_back(); |  | ||||||
| 		} |  | ||||||
| 	} else { | 	} else { | ||||||
| 		for (auto const &item : split_tokens(object->get_string_attribute(ID(scopename)), " ")) | 		for (auto const &item : split_tokens(object->get_string_attribute(ID(scopename)), " ")) | ||||||
| 			path.push_back("\\" + item); | 			path.push_back("\\" + item); | ||||||
|  | 
 | ||||||
| 	} | 	} | ||||||
| 	return {path, trailing}; | 	return {path, trailing}; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -144,7 +144,7 @@ void yosys_banner() | ||||||
| 	log("\n"); | 	log("\n"); | ||||||
| 	log(" /----------------------------------------------------------------------------\\\n"); | 	log(" /----------------------------------------------------------------------------\\\n"); | ||||||
| 	log(" |  yosys -- Yosys Open SYnthesis Suite                                       |\n"); | 	log(" |  yosys -- Yosys Open SYnthesis Suite                                       |\n"); | ||||||
| 	log(" |  Copyright (C) 2012 - 2025  Claire Xenia Wolf <claire@yosyshq.com>         |\n"); | 	log(" |  Copyright (C) 2012 - 2024  Claire Xenia Wolf <claire@yosyshq.com>         |\n"); | ||||||
| 	log(" |  Distributed under an ISC-like license, type \"license\" to see terms        |\n"); | 	log(" |  Distributed under an ISC-like license, type \"license\" to see terms        |\n"); | ||||||
| 	log(" \\----------------------------------------------------------------------------/\n"); | 	log(" \\----------------------------------------------------------------------------/\n"); | ||||||
| 	log(" %s\n", yosys_version_str); | 	log(" %s\n", yosys_version_str); | ||||||
|  |  | ||||||
|  | @ -24,7 +24,6 @@ | ||||||
| #include <cmath> | #include <cmath> | ||||||
| #include <cstdlib> | #include <cstdlib> | ||||||
| #include <cstdio> | #include <cstdio> | ||||||
| #include <cstdint> |  | ||||||
| #include <limits> | #include <limits> | ||||||
| 
 | 
 | ||||||
| namespace json11 { | namespace json11 { | ||||||
|  |  | ||||||
|  | @ -377,13 +377,6 @@ static void extract_fsm(RTLIL::Wire *wire) | ||||||
| 	fsm_cell->setPort(ID::CTRL_OUT, ctrl_out); | 	fsm_cell->setPort(ID::CTRL_OUT, ctrl_out); | ||||||
| 	fsm_cell->parameters[ID::NAME] = RTLIL::Const(wire->name.str()); | 	fsm_cell->parameters[ID::NAME] = RTLIL::Const(wire->name.str()); | ||||||
| 	fsm_cell->attributes = wire->attributes; | 	fsm_cell->attributes = wire->attributes; | ||||||
| 	if(fsm_cell->attributes.count(ID::hdlname)) { |  | ||||||
| 		auto hdlname = fsm_cell->get_hdlname_attribute(); |  | ||||||
| 		hdlname.pop_back(); |  | ||||||
| 		fsm_cell->set_hdlname_attribute(hdlname); |  | ||||||
| 		fsm_cell->set_string_attribute(ID(scopename), fsm_cell->get_string_attribute(ID::hdlname)); |  | ||||||
| 		fsm_cell->attributes.erase(ID::hdlname); |  | ||||||
| 	} |  | ||||||
| 	fsm_data.copy_to_cell(fsm_cell); | 	fsm_data.copy_to_cell(fsm_cell); | ||||||
| 
 | 
 | ||||||
| 	// rename original state wire
 | 	// rename original state wire
 | ||||||
|  | @ -392,13 +385,6 @@ static void extract_fsm(RTLIL::Wire *wire) | ||||||
| 	wire->attributes.erase(ID::fsm_encoding); | 	wire->attributes.erase(ID::fsm_encoding); | ||||||
| 	wire->name = stringf("$fsm$oldstate%s", wire->name.c_str()); | 	wire->name = stringf("$fsm$oldstate%s", wire->name.c_str()); | ||||||
| 	module->wires_[wire->name] = wire; | 	module->wires_[wire->name] = wire; | ||||||
| 	if(wire->attributes.count(ID::hdlname)) { |  | ||||||
| 		auto hdlname = wire->get_hdlname_attribute(); |  | ||||||
| 		hdlname.pop_back(); |  | ||||||
| 		wire->set_hdlname_attribute(hdlname); |  | ||||||
| 		wire->set_string_attribute(ID(scopename), wire->get_string_attribute(ID::hdlname)); |  | ||||||
| 		wire->attributes.erase(ID::hdlname); |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	// unconnect control outputs from old drivers
 | 	// unconnect control outputs from old drivers
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -360,9 +360,6 @@ struct FlattenPass : public Pass { | ||||||
| 
 | 
 | ||||||
| 		FlattenWorker worker; | 		FlattenWorker worker; | ||||||
| 
 | 
 | ||||||
| 		if (design->scratchpad.count("flatten.separator")) |  | ||||||
| 			worker.separator = design->scratchpad_get_string("flatten.separator"); |  | ||||||
| 
 |  | ||||||
| 		size_t argidx; | 		size_t argidx; | ||||||
| 		for (argidx = 1; argidx < args.size(); argidx++) { | 		for (argidx = 1; argidx < args.size(); argidx++) { | ||||||
| 			if (args[argidx] == "-wb") { | 			if (args[argidx] == "-wb") { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue