mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	renamed SigSpec::to_single_sigbit() to SigSpec::as_bit(), added is_bit()
This commit is contained in:
		
							parent
							
								
									6af8076967
								
							
						
					
					
						commit
						7f110e7018
					
				
					 8 changed files with 34 additions and 34 deletions
				
			
		|  | @ -133,7 +133,7 @@ struct Smt2Worker | ||||||
| 
 | 
 | ||||||
| 	std::string get_bool(RTLIL::SigSpec sig, const char *state_name = "state") | 	std::string get_bool(RTLIL::SigSpec sig, const char *state_name = "state") | ||||||
| 	{ | 	{ | ||||||
| 		return get_bool(sig.to_single_sigbit(), state_name); | 		return get_bool(sig.as_bit(), state_name); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	std::string get_bv(RTLIL::SigSpec sig, const char *state_name = "state") | 	std::string get_bv(RTLIL::SigSpec sig, const char *state_name = "state") | ||||||
|  | @ -216,7 +216,7 @@ struct Smt2Worker | ||||||
| 
 | 
 | ||||||
| 	void export_gate(RTLIL::Cell *cell, std::string expr) | 	void export_gate(RTLIL::Cell *cell, std::string expr) | ||||||
| 	{ | 	{ | ||||||
| 		RTLIL::SigBit bit = sigmap(cell->getPort("\\Y").to_single_sigbit()); | 		RTLIL::SigBit bit = sigmap(cell->getPort("\\Y").as_bit()); | ||||||
| 		std::string processed_expr; | 		std::string processed_expr; | ||||||
| 
 | 
 | ||||||
| 		for (char ch : expr) { | 		for (char ch : expr) { | ||||||
|  |  | ||||||
|  | @ -3197,6 +3197,17 @@ RTLIL::SigChunk RTLIL::SigSpec::as_chunk() const | ||||||
| 	return chunks_[0]; | 	return chunks_[0]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | RTLIL::SigBit RTLIL::SigSpec::as_bit() const | ||||||
|  | { | ||||||
|  | 	cover("kernel.rtlil.sigspec.as_bit"); | ||||||
|  | 
 | ||||||
|  | 	log_assert(width_ == 1); | ||||||
|  | 	if (packed()) | ||||||
|  | 		return RTLIL::SigBit(*chunks_.begin()); | ||||||
|  | 	else | ||||||
|  | 		return bits_[0]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool RTLIL::SigSpec::match(std::string pattern) const | bool RTLIL::SigSpec::match(std::string pattern) const | ||||||
| { | { | ||||||
| 	cover("kernel.rtlil.sigspec.match"); | 	cover("kernel.rtlil.sigspec.match"); | ||||||
|  | @ -3284,18 +3295,6 @@ dict<RTLIL::SigBit, RTLIL::SigBit> RTLIL::SigSpec::to_sigbit_dict(const RTLIL::S | ||||||
| 	return new_map; | 	return new_map; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| RTLIL::SigBit RTLIL::SigSpec::to_single_sigbit() const |  | ||||||
| { |  | ||||||
| 	cover("kernel.rtlil.sigspec.to_single_sigbit"); |  | ||||||
| 
 |  | ||||||
| 	pack(); |  | ||||||
| 	log_assert(width_ == 1); |  | ||||||
| 	for (auto &c : chunks_) |  | ||||||
| 		if (c.width) |  | ||||||
| 			return RTLIL::SigBit(c); |  | ||||||
| 	log_abort(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void sigspec_parse_split(std::vector<std::string> &tokens, const std::string &text, char sep) | static void sigspec_parse_split(std::vector<std::string> &tokens, const std::string &text, char sep) | ||||||
| { | { | ||||||
| 	size_t start = 0, end = 0; | 	size_t start = 0, end = 0; | ||||||
|  |  | ||||||
|  | @ -690,6 +690,7 @@ public: | ||||||
| 
 | 
 | ||||||
| 	bool is_wire() const; | 	bool is_wire() const; | ||||||
| 	bool is_chunk() const; | 	bool is_chunk() const; | ||||||
|  | 	inline bool is_bit() const { return width_ == 1; } | ||||||
| 
 | 
 | ||||||
| 	bool is_fully_const() const; | 	bool is_fully_const() const; | ||||||
| 	bool is_fully_zero() const; | 	bool is_fully_zero() const; | ||||||
|  | @ -704,6 +705,7 @@ public: | ||||||
| 	RTLIL::Const as_const() const; | 	RTLIL::Const as_const() const; | ||||||
| 	RTLIL::Wire *as_wire() const; | 	RTLIL::Wire *as_wire() const; | ||||||
| 	RTLIL::SigChunk as_chunk() const; | 	RTLIL::SigChunk as_chunk() const; | ||||||
|  | 	RTLIL::SigBit as_bit() const; | ||||||
| 
 | 
 | ||||||
| 	bool match(std::string pattern) const; | 	bool match(std::string pattern) const; | ||||||
| 
 | 
 | ||||||
|  | @ -712,7 +714,6 @@ public: | ||||||
| 	std::vector<RTLIL::SigBit> to_sigbit_vector() const; | 	std::vector<RTLIL::SigBit> to_sigbit_vector() const; | ||||||
| 	std::map<RTLIL::SigBit, RTLIL::SigBit> to_sigbit_map(const RTLIL::SigSpec &other) const; | 	std::map<RTLIL::SigBit, RTLIL::SigBit> to_sigbit_map(const RTLIL::SigSpec &other) const; | ||||||
| 	dict<RTLIL::SigBit, RTLIL::SigBit> to_sigbit_dict(const RTLIL::SigSpec &other) const; | 	dict<RTLIL::SigBit, RTLIL::SigBit> to_sigbit_dict(const RTLIL::SigSpec &other) const; | ||||||
| 	RTLIL::SigBit to_single_sigbit() const; |  | ||||||
| 
 | 
 | ||||||
| 	static bool parse(RTLIL::SigSpec &sig, RTLIL::Module *module, std::string str); | 	static bool parse(RTLIL::SigSpec &sig, RTLIL::Module *module, std::string str); | ||||||
| 	static bool parse_sel(RTLIL::SigSpec &sig, RTLIL::Design *design, RTLIL::Module *module, std::string str); | 	static bool parse_sel(RTLIL::SigSpec &sig, RTLIL::Design *design, RTLIL::Module *module, std::string str); | ||||||
|  |  | ||||||
|  | @ -64,7 +64,7 @@ struct SpliceWorker | ||||||
| 			return sliced_signals_cache.at(sig); | 			return sliced_signals_cache.at(sig); | ||||||
| 
 | 
 | ||||||
| 		int offset = 0; | 		int offset = 0; | ||||||
| 		int p = driven_bits_map.at(sig.extract(0, 1).to_single_sigbit()) - 1; | 		int p = driven_bits_map.at(sig.extract(0, 1).as_bit()) - 1; | ||||||
| 		while (driven_bits.at(p) != RTLIL::State::Sm) | 		while (driven_bits.at(p) != RTLIL::State::Sm) | ||||||
| 			p--, offset++; | 			p--, offset++; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -59,8 +59,8 @@ struct EquivInductWorker | ||||||
| 				cell_warn_cache.insert(cell); | 				cell_warn_cache.insert(cell); | ||||||
| 			} | 			} | ||||||
| 			if (cell->type == "$equiv") { | 			if (cell->type == "$equiv") { | ||||||
| 				SigBit bit_a = sigmap(cell->getPort("\\A")).to_single_sigbit(); | 				SigBit bit_a = sigmap(cell->getPort("\\A")).as_bit(); | ||||||
| 				SigBit bit_b = sigmap(cell->getPort("\\B")).to_single_sigbit(); | 				SigBit bit_b = sigmap(cell->getPort("\\B")).as_bit(); | ||||||
| 				if (bit_a != bit_b) { | 				if (bit_a != bit_b) { | ||||||
| 					int ez_a = satgen.importSigBit(bit_a, step); | 					int ez_a = satgen.importSigBit(bit_a, step); | ||||||
| 					int ez_b = satgen.importSigBit(bit_b, step); | 					int ez_b = satgen.importSigBit(bit_b, step); | ||||||
|  | @ -137,8 +137,8 @@ struct EquivInductWorker | ||||||
| 
 | 
 | ||||||
| 		for (auto cell : workset) | 		for (auto cell : workset) | ||||||
| 		{ | 		{ | ||||||
| 			SigBit bit_a = sigmap(cell->getPort("\\A")).to_single_sigbit(); | 			SigBit bit_a = sigmap(cell->getPort("\\A")).as_bit(); | ||||||
| 			SigBit bit_b = sigmap(cell->getPort("\\B")).to_single_sigbit(); | 			SigBit bit_b = sigmap(cell->getPort("\\B")).as_bit(); | ||||||
| 
 | 
 | ||||||
| 			log("  Trying to prove $equiv for %s:", log_signal(sigmap(cell->getPort("\\Y")))); | 			log("  Trying to prove $equiv for %s:", log_signal(sigmap(cell->getPort("\\Y")))); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -89,8 +89,8 @@ struct EquivSimpleWorker | ||||||
| 
 | 
 | ||||||
| 	bool run_cell() | 	bool run_cell() | ||||||
| 	{ | 	{ | ||||||
| 		SigBit bit_a = sigmap(equiv_cell->getPort("\\A")).to_single_sigbit(); | 		SigBit bit_a = sigmap(equiv_cell->getPort("\\A")).as_bit(); | ||||||
| 		SigBit bit_b = sigmap(equiv_cell->getPort("\\B")).to_single_sigbit(); | 		SigBit bit_b = sigmap(equiv_cell->getPort("\\B")).as_bit(); | ||||||
| 		int ez_context = ez->frozen_literal(); | 		int ez_context = ez->frozen_literal(); | ||||||
| 
 | 
 | ||||||
| 		if (satgen.model_undef) | 		if (satgen.model_undef) | ||||||
|  | @ -314,7 +314,7 @@ struct EquivSimplePass : public Pass { | ||||||
| 
 | 
 | ||||||
| 			for (auto cell : module->selected_cells()) | 			for (auto cell : module->selected_cells()) | ||||||
| 				if (cell->type == "$equiv" && cell->getPort("\\A") != cell->getPort("\\B")) { | 				if (cell->type == "$equiv" && cell->getPort("\\A") != cell->getPort("\\B")) { | ||||||
| 					auto bit = sigmap(cell->getPort("\\Y").to_single_sigbit()); | 					auto bit = sigmap(cell->getPort("\\Y").as_bit()); | ||||||
| 					auto bit_group = bit; | 					auto bit_group = bit; | ||||||
| 					if (!nogroup && bit_group.wire) | 					if (!nogroup && bit_group.wire) | ||||||
| 						bit_group.offset = 0; | 						bit_group.offset = 0; | ||||||
|  |  | ||||||
|  | @ -78,7 +78,7 @@ struct FsmOpt | ||||||
| 
 | 
 | ||||||
| 	bool signal_is_unused(RTLIL::SigSpec sig) | 	bool signal_is_unused(RTLIL::SigSpec sig) | ||||||
| 	{ | 	{ | ||||||
| 		RTLIL::SigBit bit = sig.to_single_sigbit(); | 		RTLIL::SigBit bit = sig.as_bit(); | ||||||
| 
 | 
 | ||||||
| 		if (bit.wire == NULL || bit.wire->attributes.count("\\unused_bits") == 0) | 		if (bit.wire == NULL || bit.wire->attributes.count("\\unused_bits") == 0) | ||||||
| 			return false; | 			return false; | ||||||
|  |  | ||||||
|  | @ -116,7 +116,7 @@ void create_dff_dq_map(std::map<RTLIL::IdString, dff_map_info_t> &map, RTLIL::De | ||||||
| 		info.cell = it.second; | 		info.cell = it.second; | ||||||
| 
 | 
 | ||||||
| 		if (info.cell->type == "$dff") { | 		if (info.cell->type == "$dff") { | ||||||
| 			info.bit_clk = sigmap(info.cell->getPort("\\CLK")).to_single_sigbit(); | 			info.bit_clk = sigmap(info.cell->getPort("\\CLK")).as_bit(); | ||||||
| 			info.clk_polarity = info.cell->parameters.at("\\CLK_POLARITY").as_bool(); | 			info.clk_polarity = info.cell->parameters.at("\\CLK_POLARITY").as_bool(); | ||||||
| 			std::vector<RTLIL::SigBit> sig_d = sigmap(info.cell->getPort("\\D")).to_sigbit_vector(); | 			std::vector<RTLIL::SigBit> sig_d = sigmap(info.cell->getPort("\\D")).to_sigbit_vector(); | ||||||
| 			std::vector<RTLIL::SigBit> sig_q = sigmap(info.cell->getPort("\\Q")).to_sigbit_vector(); | 			std::vector<RTLIL::SigBit> sig_q = sigmap(info.cell->getPort("\\Q")).to_sigbit_vector(); | ||||||
|  | @ -128,8 +128,8 @@ void create_dff_dq_map(std::map<RTLIL::IdString, dff_map_info_t> &map, RTLIL::De | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (info.cell->type == "$adff") { | 		if (info.cell->type == "$adff") { | ||||||
| 			info.bit_clk = sigmap(info.cell->getPort("\\CLK")).to_single_sigbit(); | 			info.bit_clk = sigmap(info.cell->getPort("\\CLK")).as_bit(); | ||||||
| 			info.bit_arst = sigmap(info.cell->getPort("\\ARST")).to_single_sigbit(); | 			info.bit_arst = sigmap(info.cell->getPort("\\ARST")).as_bit(); | ||||||
| 			info.clk_polarity = info.cell->parameters.at("\\CLK_POLARITY").as_bool(); | 			info.clk_polarity = info.cell->parameters.at("\\CLK_POLARITY").as_bool(); | ||||||
| 			info.arst_polarity = info.cell->parameters.at("\\ARST_POLARITY").as_bool(); | 			info.arst_polarity = info.cell->parameters.at("\\ARST_POLARITY").as_bool(); | ||||||
| 			std::vector<RTLIL::SigBit> sig_d = sigmap(info.cell->getPort("\\D")).to_sigbit_vector(); | 			std::vector<RTLIL::SigBit> sig_d = sigmap(info.cell->getPort("\\D")).to_sigbit_vector(); | ||||||
|  | @ -144,21 +144,21 @@ void create_dff_dq_map(std::map<RTLIL::IdString, dff_map_info_t> &map, RTLIL::De | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (info.cell->type == "$_DFF_N_" || info.cell->type == "$_DFF_P_") { | 		if (info.cell->type == "$_DFF_N_" || info.cell->type == "$_DFF_P_") { | ||||||
| 			info.bit_clk = sigmap(info.cell->getPort("\\C")).to_single_sigbit(); | 			info.bit_clk = sigmap(info.cell->getPort("\\C")).as_bit(); | ||||||
| 			info.clk_polarity = info.cell->type == "$_DFF_P_"; | 			info.clk_polarity = info.cell->type == "$_DFF_P_"; | ||||||
| 			info.bit_d = sigmap(info.cell->getPort("\\D")).to_single_sigbit(); | 			info.bit_d = sigmap(info.cell->getPort("\\D")).as_bit(); | ||||||
| 			bit_info[sigmap(info.cell->getPort("\\Q")).to_single_sigbit()] = info; | 			bit_info[sigmap(info.cell->getPort("\\Q")).as_bit()] = info; | ||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (info.cell->type.size() == 10 && info.cell->type.substr(0, 6) == "$_DFF_") { | 		if (info.cell->type.size() == 10 && info.cell->type.substr(0, 6) == "$_DFF_") { | ||||||
| 			info.bit_clk = sigmap(info.cell->getPort("\\C")).to_single_sigbit(); | 			info.bit_clk = sigmap(info.cell->getPort("\\C")).as_bit(); | ||||||
| 			info.bit_arst = sigmap(info.cell->getPort("\\R")).to_single_sigbit(); | 			info.bit_arst = sigmap(info.cell->getPort("\\R")).as_bit(); | ||||||
| 			info.clk_polarity = info.cell->type[6] == 'P'; | 			info.clk_polarity = info.cell->type[6] == 'P'; | ||||||
| 			info.arst_polarity = info.cell->type[7] == 'P'; | 			info.arst_polarity = info.cell->type[7] == 'P'; | ||||||
| 			info.arst_value = info.cell->type[0] == '1' ? RTLIL::State::S1 : RTLIL::State::S0; | 			info.arst_value = info.cell->type[0] == '1' ? RTLIL::State::S1 : RTLIL::State::S0; | ||||||
| 			info.bit_d = sigmap(info.cell->getPort("\\D")).to_single_sigbit(); | 			info.bit_d = sigmap(info.cell->getPort("\\D")).as_bit(); | ||||||
| 			bit_info[sigmap(info.cell->getPort("\\Q")).to_single_sigbit()] = info; | 			bit_info[sigmap(info.cell->getPort("\\Q")).as_bit()] = info; | ||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue