Как изменить временную шкалу сброшенного файла VCD?
Я пытаюсь использовать Chisel в "реальном" проекте, и я пишу часть кода testbench на C++. Это хорошо работает, я вижу все свои сброшенные сигналы в файле dump.vcd с помощью gtkwave.
Но у меня есть проблема с временной шкалой, по умолчанию, функция module->dump() записывает сигнал с временной шкалой в 1ps:
$timescale 1ps $end
Вы знаете, как это изменить?
Единственный способ, который я нашел, чтобы изменить его в коде C++ testbench, - это повторно открыть 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");
}
1 ответ
Метод, который я дал, работает только для бэкэнда C++, проблема остается той же, если мы используем класс зубила Test. Я изменил код долота, чтобы добавить точку в объект I mplicitClock. Затем я изменил класс Vcd для вывода VCD с правильным значением периода. Вы можете увидеть патч здесь.
Затем, чтобы изменить шкалу времени, вам просто нужно добавить следующую строку в ваш верхний модуль Chisel:
class myModule extends Module {
[...]
Driver.implicitClock.period = "10ns"
[...]
}
Этот патч был зафиксирован для версии 2.2.28 Chisel.