mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +00:00 
			
		
		
		
	Merge pull request #943 from YosysHQ/clifford/whitebox
[WIP] Add "whitebox" attribute, add "read_verilog -wb"
This commit is contained in:
		
						commit
						f84a84e3f1
					
				
					 27 changed files with 157 additions and 55 deletions
				
			
		| 
						 | 
				
			
			@ -664,7 +664,7 @@ struct DfflibmapPass : public Pass {
 | 
			
		|||
		logmap_all();
 | 
			
		||||
 | 
			
		||||
		for (auto &it : design->modules_)
 | 
			
		||||
			if (design->selected(it.second) && !it.second->get_bool_attribute("\\blackbox"))
 | 
			
		||||
			if (design->selected(it.second) && !it.second->get_blackbox_attribute())
 | 
			
		||||
				dfflibmap(design, it.second, prepare_mode);
 | 
			
		||||
 | 
			
		||||
		cell_mappings.clear();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -599,7 +599,7 @@ struct SimplemapPass : public Pass {
 | 
			
		|||
		simplemap_get_mappers(mappers);
 | 
			
		||||
 | 
			
		||||
		for (auto mod : design->modules()) {
 | 
			
		||||
			if (!design->selected(mod))
 | 
			
		||||
			if (!design->selected(mod) || mod->get_blackbox_attribute())
 | 
			
		||||
				continue;
 | 
			
		||||
			std::vector<RTLIL::Cell*> cells = mod->cells();
 | 
			
		||||
			for (auto cell : cells) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,6 +84,7 @@ struct TechmapWorker
 | 
			
		|||
	bool flatten_mode;
 | 
			
		||||
	bool recursive_mode;
 | 
			
		||||
	bool autoproc_mode;
 | 
			
		||||
	bool ignore_wb;
 | 
			
		||||
 | 
			
		||||
	TechmapWorker()
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -92,6 +93,7 @@ struct TechmapWorker
 | 
			
		|||
		flatten_mode = false;
 | 
			
		||||
		recursive_mode = false;
 | 
			
		||||
		autoproc_mode = false;
 | 
			
		||||
		ignore_wb = false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	std::string constmap_tpl_name(SigMap &sigmap, RTLIL::Module *tpl, RTLIL::Cell *cell, bool verbose)
 | 
			
		||||
| 
						 | 
				
			
			@ -383,7 +385,7 @@ struct TechmapWorker
 | 
			
		|||
	{
 | 
			
		||||
		std::string mapmsg_prefix = in_recursion ? "Recursively mapping" : "Mapping";
 | 
			
		||||
 | 
			
		||||
		if (!design->selected(module))
 | 
			
		||||
		if (!design->selected(module) || module->get_blackbox_attribute(ignore_wb))
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		bool log_continue = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -472,7 +474,7 @@ struct TechmapWorker
 | 
			
		|||
				RTLIL::Module *tpl = map->modules_[tpl_name];
 | 
			
		||||
				std::map<RTLIL::IdString, RTLIL::Const> parameters(cell->parameters.begin(), cell->parameters.end());
 | 
			
		||||
 | 
			
		||||
				if (tpl->get_bool_attribute("\\blackbox"))
 | 
			
		||||
				if (tpl->get_blackbox_attribute(ignore_wb))
 | 
			
		||||
					continue;
 | 
			
		||||
 | 
			
		||||
				if (!flatten_mode)
 | 
			
		||||
| 
						 | 
				
			
			@ -925,6 +927,9 @@ struct TechmapPass : public Pass {
 | 
			
		|||
		log("    -autoproc\n");
 | 
			
		||||
		log("        Automatically call \"proc\" on implementations that contain processes.\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("    -wb\n");
 | 
			
		||||
		log("        Ignore the 'whitebox' attribute on cell implementations.\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("    -assert\n");
 | 
			
		||||
		log("        this option will cause techmap to exit with an error if it can't map\n");
 | 
			
		||||
		log("        a selected cell. only cell types that end on an underscore are accepted\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -1068,6 +1073,10 @@ struct TechmapPass : public Pass {
 | 
			
		|||
				worker.autoproc_mode = true;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (args[argidx] == "-wb") {
 | 
			
		||||
				worker.ignore_wb = true;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		extra_args(args, argidx, design);
 | 
			
		||||
| 
						 | 
				
			
			@ -1145,7 +1154,7 @@ struct FlattenPass : public Pass {
 | 
			
		|||
	{
 | 
			
		||||
		//   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("    flatten [selection]\n");
 | 
			
		||||
		log("    flatten [options] [selection]\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("This pass flattens the design by replacing cells by their implementation. This\n");
 | 
			
		||||
		log("pass is very similar to the 'techmap' pass. The only difference is that this\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -1154,17 +1163,29 @@ struct FlattenPass : public Pass {
 | 
			
		|||
		log("Cells and/or modules with the 'keep_hierarchy' attribute set will not be\n");
 | 
			
		||||
		log("flattened by this command.\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("    -wb\n");
 | 
			
		||||
		log("        Ignore the 'whitebox' attribute on cell implementations.\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
	}
 | 
			
		||||
	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
 | 
			
		||||
	{
 | 
			
		||||
		log_header(design, "Executing FLATTEN pass (flatten design).\n");
 | 
			
		||||
		log_push();
 | 
			
		||||
 | 
			
		||||
		extra_args(args, 1, design);
 | 
			
		||||
 | 
			
		||||
		TechmapWorker worker;
 | 
			
		||||
		worker.flatten_mode = true;
 | 
			
		||||
 | 
			
		||||
		size_t argidx;
 | 
			
		||||
		for (argidx = 1; argidx < args.size(); argidx++) {
 | 
			
		||||
			if (args[argidx] == "-wb") {
 | 
			
		||||
				worker.ignore_wb = true;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		extra_args(args, argidx, design);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		std::map<RTLIL::IdString, std::set<RTLIL::IdString, RTLIL::sort_by_id_str>> celltypeMap;
 | 
			
		||||
		for (auto module : design->modules())
 | 
			
		||||
			celltypeMap[module->name].insert(module->name);
 | 
			
		||||
| 
						 | 
				
			
			@ -1209,7 +1230,7 @@ struct FlattenPass : public Pass {
 | 
			
		|||
 | 
			
		||||
			dict<RTLIL::IdString, RTLIL::Module*> new_modules;
 | 
			
		||||
			for (auto mod : vector<Module*>(design->modules()))
 | 
			
		||||
				if (used_modules[mod->name] || mod->get_bool_attribute("\\blackbox")) {
 | 
			
		||||
				if (used_modules[mod->name] || mod->get_blackbox_attribute(worker.ignore_wb)) {
 | 
			
		||||
					new_modules[mod->name] = mod;
 | 
			
		||||
				} else {
 | 
			
		||||
					log("Deleting now unused module %s.\n", log_id(mod));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue