如何更改转储的VCD文件的时间刻度



我正在尝试在"现实世界"项目中使用 Chisel,并且我正在用C++编写测试平台代码部分。这很好用,我可以使用 gtkwave 在转储.vcd文件中看到我所有转储的信号。

但是我在时间刻度方面有一个问题,默认情况下,函数模块>dump() 记录信号的时间刻度为 1ps:

$timescale 1ps $end

你知道怎么改变它吗?

我发现在测试平台C++代码中更改它的唯一方法是在关闭 vcd 后重新打开它并修改第一行:

#define CYCLE_PERIOD_NS   10
FILE *f = fopen("./dump.vcd", "w");
module->set_dumpfile(f);
[...]
/*several module->dump() call */
[...]
if (f) {
    fclose(f);
    std::string line;
    std::ifstream input("./dump.vcd");
    std::ofstream output("./tmp.vcd");
    std::getline(input, line);
    output << "$timescale " << CYCLE_PERIOD_NS << "ns $end" << endl;
    while(std::getline(input, line)) {
        output << line << endl;
    }
    rename("./tmp.vcd", "./dump.vcd");
}

我给出的方法仅适用于后端C++如果我们使用凿子类 Test,问题保持不变。我修改了 Chisel 代码以在隐式时钟对象中添加句点。然后我修改了 Vcd 类以使用正确的周期值转储 VCD。您可以在此处查看补丁。

然后要更改时间刻度,您只需在顶部凿子模块中添加以下行:

class myModule extends Module {
[...]
Driver.implicitClock.period = "10ns"
[...]
}

此修补程序已针对 Chisel 的 2.2.28 版提交。

最新更新