mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Merge pull request #951 from YosysHQ/clifford/logdebug
Add log_debug() framework
This commit is contained in:
		
						commit
						8ed4a53d99
					
				
					 11 changed files with 183 additions and 53 deletions
				
			
		| 
						 | 
				
			
			@ -72,6 +72,8 @@ struct TechmapWorker
 | 
			
		|||
	pool<IdString> flatten_done_list;
 | 
			
		||||
	pool<Cell*> flatten_keep_list;
 | 
			
		||||
 | 
			
		||||
	pool<string> log_msg_cache;
 | 
			
		||||
 | 
			
		||||
	struct TechmapWireData {
 | 
			
		||||
		RTLIL::Wire *wire;
 | 
			
		||||
		RTLIL::SigSpec value;
 | 
			
		||||
| 
						 | 
				
			
			@ -390,6 +392,7 @@ struct TechmapWorker
 | 
			
		|||
 | 
			
		||||
		bool log_continue = false;
 | 
			
		||||
		bool did_something = false;
 | 
			
		||||
		LogMakeDebugHdl mkdebug;
 | 
			
		||||
 | 
			
		||||
		SigMap sigmap(module);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -547,6 +550,7 @@ struct TechmapWorker
 | 
			
		|||
								if (extmapper_name == "wrap") {
 | 
			
		||||
									std::string cmd_string = tpl->attributes.at("\\techmap_wrap").decode_string();
 | 
			
		||||
									log("Running \"%s\" on wrapper %s.\n", cmd_string.c_str(), log_id(extmapper_module));
 | 
			
		||||
									mkdebug.on();
 | 
			
		||||
									Pass::call_on_module(extmapper_design, extmapper_module, cmd_string);
 | 
			
		||||
									log_continue = true;
 | 
			
		||||
								}
 | 
			
		||||
| 
						 | 
				
			
			@ -560,11 +564,21 @@ struct TechmapWorker
 | 
			
		|||
								goto use_wrapper_tpl;
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
							log("%s %s.%s (%s) to %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(cell->type), log_id(extmapper_module));
 | 
			
		||||
							auto msg = stringf("Using extmapper %s for cells of type %s.", log_id(extmapper_module), log_id(cell->type));
 | 
			
		||||
							if (!log_msg_cache.count(msg)) {
 | 
			
		||||
								log_msg_cache.insert(msg);
 | 
			
		||||
								log("%s\n", msg.c_str());
 | 
			
		||||
							}
 | 
			
		||||
							log_debug("%s %s.%s (%s) to %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(cell->type), log_id(extmapper_module));
 | 
			
		||||
						}
 | 
			
		||||
						else
 | 
			
		||||
						{
 | 
			
		||||
							log("%s %s.%s (%s) with %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(cell->type), extmapper_name.c_str());
 | 
			
		||||
							auto msg = stringf("Using extmapper %s for cells of type %s.", extmapper_name.c_str(), log_id(cell->type));
 | 
			
		||||
							if (!log_msg_cache.count(msg)) {
 | 
			
		||||
								log_msg_cache.insert(msg);
 | 
			
		||||
								log("%s\n", msg.c_str());
 | 
			
		||||
							}
 | 
			
		||||
							log_debug("%s %s.%s (%s) with %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(cell->type), extmapper_name.c_str());
 | 
			
		||||
 | 
			
		||||
							if (extmapper_name == "simplemap") {
 | 
			
		||||
								if (simplemap_mappers.count(cell->type) == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -662,6 +676,7 @@ struct TechmapWorker
 | 
			
		|||
						tpl = techmap_cache[key];
 | 
			
		||||
					} else {
 | 
			
		||||
						if (parameters.size() != 0) {
 | 
			
		||||
							mkdebug.on();
 | 
			
		||||
							derived_name = tpl->derive(map, dict<RTLIL::IdString, RTLIL::Const>(parameters.begin(), parameters.end()));
 | 
			
		||||
							tpl = map->module(derived_name);
 | 
			
		||||
							log_continue = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -831,6 +846,7 @@ struct TechmapWorker
 | 
			
		|||
						if (log_continue) {
 | 
			
		||||
							log_header(design, "Continuing TECHMAP pass.\n");
 | 
			
		||||
							log_continue = false;
 | 
			
		||||
							mkdebug.off();
 | 
			
		||||
						}
 | 
			
		||||
						while (techmap_module(map, tpl, map, handled_cells, celltypeMap, true)) { }
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			@ -842,6 +858,7 @@ struct TechmapWorker
 | 
			
		|||
				if (log_continue) {
 | 
			
		||||
					log_header(design, "Continuing TECHMAP pass.\n");
 | 
			
		||||
					log_continue = false;
 | 
			
		||||
					mkdebug.off();
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (extern_mode && !in_recursion)
 | 
			
		||||
| 
						 | 
				
			
			@ -861,13 +878,18 @@ struct TechmapWorker
 | 
			
		|||
						module_queue.insert(m);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					log("%s %s.%s to imported %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(m_name));
 | 
			
		||||
					log_debug("%s %s.%s to imported %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(m_name));
 | 
			
		||||
					cell->type = m_name;
 | 
			
		||||
					cell->parameters.clear();
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					log("%s %s.%s using %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(tpl));
 | 
			
		||||
					auto msg = stringf("Using template %s for cells of type %s.", log_id(tpl), log_id(cell->type));
 | 
			
		||||
					if (!log_msg_cache.count(msg)) {
 | 
			
		||||
						log_msg_cache.insert(msg);
 | 
			
		||||
						log("%s\n", msg.c_str());
 | 
			
		||||
					}
 | 
			
		||||
					log_debug("%s %s.%s (%s) using %s.\n", mapmsg_prefix.c_str(), log_id(module), log_id(cell), log_id(cell->type), log_id(tpl));
 | 
			
		||||
					techmap_module_worker(design, module, cell, tpl);
 | 
			
		||||
					cell = NULL;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -885,6 +907,7 @@ struct TechmapWorker
 | 
			
		|||
		if (log_continue) {
 | 
			
		||||
			log_header(design, "Continuing TECHMAP pass.\n");
 | 
			
		||||
			log_continue = false;
 | 
			
		||||
			mkdebug.off();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return did_something;
 | 
			
		||||
| 
						 | 
				
			
			@ -1085,7 +1108,7 @@ struct TechmapPass : public Pass {
 | 
			
		|||
		if (map_files.empty()) {
 | 
			
		||||
			std::istringstream f(stdcells_code);
 | 
			
		||||
			Frontend::frontend_call(map, &f, "<techmap.v>", verilog_frontend);
 | 
			
		||||
		} else
 | 
			
		||||
		} else {
 | 
			
		||||
			for (auto &fn : map_files)
 | 
			
		||||
				if (fn.substr(0, 1) == "%") {
 | 
			
		||||
					if (!saved_designs.count(fn.substr(1))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1104,6 +1127,9 @@ struct TechmapPass : public Pass {
 | 
			
		|||
						log_cmd_error("Can't open map file `%s'\n", fn.c_str());
 | 
			
		||||
					Frontend::frontend_call(map, &f, fn, (fn.size() > 3 && fn.substr(fn.size()-3) == ".il") ? "ilang" : verilog_frontend);
 | 
			
		||||
				}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		log_header(design, "Continuing TECHMAP pass.\n");
 | 
			
		||||
 | 
			
		||||
		std::map<RTLIL::IdString, std::set<RTLIL::IdString, RTLIL::sort_by_id_str>> celltypeMap;
 | 
			
		||||
		for (auto &it : map->modules_) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1211,6 +1237,7 @@ struct FlattenPass : public Pass {
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		log_suppressed();
 | 
			
		||||
		log("No more expansions possible.\n");
 | 
			
		||||
 | 
			
		||||
		if (top_mod != NULL)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue