FC2カウンター FPGAの部屋 シミュレーション
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Verilator をもう一度試してみる12(multi_axim を試す4)

Verilator をもう一度試してみる11(multi_axim を試す3)”の続き。

Vivado HLS の multi_axim を Verilator で検証してみようということで、前回は、Vivado 2020.2 の multi_axim_pj プロジェクトを作成して、multi_axim と axi_slave_BFM を IP インテグレーターで接続した回路を Verilator でシミュレーションして成功した。今回は、その回路をスタートさせて動作を見てみよう。

まずは、multi_axim は Vivado HLS で作成した回路なので、動作はレジスタを設定してから、0 番地に 1 を書くと 1 回、回路が動作する。
multi_axim_AXILiteS_s_axi.v の Address Info を引用する。

//------------------------Address Info-------------------
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read)
//        bit 7  - auto_restart (Read/Write)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x10 : Data signal of ap_return
//        bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of x
//        bit 31~0 - x[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of y
//        bit 31~0 - y[31:0] (Read/Write)
// 0x24 : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


0x18 番地の x のアドレス(0 を設定)を設定して、 0x20 番地の y のアドレス(0x10を設定)を設定して、 0x00 番地に 1 を書けば回路が動作する。
その様に、 multi_axim_top_wrapper_sc.cpp を書き直した。

// multi_axim_top_wrapper_sc.cpp
// 2021/06/10 by marsee
//

#include "verilated_vcd_sc.h"
#include "Vmulti_axim_top_wrapper.h"

int sc_main(int argc, char **argv) {

    Verilated::commandArgs(argc, argv);

    sc_clock ap_clk ("ap_clk", 10, SC_NS);
    sc_signal<bool> ap_rst_n;
    sc_signal<bool> arready, arvalid;
    sc_signal<bool> awready, awvalid;
    sc_signal<bool> bready, bvalid;
    sc_signal<bool> rready, rvalid;
    sc_signal<bool> wready, wvalid;
    sc_signal<uint32_t> araddr, awaddr;
    sc_signal<uint32_t> rdata, wdata;
    sc_signal<uint32_t> bresp;
    sc_signal<uint32_t> rresp;
    sc_signal<uint32_t> wstrb;
    Vmulti_axim_top_wrapper *top;

    top = new Vmulti_axim_top_wrapper("top");

    top->ap_rst_n_0(ap_rst_n);        // Set some inputs
    top->ap_clk_0(ap_clk);
    top->s_axi_AXILiteS_0_araddr(araddr);
    top->s_axi_AXILiteS_0_arvalid(arvalid);
    top->s_axi_AXILiteS_0_arready(arready);
    top->s_axi_AXILiteS_0_awaddr(awaddr);
    top->s_axi_AXILiteS_0_awvalid(awvalid);
    top->s_axi_AXILiteS_0_awready(awready);
    top->s_axi_AXILiteS_0_bready(bready);
    top->s_axi_AXILiteS_0_bresp(bresp);
    top->s_axi_AXILiteS_0_bvalid(bvalid);
    top->s_axi_AXILiteS_0_rdata(rdata);
    top->s_axi_AXILiteS_0_rready(rready);
    top->s_axi_AXILiteS_0_rresp(rresp);
    top->s_axi_AXILiteS_0_rvalid(rvalid);
    top->s_axi_AXILiteS_0_wdata(wdata);
    top->s_axi_AXILiteS_0_wready(wready);
    top->s_axi_AXILiteS_0_wstrb(wstrb);
    top->s_axi_AXILiteS_0_wvalid(wvalid);

    Verilated::traceEverOn(true);
    VerilatedVcdSc* tfp = new VerilatedVcdSc;
    top->trace (tfp, 99);
    tfp->open ("simx.vcd");

    ap_rst_n = 0;        // Set some inputs
    araddr = 0;
    arvalid = 0;
    awaddr = 0;
    awvalid = 0;
    bready = 0;
    rready = 0;
    wdata = 0;
    wstrb = 0;
    wvalid = 0;

    sc_start(10, SC_NS);    // 1nsずらす
    ap_rst_n = 1;

    sc_start(10, SC_NS);

    int clk_count;
    // AXI4 Lite IF Write
    awaddr = 0x18;
    wdata = 0x0;
    wstrb = 0xf;
    awvalid = 1;
    wvalid = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(awready)
            awvalid = 0;
        if(wready)
            wvalid = 0;
        if(awvalid==0 && wvalid==0)
            break;
    }
    sc_start(10, SC_NS);
    bready = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(bvalid)
            break;
    }
    sc_start(10, SC_NS);
    bready = 0;
    sc_start(10, SC_NS);

    // AXI4 Lite IF Read
    araddr = 0x18;
    arvalid = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(arready){
            arvalid = 0;
            break;
        }
    }
    sc_start(10, SC_NS);
    rready = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(rvalid){
            rready = 0;
            break;
        }
    }
    sc_start(10, SC_NS);

    // AXI4 Lite IF Write
    awaddr = 0x20;
    wdata = 0x10;
    wstrb = 0xf;
    awvalid = 1;
    wvalid = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(awready)
            awvalid = 0;
        if(wready)
            wvalid = 0;
        if(awvalid==0 && wvalid==0)
            break;
    }
    sc_start(10, SC_NS);
    bready = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(bvalid)
            break;
    }
    sc_start(10, SC_NS);
    bready = 0;
    sc_start(10, SC_NS);

    // AXI4 Lite IF Write
    awaddr = 0x0;
    wdata = 0x1;
    wstrb = 0xf;
    awvalid = 1;
    wvalid = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(awready)
            awvalid = 0;
        if(wready)
            wvalid = 0;
        if(awvalid==0 && wvalid==0)
            break;
    }
    sc_start(10, SC_NS);
    bready = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(bvalid)
            break;
    }
    sc_start(10, SC_NS);
    bready = 0;
    sc_start(10, SC_NS);

    sc_start(400, SC_NS);

    tfp->close();
    delete top;
    
    exit(0);        // シミュレーション終了
}


Verilator でコンパイルして実行する。
verilator -f multi_axim.cmd
cd obj_dir
make -j -f Vmulti_axim_top_wrapper.mk Vmulti_axim_top_wrapper
./Vmulti_axim_top_wrapper


GTKWave を起動した。
gtkwave simx.vcd
Verilator_82_210615.png
Verilator_83_210615.png
Verilator_84_210615.png

multi_axim が動作しているのが確認できた。
axi_slave_bfm の Write に Wait が入っているのは、 axi_slave_bfm.v のパラメータで”WRITE_RANDOM_WAIT = 1”に設定されていて Write 時にランダムな Wait が入るように設定されているからだ。
  1. 2021年06月15日 04:47 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Verilator をもう一度試してみる11(multi_axim を試す3)

Verilator をもう一度試してみる10(multi_axim を試す2)”の続き。

Vivado HLS の multi_axim を Verilator で検証してみようということで、前回は、 Vivado 2020.2 の multi_axim_pj プロジェクトを作成して、multi_axim と axi_slave_BFM を IP インテグレーターで接続した。今回は、 Verilator を使用してシミュレーションを行う。

まずは、SystemC のテストベンチの multi_axim_top_wrapper_sc.cpp を作成した。
Verilator_79_210614.png

multi_axim_top_wrapper_sc.cpp のコードを示す。
今回のコードでは、AXI4 Lite の Write アクセス、 AXI4 Lite の Read アクセスをそのまま書いてしまったが、Verilog HDL の task の様に書く SystemC での書き方を教えてください。よろしくお願いします。

// multi_axim_top_wrapper_sc.cpp
// 2021/06/10 by marsee
//

#include "verilated_vcd_sc.h"
#include "Vmulti_axim_top_wrapper.h"

/*int AXI4L_Write(Vmulti_axim_top_wrapper *top){
    int clk_count;

    top->s_axi_AXILiteS_0_awvalid = true;
    top->s_axi_AXILiteS_0_wvalid = true;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(top->s_axi_AXILiteS_0_awready)
            top->s_axi_AXILiteS_0_awvalid = false;
        if(top->s_axi_AXILiteS_0_wready)
            top->s_axi_AXILiteS_0_wvalid = false;
        if(top->s_axi_AXILiteS_0_awvalid==false && top->s_axi_AXILiteS_0_wvalid==false)
            break;
    }
    sc_start(10, SC_NS);
    top->s_axi_AXILiteS_0_bready = true;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(top->s_axi_AXILiteS_0_bvalid)
            break;
    }
    sc_start(10, SC_NS);
    top->s_axi_AXILiteS_0_bready = false;
    sc_start(10, SC_NS);

    return(0);
} */

int sc_main(int argc, char **argv) {

    Verilated::commandArgs(argc, argv);

    sc_clock ap_clk ("ap_clk", 10, SC_NS);
    sc_signal<bool> ap_rst_n;
    sc_signal<bool> arready, arvalid;
    sc_signal<bool> awready, awvalid;
    sc_signal<bool> bready, bvalid;
    sc_signal<bool> rready, rvalid;
    sc_signal<bool> wready, wvalid;
    sc_signal<uint32_t> araddr, awaddr;
    sc_signal<uint32_t> rdata, wdata;
    sc_signal<uint32_t> bresp;
    sc_signal<uint32_t> rresp;
    sc_signal<uint32_t> wstrb;
    Vmulti_axim_top_wrapper *top;

    top = new Vmulti_axim_top_wrapper("top");

    top->ap_rst_n_0(ap_rst_n);        // Set some inputs
    top->ap_clk_0(ap_clk);
    top->s_axi_AXILiteS_0_araddr(araddr);
    top->s_axi_AXILiteS_0_arvalid(arvalid);
    top->s_axi_AXILiteS_0_arready(arready);
    top->s_axi_AXILiteS_0_awaddr(awaddr);
    top->s_axi_AXILiteS_0_awvalid(awvalid);
    top->s_axi_AXILiteS_0_awready(awready);
    top->s_axi_AXILiteS_0_bready(bready);
    top->s_axi_AXILiteS_0_bresp(bresp);
    top->s_axi_AXILiteS_0_bvalid(bvalid);
    top->s_axi_AXILiteS_0_rdata(rdata);
    top->s_axi_AXILiteS_0_rready(rready);
    top->s_axi_AXILiteS_0_rresp(rresp);
    top->s_axi_AXILiteS_0_rvalid(rvalid);
    top->s_axi_AXILiteS_0_wdata(wdata);
    top->s_axi_AXILiteS_0_wready(wready);
    top->s_axi_AXILiteS_0_wstrb(wstrb);
    top->s_axi_AXILiteS_0_wvalid(wvalid);

    Verilated::traceEverOn(true);
    VerilatedVcdSc* tfp = new VerilatedVcdSc;
    top->trace (tfp, 99);
    tfp->open ("simx.vcd");

    ap_rst_n = 0;        // Set some inputs
    araddr = 0;
    arvalid = 0;
    awaddr = 0;
    awvalid = 0;
    bready = 0;
    rready = 0;
    wdata = 0;
    wstrb = 0;
    wvalid = 0;

    sc_start(10, SC_NS);    // 1nsずらす
    ap_rst_n = 1;

    sc_start(10, SC_NS);

    int clk_count;
    // AXI4 Lite IF Write
    awaddr = 0x18;
    wdata = 0x12345678;
    wstrb = 0xf;
    awvalid = 1;
    wvalid = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(awready)
            awvalid = 0;
        if(wready)
            wvalid = 0;
        if(awvalid==0 && wvalid==0)
            break;
    }
    sc_start(10, SC_NS);
    bready = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(bvalid)
            break;
    }
    sc_start(10, SC_NS);
    bready = 0;
    sc_start(10, SC_NS);

    // AXI4 Lite IF Read
    araddr = 0x18;
    arvalid = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(arready){
            arvalid = 0;
            break;
        }
    }
    sc_start(10, SC_NS);
    rready = 1;
    for(clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        if(rvalid){
            rready = 0;
            break;
        }
    }
    sc_start(10, SC_NS);

    tfp->close();
    delete top;
    
    exit(0);        // シミュレーション終了
}


次に Verilator のコマンド・ファイルを作成した。
multi_axim.cmd を示す。
Verilator_74_210614.png

-Wno-lint
--trace
-sc
multi_axim_pj/multi_axim_pj.gen/sources_1/bd/multi_axim_top/hdl/multi_axim_top_wrapper.v
multi_axim_pj/multi_axim_pj.gen/sources_1/bd/multi_axim_top/synth/multi_axim_top.v
verilog/multi_axim.v
verilog/multi_axim_gmem_m_axi.v
verilog/multi_axim_AXILiteS_s_axi.v
verilog/multi_axim_mul_32s_32s_32_6.v
axi_slave_bfm/axi_slave_bfm.srcs/sources_1/imports/new/sync_fifo.v
axi_slave_bfm/axi_slave_bfm.srcs/sources_1/imports/new/axi_slave_bfm.v
--exe multi_axim_top_wrapper_sc.cpp


multi_axim ディレクトリを示す。
Verilator_73_210614.png

Verilator で .v を .cpp に変換し、コンパイルする。
verilator -f multi_axim.cmd
cd obj_dir
make -j -f Vmulti_axim_top_wrapper.mk Vmulti_axim_top_wrapper

Verilator_75_210614.png
Verilator_76_210614.png

Vmulti_axim_top_wrapper を実行する。
./Vmulti_axim_top_wrapper
Verilator_77_210614.png

simx.vcd ファイルが生成された。
Verilator_78_210614.png

GTKWave を実行する。
gtkwave simx.vcd

multi_axim_top_wrapper の信号を表示した。
AXI4 Lite の Write アクセスと Read アクセスが表示されている。
Verilator_80_210614.png

multi_axim_top_wrapper/multi_axim_top_i/axi_slave_bfm_0 の信号を検索したが、 ram_array の信号がなかった。
RAM は無いのかな?
Verilator_81_210614.png
  1. 2021年06月14日 04:49 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Verilator をもう一度試してみる10(multi_axim を試す2)

Verilator をもう一度試してみる9(multi_axim を試す1)”の続き。

Vivado HLS の multi_axim を Verilator で検証してみようということで、前回は、 AXI4 Slave Bus Functional Model の axi_slave_BFM.v を合成できるように修正した。今回は、Vivado 2020.2 の multi_axim_pj プロジェクトを作成して、multi_axim と axi_slave_BFM を IP インテグレーターで接続しよう。

multi_axim ディレクトリを作成して、 multi_axim/solution1/syn/verilog/ のファイルをディレクトリごとコピーした。
Verilator_66_210612.png

axi_slave_bfm.v と sync_fifo.v は IP にしてあるのだが、Verilog HDL ファイルのみ使用する。
Verilator_65_210612.png

Vivado 2020.2 の multi_axim_pj プロジェクトを作成して、 multi_axim/solution1/syn/verilog/ のファイルと axi_slave_BFM.v と sync_fifo.v を登録した。
Verilator_67_210612.png

multi_axim_top ブロックデザインを作成し、 multi_axim.v と axi_slave_BFM.v をドラック&ドロップした。すると RTL IP になる。
Verilator_68_210612.png

multi_axim_0 と axi_slave_bfm_0 が生成された。
2 個の RTL IP を配線した。今回は、AXI Interconnect は使用していない。
そして multi_axim_top ブロックデザインに HDL ラッパーファイルを作成した。
Verilator_69_210612.png

multi_axim_top.v が multi_axim_pj/multi_axim_pj.gen/sources_1/bd/multi_axim_top/sim と multi_axim_pj/multi_axim_pj.gen/sources_1/bd/multi_axim_top/synth に生成されている。
その内の multi_axim_pj/multi_axim_pj.gen/sources_1/bd/multi_axim_top/synth/multi_axim_top.v を Verilator のシミュレーションに都合良いように書き換える。
multi_axim_pj/multi_axim_pj.gen/sources_1/bd/multi_axim_top/synth/multi_axim_top.v を示す。
Verilator_70_210612.png

multi_axim_top_axi_slave_bfm_0_0 がモジュール名なので、これを axi_slave_bfm に書き換えた。
Verilator_71_210612.png

multi_axim も同様に書き換えて、セーブした。
Verilator_72_210612.png

今回の multi_axim_pj は axi_slave_bfm.v と multi_axim.v の接続だけに使っているので、問題ない。
  1. 2021年06月13日 05:51 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Verilator をもう一度試してみる9(multi_axim を試す1)

Verilator をもう一度試してみる8(SystemCモード2:dice_state_machine.v のテストベンチ)”の続き。

Verilator をやっていたのは、Vitis HLS での C/RTL 協調シミュレーションを短い時間で終了したいという欲求からだった。そこで、”DSF2015 C-6 でのVivado HLS で生成したAXI4-Master IPの簡単な例について”で示した Vivado HLS の multi_axim を Verilator で検証してみよう。
なお、Vivado HLS のプロジェクトは marsee101/multi_axim にアップロードしてある。

Vivado HLS のソースコードの multi_axim.c は x 配列のある値とそれを +1 した値を乗算して、 y 配列に出力するコードになっている。入力と出力は AXI4 Master アクセスだ。そのために、AXI4 インターフェースのメモリを追加することにした。

AXI4 インターフェースのメモリとしては、”AXI4 Slave Bus Functional Model のVerilog HDL版4”の AXI4 Slave Bus Functional Model を使用することにした。
ただ、今回は、合成するので、axi_slave_BFM.v の 114 行目の”32'hxxxxxxxx;”を”32'h00000000;”に変更した。
Verilator_63_210612.png

最後に RAM を初期化するコードを追加した。

initial begin
    for(i=0; i<SLAVE_ADDR_NUMBER-1; i=i+1)
        ram_array[i] = i;
end


(2021/06/15:修正 integer i; の宣言がすでにされていたので、削除した)
Verilator_64_210612.png

multi_axim.v と axi_slave_BFM.v を接続するのは、Vivado の IPI で接続しようと思う。IPI で接続して、出力された Verilog HDL ファイルを加工して使用する。

今まで述べてきたファイルと、C++ のテストベンチ・ファイル(multi_axim_top_wrapper_sc.cpp)を使用して Verilator でシミュレーションしてみよう。
  1. 2021年06月12日 04:57 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Verilator をもう一度試してみる8(SystemCモード2:dice_state_machine.v のテストベンチ)

Verilator をもう一度試してみる7(再度 Verilator をインストール)”の続き。

以前の FPGAの部屋のブログ記事”Verilatorを試してみる6(SystemCモード2:dice_state_machine.v のテストベンチ)”が動作するかどうか?を確かめてみよう。

dice_state_machine.v はすでにあるので、それを ex1sc ディレクトリにコピーした。
テストベンチの dsm_sc_vcd.cpp は以前の FPGAの部屋のブログ記事”Verilatorを試してみる6(SystemCモード2:dice_state_machine.v のテストベンチ)”からのコピー & ペーストでファイルを作成した。

verilator -Wno-lint --trace -sc dice_state_machine.v --exe dsm_sc_vcd.cpp
cd obj_dir
make -j -f Vdice_state_machine.mk Vdice_state_machine
./Vdice_state_machine.exe

Verilator_58_210611.png
Verilator_59_210611.png
Verilator_60_210611.png
Verilator_61_210611.png

シミュレーションの出力結果を貼っておく。

(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Verilator/examples/ex1sc/obj_dir$ ./Vdice_state_machine 

        SystemC 2.3.3-Accellera --- Jun  9 2021 16:42:07
        Copyright (c) 1996-2018 by all Contributors,
        ALL RIGHTS RESERVED
roll_ena = 0 spots = 1
roll_ena = 1 spots = 1
roll_ena = 0 spots = 2
roll_ena = 1 spots = 2
roll_ena = 0 spots = 3
roll_ena = 1 spots = 3
roll_ena = 0 spots = 4
roll_ena = 1 spots = 4
roll_ena = 0 spots = 5
roll_ena = 1 spots = 5
roll_ena = 0 spots = 6
roll_ena = 1 spots = 6
roll_ena = 0 spots = 1
roll_ena = 1 spots = 1
roll_ena = 0 spots = 2
roll_ena = 1 spots = 2
roll_ena = 0 spots = 3
roll_ena = 1 spots = 3
roll_ena = 0 spots = 4
roll_ena = 1 spots = 4


simx.vcd ファイルを GTKWave で見た結果を示す。
Verilator_62_210611.png
  1. 2021年06月11日 05:17 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Verilator をもう一度試してみる7(再度 Verilator をインストール)

Verilator をもう一度試してみる6(SystemCモード1:SystemCのインストール2)”の続き。

前回は、SystemC 2.3.3 を /usr/local にインストールした。今回は、 Vengineer さんの”VerilatorとSystemC”に従って、Verilator を再度インストールする。

まずは、以前インストールした Verilator を削除して、再度 git clone した。
rm -rf Verilator/
git clone -b v4.202 https://github.com/verilator/verilator.git

Verilator_49_210609.png

cd verilator
export SYSTEMC_INCLUDE=/usr/local/systemc/2.3.3/include
autoconf
./configure --prefix=/usr/local/verilator/v4.202

Verilator_50_210609.png
Verilator_51_210609.png

make -j2
Verilator_52_210609.png

sudo make install
Verilator_53_210609.png

Verilator のインストールは成功した。

/usr/local ディレクトリに systemc と verilator のディレクトリが生成されている。
Verilator_54_210610.png

Verilator の make_hello_sc サンプルを実行してみよう。
verilator/examples/make_hello_sc ディレクトリに移動した。
make を実行した。
make
Verilator_55_210610.png

obj_dir/Vtop: error while loading shared libraries: libsystemc-2.3.3.so: cannot open shared object file: No such file or directory

エラーがでてしまった。
このエラーを検索したところ、”Error while loading shared libraries: libsystemc-2.3.0.so”が検索できた。
それによると、LD_LIBRARY_PATH に SystemC のライブラリ・ディレクトリを追加すれば良いようだ。
export LD_LIBRARY_PATH=/usr/local/systemc/2.3.3/lib-linux64:$LD_LIBRARY_PATH
これで、
make
したところ、成功した。

Hello World!

が表示された。
Verilator_56_210610.png

.bashrc に

export PATH="/usr/local/verilator/v4.202/bin:$PATH"
export PKG_CONFIG_PATH="/usr/local/verilator/v4.202/share/pkgconfig:$PKG_CONFIG_PATH"
export SYSTEMC_INCLUDE=/usr/local/systemc/2.3.3/include
export LD_LIBRARY_PATH=/usr/local/systemc/2.3.3/lib-linux64:$LD_LIBRARY_PATH

を追加した。
Verilator_57_210610.png
  1. 2021年06月10日 04:36 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Verilator をもう一度試してみる6(SystemCモード1:SystemCのインストール2)

Verilator をもう一度試してみる5(SystemCモード1:SystemCのインストール)”の続き。

前回、SystemC-2.3.3 を自分のディレクトリの下にインストールした。しかし、やはり、 /usr/local ディレクトリにインストールしたいということでインストールをやり直した。

cd system-2.3.3/
cd objdir/
export CXX=g++
../configure --prefix=/usr/local/systemc/2.3.3

SystemC233_1_210609.png
SystemC233_2_210609.png

gmake clean
SystemC233_3_210609.png
SystemC233_4_210609.png

gmake
SystemC233_5_210609.png
SystemC233_6_210609.png

sudo gmake install
SystemC233_7_210609.png
SystemC233_8_210609.png

/usr/local/systemc/2.3.3 ディレクトリにインストールされている。
SystemC233_9_210609.png
  1. 2021年06月09日 20:52 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0
»