mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Add shregmap -init_msb_first and use in synth_xilinx
This commit is contained in:
		
							parent
							
								
									79b4a275ce
								
							
						
					
					
						commit
						26ecbc1aee
					
				
					 2 changed files with 16 additions and 4 deletions
				
			
		|  | @ -34,7 +34,7 @@ struct ShregmapOptions | |||
| { | ||||
| 	int minlen, maxlen; | ||||
| 	int keep_before, keep_after; | ||||
| 	bool zinit, init, params, ffe; | ||||
| 	bool zinit, init, params, ffe, init_msb_first; | ||||
| 	dict<IdString, pair<IdString, IdString>> ffcells; | ||||
| 	ShregmapTech *tech; | ||||
| 
 | ||||
|  | @ -48,6 +48,7 @@ struct ShregmapOptions | |||
| 		init = false; | ||||
| 		params = false; | ||||
| 		ffe = false; | ||||
| 		init_msb_first = false; | ||||
| 		tech = nullptr; | ||||
| 	} | ||||
| }; | ||||
|  | @ -307,6 +308,8 @@ struct ShregmapWorker | |||
| 						initval.push_back(State::S0); | ||||
| 					remove_init.insert(bit); | ||||
| 				} | ||||
| 				if (opts.init_msb_first) | ||||
| 					std::reverse(initval.begin(), initval.end()); | ||||
| 				first_cell->setParam("\\INIT", initval); | ||||
| 			} | ||||
| 
 | ||||
|  | @ -442,9 +445,13 @@ struct ShregmapPass : public Pass { | |||
| 		log("\n"); | ||||
| 		log("    -init\n"); | ||||
| 		log("        map initialized registers to the shift reg, add an INIT parameter to\n"); | ||||
| 		log("        generated cells with the initialization value. (first bit to shift out\n"); | ||||
| 		log("        generated cells with the initialization value. (First bit to shift out\n"); | ||||
| 		log("        in LSB position)\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -init_msb_first\n"); | ||||
| 		log("        same as -init, but INIT parameter to have first bit to shift out\n"); | ||||
| 		log("        in MSB position.\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -tech greenpak4\n"); | ||||
| 		log("        map to greenpak4 shift registers.\n"); | ||||
| 		log("\n"); | ||||
|  | @ -515,6 +522,11 @@ struct ShregmapPass : public Pass { | |||
| 				opts.init = true; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-init_msb_first") { | ||||
| 				opts.init = true; | ||||
| 				opts.init_msb_first = true; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-params") { | ||||
| 				opts.params = true; | ||||
| 				continue; | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ struct SynthXilinxPass : public Pass | |||
| 		log("        dff2dffe\n"); | ||||
| 		log("        opt -full\n"); | ||||
| 		log("        techmap -map +/techmap.v -map +/xilinx/arith_map.v\n"); | ||||
| 		log("        shregmap -init -params -enpol any_or_none\n"); | ||||
| 		log("        shregmap -init_msb_first -params -enpol any_or_none\n"); | ||||
| 		log("        opt -fast\n"); | ||||
| 		log("\n"); | ||||
| 		log("    map_luts:\n"); | ||||
|  | @ -225,7 +225,7 @@ struct SynthXilinxPass : public Pass | |||
| 			Pass::call(design, "dff2dffe"); | ||||
| 			Pass::call(design, "opt -full"); | ||||
| 			Pass::call(design, "techmap -map +/techmap.v -map +/xilinx/arith_map.v"); | ||||
| 			Pass::call(design, "shregmap -init -params -enpol any_or_none"); | ||||
| 			Pass::call(design, "shregmap -init_msb_first -params -enpol any_or_none"); | ||||
| 			Pass::call(design, "opt -fast"); | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue