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

但是我对时间刻度有问题,默认情况下,函数module-> dump()记录时间刻度为1ps的信号:

$timescale 1ps $end

你知道怎么改变吗?

我发现在testbench 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代码,将期间的添加到了hiddenClock对象中。然后,我修改了Vcd类以转储具有正确周期值的VCD。您可以看到补丁here

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

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

已针对Chisel的2.2.28版本提交此补丁。

09-08 04:06