FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

CXXRTLについて調査する

X(旧Twitter)で調査して乗っていた、CXXRTLというツールについて調査した。 これはYosysに付属しているバックエンドツールで、RTLからC++を生成するツールらしい。 つまるところ、Verilatorと同じような機能を持っているが、Verilatorと違って入力ファイルはSystemVerilogではないし、Yosysが取り扱うことのできる純粋なVerilogを入力する必要があるらしい。

チュートリアルがあるのでやってみる。

tomverbeure.github.io

module blink(input clk, output led);
reg [11:0] counter = 12'h0;
always @(posedge clk)
  counter <= counter + 1'bx;

assign led = counter[7];
endmodule // blink

C++のドライバを追加して、コンパイルして実行ファイルを生成する。

$ yosys -p "read_verilog blink.v; write_cxxrtl blink.cpp"
$ clang++ -g -O3 -std=c++14 -I/home/msyksphinz/software/yosys/yosys-0.35/share/yosys/include/ main.cpp -o tb
$ ./tb                                                                                                  
cycle 128 - led: 1
cycle 256 - led: 0
cycle 384 - led: 1
cycle 512 - led: 0
cycle 640 - led: 1
cycle 768 - led: 0
cycle 896 - led: 1

VCDファイルも一応吐き出すことはできるっぽい。

ただし、いろいろ試した感じだと不定値とかH値とかは扱うことはできないっぽい。もうちょっとオプションを見なければならないけれども、やはり簡易ツールなのかな?