我正在尝试在“现实世界”项目中使用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版本提交此补丁。