vcd timescale prefix orfs issue1806

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2024-03-28 11:03:14 -07:00
parent 8bf51ab7ee
commit 36645618b7
2 changed files with 6 additions and 5 deletions

View File

@ -231,8 +231,7 @@ ReadVcdActivities::findVarActivity(const VcdValues &var_values,
if (prev_value == '1')
high_time += time_max - prev_time;
duty = static_cast<double>(high_time) / time_max;
activity = transition_count
/ (time_max * vcd_.timeUnitScale() / clk_period_);
activity = transition_count / (time_max * vcd_.timeScale() / clk_period_);
}
void
@ -240,7 +239,7 @@ ReadVcdActivities::checkClkPeriod(const Pin *pin,
double transition_count)
{
VcdTime time_max = vcd_.timeMax();
double sim_period = time_max * vcd_.timeUnitScale() / (transition_count / 2.0);
double sim_period = time_max * vcd_.timeScale() / (transition_count / 2.0);
ClockSet *clks = sdc_->findLeafPinClocks(pin);
if (clks) {

View File

@ -135,12 +135,14 @@ VcdReader::parseTimescale()
vector<string> tokens = readStmtTokens();
if (tokens.size() == 1) {
size_t last;
vcd_->setTimeScale(std::stod(tokens[0], &last));
double time_scale = std::stod(tokens[0], &last);
setTimeUnit(tokens[0].substr(last));
vcd_->setTimeScale(time_scale * vcd_->timeUnitScale());
}
else if (tokens.size() == 2) {
vcd_->setTimeScale(std::stod(tokens[0]));
setTimeUnit(tokens[1]);
double time_scale = std::stod(tokens[0]);
vcd_->setTimeScale(time_scale * vcd_->timeUnitScale());
}
else
report_->fileError(801, filename_, stmt_line_, "timescale syntax error.");