Как да променя времевата скала на изхвърления VCD файл?

Опитвам се да използвам Chisel в проект от "реалния свят" и пиша частта от тестовия код на C++. Това работи добре, мога да видя всичките си изхвърлени сигнали във файла dump.vcd с gtkwave.

Но имам проблем с времевата скала, по подразбиране функционалният модул->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");
}

person FabienM    schedule 17.06.2015    source източник


Отговори (1)


Методът, който дадох, работи само за C++ бекенд, проблемът остава същият, ако използваме тест на класа chisel. Промених кода на Chisel, за да добавя точката в обекта implicitClock. След това модифицирах класа Vcd, за да изхвърля VCD с правилната стойност на периода. Можете да видите корекцията тук.

След това, за да промените времевата скала, просто трябва да добавите следния ред в горния си модул Chisel:

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

Тази корекция е ангажирана за версия 2.2.28 на Chisel.

person FabienM    schedule 24.06.2015