mirror of
https://github.com/YosysHQ/yosys
synced 2025-07-22 20:32:07 +00:00
commit
4c72b0ecd8
11 changed files with 5547 additions and 5638 deletions
|
@ -206,6 +206,7 @@ static void reconstruct_clb_attimes(void *user_data, uint64_t pnt_time, fstHandl
|
|||
void FstData::reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_facidx, const unsigned char *pnt_value, uint32_t /* plen */)
|
||||
{
|
||||
if (pnt_time > end_time || !pnt_value) return;
|
||||
if (curr_cycle > last_cycle) return;
|
||||
// if we are past the timestamp
|
||||
bool is_clock = false;
|
||||
if (!all_samples) {
|
||||
|
@ -225,6 +226,7 @@ void FstData::reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_faci
|
|||
if (pnt_time > last_time) {
|
||||
if (all_samples) {
|
||||
callback(last_time);
|
||||
curr_cycle++;
|
||||
last_time = pnt_time;
|
||||
} else {
|
||||
if (is_clock) {
|
||||
|
@ -232,6 +234,7 @@ void FstData::reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_faci
|
|||
std::string prev = past_data[pnt_facidx];
|
||||
if ((prev!="1" && val=="1") || (prev!="0" && val=="0")) {
|
||||
callback(last_time);
|
||||
curr_cycle++;
|
||||
last_time = pnt_time;
|
||||
}
|
||||
}
|
||||
|
@ -241,12 +244,14 @@ void FstData::reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_faci
|
|||
last_data[pnt_facidx] = std::string((const char *)pnt_value);
|
||||
}
|
||||
|
||||
void FstData::reconstructAllAtTimes(std::vector<fstHandle> &signal, uint64_t start, uint64_t end, CallbackFunction cb)
|
||||
void FstData::reconstructAllAtTimes(std::vector<fstHandle> &signal, uint64_t start, uint64_t end, unsigned int end_cycle, CallbackFunction cb)
|
||||
{
|
||||
clk_signals = signal;
|
||||
callback = cb;
|
||||
start_time = start;
|
||||
end_time = end;
|
||||
curr_cycle = 0;
|
||||
last_cycle = end_cycle;
|
||||
last_data.clear();
|
||||
last_time = start_time;
|
||||
past_data.clear();
|
||||
|
@ -256,12 +261,16 @@ void FstData::reconstructAllAtTimes(std::vector<fstHandle> &signal, uint64_t sta
|
|||
fstReaderSetUnlimitedTimeRange(ctx);
|
||||
fstReaderSetFacProcessMaskAll(ctx);
|
||||
fstReaderIterBlocks2(ctx, reconstruct_clb_attimes, reconstruct_clb_varlen_attimes, this, nullptr);
|
||||
if (last_time!=end_time) {
|
||||
if (last_time!=end_time && curr_cycle <= last_cycle) {
|
||||
past_data = last_data;
|
||||
callback(last_time);
|
||||
curr_cycle++;
|
||||
}
|
||||
if (curr_cycle <= last_cycle) {
|
||||
past_data = last_data;
|
||||
callback(end_time);
|
||||
curr_cycle++;
|
||||
}
|
||||
past_data = last_data;
|
||||
callback(end_time);
|
||||
}
|
||||
|
||||
std::string FstData::valueOf(fstHandle signal)
|
||||
|
|
|
@ -50,7 +50,7 @@ class FstData
|
|||
std::vector<FstVar>& getVars() { return vars; };
|
||||
|
||||
void reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_facidx, const unsigned char *pnt_value, uint32_t plen);
|
||||
void reconstructAllAtTimes(std::vector<fstHandle> &signal, uint64_t start_time, uint64_t end_time, CallbackFunction cb);
|
||||
void reconstructAllAtTimes(std::vector<fstHandle> &signal, uint64_t start_time, uint64_t end_time, unsigned int end_cycle, CallbackFunction cb);
|
||||
|
||||
std::string valueOf(fstHandle signal);
|
||||
fstHandle getHandle(std::string name);
|
||||
|
@ -73,6 +73,8 @@ private:
|
|||
std::string timescale_str;
|
||||
uint64_t start_time;
|
||||
uint64_t end_time;
|
||||
unsigned int last_cycle;
|
||||
unsigned int curr_cycle;
|
||||
CallbackFunction callback;
|
||||
std::vector<fstHandle> clk_signals;
|
||||
bool all_samples;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue