mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Display simulation time data
This commit is contained in:
		
							parent
							
								
									a6959d30df
								
							
						
					
					
						commit
						543feb75cb
					
				
					 3 changed files with 27 additions and 2 deletions
				
			
		|  | @ -21,10 +21,30 @@ | ||||||
| 
 | 
 | ||||||
| USING_YOSYS_NAMESPACE | USING_YOSYS_NAMESPACE | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| FstData::FstData(std::string filename) : ctx(nullptr) | FstData::FstData(std::string filename) : ctx(nullptr) | ||||||
| { | { | ||||||
|  | 	const std::vector<std::string> g_units = { "s", "ms", "us", "ns", "ps", "fs", "as", "zs" }; | ||||||
| 	ctx = (fstReaderContext *)fstReaderOpen(filename.c_str()); | 	ctx = (fstReaderContext *)fstReaderOpen(filename.c_str()); | ||||||
| 	timescale = pow(10.0, (int)fstReaderGetTimescale(ctx)); | 	int scale = (int)fstReaderGetTimescale(ctx);	 | ||||||
|  | 	timescale = pow(10.0, scale); | ||||||
|  | 	timescale_str = ""; | ||||||
|  | 	int unit = 0; | ||||||
|  | 	int zeros = 0; | ||||||
|  | 	if (scale > 0)  { | ||||||
|  | 		zeros = scale; | ||||||
|  | 	} else { | ||||||
|  | 		if ((scale % 3) == 0) { | ||||||
|  | 			zeros = (-scale % 3); | ||||||
|  | 			unit = (-scale / 3); | ||||||
|  | 		} else { | ||||||
|  | 			zeros = 3 - (-scale % 3); | ||||||
|  | 			unit = (-scale / 3) + 1; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	for (int i=0;i<zeros; i++) timescale_str += "0"; | ||||||
|  | 	if (zeros>0)timescale_str += " "; | ||||||
|  | 	timescale_str += g_units[unit]; | ||||||
| 	extractVarNames(); | 	extractVarNames(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -55,6 +55,7 @@ class FstData | ||||||
| 	std::string valueAt(fstHandle signal, uint64_t time); | 	std::string valueAt(fstHandle signal, uint64_t time); | ||||||
| 	fstHandle getHandle(std::string name); | 	fstHandle getHandle(std::string name); | ||||||
| 	double getTimescale() { return timescale; } | 	double getTimescale() { return timescale; } | ||||||
|  | 	const char *getTimescaleString() { return timescale_str.c_str(); } | ||||||
| private: | private: | ||||||
| 	void extractVarNames(); | 	void extractVarNames(); | ||||||
| 
 | 
 | ||||||
|  | @ -69,6 +70,7 @@ private: | ||||||
| 	std::vector<uint64_t> sample_times; | 	std::vector<uint64_t> sample_times; | ||||||
| 	size_t sample_times_ndx; | 	size_t sample_times_ndx; | ||||||
| 	double timescale; | 	double timescale; | ||||||
|  | 	std::string timescale_str; | ||||||
| 	uint64_t start_time; | 	uint64_t start_time; | ||||||
| 	uint64_t end_time; | 	uint64_t end_time; | ||||||
| 	std::vector<uint64_t> edges; | 	std::vector<uint64_t> edges; | ||||||
|  |  | ||||||
|  | @ -1033,7 +1033,9 @@ struct SimWorker : SimShared | ||||||
| 				log_error("No clock edges found in given time range\n"); | 				log_error("No clock edges found in given time range\n"); | ||||||
| 			fst->reconstructAllAtTimes(edges); | 			fst->reconstructAllAtTimes(edges); | ||||||
| 			bool initial = false; | 			bool initial = false; | ||||||
|  | 			int cycle = 0; | ||||||
| 			for(auto &time : edges) { | 			for(auto &time : edges) { | ||||||
|  | 				log("Simulating cycle %d [%zu %s].\n", cycle+1, time, fst->getTimescaleString()); | ||||||
| 				for(auto &item : inputs) { | 				for(auto &item : inputs) { | ||||||
| 					std::string v = fst->valueAt(item.second, time); | 					std::string v = fst->valueAt(item.second, time); | ||||||
| 					top->set_state(item.first, Const::from_string(v)); | 					top->set_state(item.first, Const::from_string(v)); | ||||||
|  | @ -1046,7 +1048,8 @@ struct SimWorker : SimShared | ||||||
| 
 | 
 | ||||||
| 				bool status = top->checkSignals(time); | 				bool status = top->checkSignals(time); | ||||||
| 				if (status) | 				if (status) | ||||||
| 					log_error("Signal difference at %zu\n", time); | 					log_error("Signal difference\n"); | ||||||
|  | 				cycle++; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue