FC2カウンター FPGAの部屋 Vivado

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

FPGAの部屋

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

Vivado 2017.1 の新機能8(Zynq-7000 VIP)

今回は、Zynq-7000 VIP について書いてみようと思う。

Vivado 2017.1 からZynq-7000 VIP のライセンスが無料になって、Zynq のPS 込みでシミュレーションできるようになったようだ。(Vivado 2016.4 でPS 込みのシミュレーションをしたところ、AXI BFM のライセンスエラーになってしまった)

Zynq-7000 VIP の資料で見つかったのは唯一”AR# 69031 Zynq-7000 All Programmable SoC VIP - リリース ノートおよび既知の問題”だった。
それによると、「Zynq-7000 All Programmable SoC VIP は Processing System7 IP からのみアクセスできます。」だそうだ。

サンプル・デザインで、Zynq-7000 VIP が試せるという情報があったので、File メニューから Open Examples Project... を選択して、サンプル・プロジェクトを作成した。サンプル・プロジェクトのテンプレートは、Base Zynq を選択した。
Vivado_2017-1_68_170501.png

Base Zynq プロジェクトが開いたところだ。
Vivado_2017-1_62_170501.png

ブロックデザインを示す。
Vivado_2017-1_63_170501.png

Address Editor の画面を示す。
Vivado_2017-1_64_170501.png

Flow Navigator のSIMULATION -> Run Simulation -> Run Behavioral Simulation を選択して、シミュレーションを行った。
Vivado_2017-1_65_170501.png

シミュレーションの波形が示された後に、”run all”を行ったときのVivado画面を示す。
Vivado_2017-1_69_170501.png

AXI VIP Test PASSED が表示された。

まずは、シミュレーションの階層を示す。
Vivado_2017-1_70_170501.png

シミュレーション用のテストベンチ・ファイルのzynq_tb.v にPS からPL へのアクセス方法が書いてあった。zynq_tb.v の一部を画像で引用する。
Vivado_2017-1_71_170501.png

tb.zynq_sys.base_zynq_i.processing_system7_0.inst.write_data(32'h40000000,4, 32'hDEADBEEF, resp);

で0x40000000 番地に 0xDEADBEEF を書いて、

tb.zynq_sys.base_zynq_i.processing_system7_0.inst.read_data(32'h40000000,4,read_data,resp);

で 0x40000000 番地のデータを read_data に読んでくることができる。階層はシミュレーション階層の図の通りだ。
その前にLED を点灯するために 0x41200000 に 0xFFFFFFFF を書いている。

さて、シミュレーション波形を見てみよう。全体の波形は省略するが、Read /Write する場面の波形を示す。
Vivado_2017-1_66_170501.png

0x41200000 に 0xFFFFFFFF を書いているのが分かると思う。その後のトランザクションはよく見えないので、もう少し拡大してみよう。
Vivado_2017-1_67_170501.png

上の波形を見ると、0x40000000 番地に 0xdeadbeef を書いて、0x40000000 を読むと 0xdeadbeef なのが分かる。

これで、PS のままのプロジェクトでもシミュレーションを行うことができた。これは便利だ。今まで、わざわざシミュレーション用にAXI4-Lite のMaster モジュールを付けた専用のプロジェクトを作る必要が無くなった。
  1. 2017年05月02日 04:23 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2017.1 の新機能7(AXI Verification IPの使い方の覚書3)

Vivado 2017.1 の新機能6(AXI Verification IPの使い方の覚書2)”の続き。

前回、AXI Verification IPのWrite トランザクションについて記事を書いたが、どうしてもWVALID をディアサートする方法が分からなかった。本当はランダムにできれば良かったのだが、WVALID を変化させる方法が分かったので、覚書を書いておく。

AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の60 ページの”Figure C-2: Write Command and Data Flow”の一部を引用する。
Vivado_2017-1_59_170501.png

ここでピンクの四角で囲ってある”Data Inter-Beat Delay (Transaction)”がWVILD に当たることができるDelay のようだ。
ここで、”AR# 68234 AXI Verification IP - AXI VIP のリリース ノートおよび既知の問題”のXILINX_AXI_VIP_2017_1.zip を展開した資料を見てみる。
Vivado_2017-1_60_170501.png

上の図でもわかるように set_beat_delay() があった。これを使用してみたが、updated の設定の仕方が分からない。
set_beat_delay() を使って、2番目のWrite トランザクションのバースト転送の2番目、4番目、6番目を遅らせてみた。2番目のWrite トランザクションのSystemVerilog のコードを示す。

  task wr_tran_method_two();
    axi_transaction              wr_transaction;     //Declare an object handle of write transaction
    xil_axi_uint                 mtestID;            // Declare ID  
    xil_axi_ulong                mtestADDR;          // Declare ADDR  
    xil_axi_len_t                mtestBurstLength;   // Declare Burst Length   
    xil_axi_size_t               mtestDataSize;      // Declare SIZE  
    xil_axi_burst_t              mtestBurstType;     // Declare Burst Type  
    xil_axi_data_beat [255:0]    mtestWUSER;         // Declare Wuser  
    xil_axi_data_beat            mtestAWUSER;        // Declare Awuser  
    /***********************************************************************************************
    * A burst can not cross 4KB address boundry for AXI4
    * Maximum data bits = 4*1024*8 =32768
    * Write Data Value for WRITE_BURST transaction
    * Read Data Value for READ_BURST transaction
    ***********************************************************************************************/
    bit [32767:0]                 mtestWData;         // Declare Write Data 

    mtestID = 0;
    mtestADDR = 'h100;
    mtestBurstLength = 15;
    mtestDataSize = xil_axi_size_t'(xil_clog2(32/8));
    mtestBurstType = XIL_AXI_BURST_TYPE_INCR; 
    wr_transaction = agent.wr_driver.create_transaction("write transaction in API");
    WR_TRANSACTION_FAIL: assert(wr_transaction.randomize());
    wr_transaction.set_write_cmd(mtestADDR,mtestBurstType,mtestID,mtestBurstLength,mtestDataSize);
    mtestWData[31:0] = 32'h12345678; 
    mtestWData[63:32] = 32'h9abcdef0;
    wr_transaction.set_data_block(mtestWData);
    wr_transaction.set_beat_delay(2,8);
    wr_transaction.set_beat_delay(4,8);
    wr_transaction.set_beat_delay(6,8);
    agent.wr_driver.send(wr_transaction);
  endtask :wr_tran_method_two


ここで、

    wr_transaction.set_beat_delay(2,8);
    wr_transaction.set_beat_delay(4,8);
    wr_transaction.set_beat_delay(6,8);

が今回書き加えた部分だ。
このシミュレーション波形を示す。
Vivado_2017-1_61_170501.png

2番目のWrite トランザクションでWVALID がトグルしているのが分かるが、同じ updated の値にしたのに、それぞれのWVALID がディアサートされている間隔が違っているのはなぜだかわからない?
2番目のWVALID のディレイの長さは 40 ns 、4番目のWVALID のディレイの長さは120 ns 、6番目のWVALID のディレイの長さは140 ns だった。
  1. 2017年05月01日 05:01 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2017.1 の新機能6(AXI Verification IPの使い方の覚書2)

AXI Verification IPの使い方の覚書2です。大体AXI Verification IPの使い方が分かってきた。
今回は、シミュレーションの下から2番目の sim_adv_mst_active__pt_passive__slv_mem をやってみます。
AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の 46 ページの”Figure 6-2: Advanced Simulation Sets”のうちの sim_adv_mst_active_pt_passive_slv_mem を引用する。
Vivado_2017-1_49_170429.png
図1 sim_adv_mst_active__pt_passive__slv_mem

上の図のように、前回からはSlave VIP にメモリが入ったモデルを使用しているところが違っている。
このモデルで、Behavioral Simulation を行った。波形が表示された後で、run all を実行して、$finish で停止する所まで実行した。
Slave VIP のシミュレーション波形を図2 に示す。
Vivado_2017-1_50_170429.png
図2 Slave VIP のシミュレーション波形1

さて、ここで wready の波形を変更してみよう。
wready はスレーブが出力する。よって、axi_vip_0_mem_stimulus.sv の user_gen_wready タスクを変更してみよう。
axi_vip_0_mem_stimulus.sv の user_gen_wready タスク部分を引用する。
Vivado_2017-1_51_170429.png

wready_gen.set_ready_policy(XIL_AXI_READY_GEN_OSC);
があるが、これで、wready の出力のポリシーを設定しているようだ。今は、XIL_AXI_READY_GEN_OSC で wready_gen.set_low_time(1); と wready_gen.set_high_time(2); の設定値を交互に出力している。図 2 を見ると、wready の High の期間が 2 クロック、Low の期間が 1 クロックになっているのが分かる。
これを

wready_gen.set_low_time(1);
wready_gen.set_high_time(1);

に変更してみよう。
変更後にBehavioral Simulation を行った。波形を図3 に示す。
Vivado_2017-1_52_170429.png
図3 Slave VIP のシミュレーション波形2

図2 と図3 を比べてみると、図3 の s_axi_wready のHigh の幅が短くなっているのが分かる。図3 では、wready のHigh の幅とLow の幅が等しくなっている。

次に、

wready_gen.set_ready_policy(XIL_AXI_READY_GEN_RANDOM);

に変更してみよう。
変更後にBehavioral Simulation を行った。波形を図4 に示す。
Vivado_2017-1_53_170429.png
図4 Slave VIP のシミュレーション波形3

wready の生成がランダムになった。

次は、Write トランザクションを変更してみる。
1番目のWrite トランザクションはランダムなので、そのままとする。2番目のWrite トランザクションは値を設定しているので、それを変更してみよう。当初の2番目のWrite トランザクションを示す。
Vivado_2017-1_54_170429.png

mtestADDR(アドレス)は0番地なので 0x100 番地に、mtestBurstLength(バースト長)は0 (シングル転送)なので、15 (16バースト)に変更する。
そして、Write するデータは mtestWData にセットすれば良いらしい。32ビット幅なので、32768 バイトと宣言されているmtestWData の32ビット区切りでデータを入れていけばよいようだ。

mtestWData[31:0] = 32'h12345678;
mtestWData[63:32] = 32'h9abcdef0;を

入れてみよう。
Vivado_2017-1_55_170429.png

変更後にBehavioral Simulation を行った。全体波形を図5 に示す。
Vivado_2017-1_56_170429.png
図 5 Slave VIP のシミュレーション波形4(全体波形)


2番目のアドレス転送を拡大してみよう。
Vivado_2017-1_57_170429.png
図 6 Slave VIP のシミュレーション波形4(アドレス転送の拡大)

100番地で 16 バースト、32ビット幅のWrite トランザクションとなっている。

2番目のデータ転送を拡大してみよう。
Vivado_2017-1_58_170429.png
図 7 Slave VIP のシミュレーション波形5(データ転送の拡大)

最初のWrite データが 0x12345678 で2番目のWrite データが 0xabcdef0 であること分かる。

なお、AXI VIP API の資料は、”AR# 68234 AXI Verification IP - AXI VIP のリリース ノートおよび既知の問題”のXILINX_AXI_VIP_2017_1.zip を参照するとよいと思う。
  1. 2017年04月29日 06:22 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2017.1 の新機能5(AXI Verification IPの使い方の覚書)

Vivado 2017.1 の新機能4(AXI Verification IPのサンプル・デザイン2)”の続き。

AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の 48 ページ、”Useful Coding Guidelines and Examples”を読みながら覚書を書いておく。

テストベンチに必要なもの
・SystemVerilog のテストベンチ

・ axi_vip_v1_0_1_pkg と <component_name>_pkg の import
  <component_name>_pkgはAXI Verification IPを生成するときに作られて、パラメータ化されたエージェントへのtypedef クラスが
含まれている。
import 文は、AXI Verification IPをIPI でインスタンスする際に指示されている。AXI Verification IPをダブルクリックして開くと書いてある。
Vivado_2017-1_46_170427.png

それをテストベンチで import すればよい。axi_vip_0_mst_stimulus.sv の一部を引用する。
Vivado_2017-1_45_170427.png

・エージェントを宣言する。AXI Verification IPの各モードに関するエージェントの名前規則の表を引用する。
Vivado_2017-1_47_170427.png

・エージェントを new でインスタンスする。その際に、<階層パス>.IF を指定する必要がある。
<例> agent = new("master vip agent",DUT.ex_design.axi_vip_mst.inst.IF);
Vivado_2017-1_48_170427.png

・エージェントをスタートさせる。
 AXI Master VIP → agent.start_master(); (エージェント名は new したもの)

 AXI Slave VIP → agent.start_slave(); (エージェント名は new したもの)
  <component_name>_slv_t が使われている場合
READ_WRITE_MODEというのがあって、READ_ONLY やWRITE_ONLY に指定できるようだ。READ_WRITE(UGに書いていないので推定だが)の場合は、Read , Write 共に応答をテストベンチに書いておく必要がある。ONLY の場合は必要なRead またはWrite についての応答をテストベンチに書くておく。

  <component_name>_slv_mem_tが使われている場合(メモリ内蔵)
Read も Write もエージェントで処理されるそうだ。サンプル・デザインを見てみよう。

 AXI pass-through VIP をスレーブ・モードで使うとき
<hierarchy_path>.set_slave_mode(); (スレーブ・モードにセットして)
passthrough_agent.start_slave();  (スレーブとしてエージェントをスタートさせる)
スレーブと同じ注意点がある。

 AXI pass-through VIP をマスタ・モードで使うとき
<hierarchy_path>.set_master_mode(); (マスタ・モードにセットして)
passthrough_agent.start_master(); (マスタとしてエージェントをスタートさせる)

 AXI pass-through VIP をパススルー・モードで使うとき
デフォルトではパススルー・モード。パススルー・モードで使うときは設定が要らないようだ。今回のテストベンチに記述が無い。
マスタ・モードやスレーブ・モードからパススルー・モードにする場合は、下の設定を行う。
<hierarchy_path>.set_passthrough_mode();.
AXI pass-through VIP をパススルー・モードにする場合に、マスタ・モードからだったら stop_master を呼ぶ必要がある。スレーブ・モードからだったら stop_slave を呼ぶ必要がある。

レディ信号の生成
rready 信号の生成は、create_readyメソッドでやるらしい?
rready_gen = mst_agent.rd_driver.create_ready("rready");

後はPG267 を読んでください。

  1. 2017年04月27日 05:08 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2017.1 の新機能4(AXI Verification IPのサンプル・デザイン2)

Vivado 2017.1 の新機能3(AXI Verification IPのサンプル・デザイン1)”の続き。

前回は、AXI Verification IPをIPI にAdd IP してサンプル・デザインを呼び出した。今回は、サンプル・デザインをシミュレーションしてみよう。

最初に、Source ウインドウを示す。
10 個のシミュレーション用テストベンチが並んでいる。
そのうちのaxi_vip_0_exdes_adv_mst_active__pt_passive__slv_comb がアクティブになっている。
Vivado_2017-1_37_170423.png

axi_vip_0_exdes_adv_mst_active__pt_passive__slv_comb の図を”AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の”Figure 6-2: Advanced Simulation Sets”から引用する。
Vivado_2017-1_44_170425.png
上の図を見ると、Pass-Through VIP はPassive でトランザクションを通すモードになっていると思う。

Flow Navigator のSIMULATION -> Run Simulation をクリックして、Run Behavioral Simulation を選択した。
論理シミュレーションがスタートした。
Vivado_2017-1_38_170423.png

最初に波形ウインドウに入っていたのは、clk と reset だけだったので、Divider を挟みながら、各VIP モジュールの信号を入れていった。そして、run all を行った。
axi_vip_mst の全体波形を示す。
Vivado_2017-1_39_170425.png

axi_vip_passthroug の全体波形を示す。
Vivado_2017-1_40_170425.png
Vivado_2017-1_41_170425.png

axi_vip_slv の全体波形を示す。
Vivado_2017-1_42_170425.png

axi_vip_mst のアドレス転送部分を拡大してみよう。
Vivado_2017-1_43_170425.png

まずは、Write トランザクションから、最初のWrite トランザクションのパラメータを示す。
awaddr = 0, awlen = 0d, awsize = 0, awburst = 0, awlock = 0, awcache = e, awport = 4, awregion = 0, awqos = 1
awlen のバースト長 14、awsize は1バイトずつの転送、awburst はアドレス固定、awlock はノーマル・アクセス、awcache はWrite-through Read and Write-allocate、awport は Instruction access, Secure access, Unprivileged acces だった。

次のWrite トランザクションを示す。
awaddr = 0, awlen = 0, awsize = 2, awburst = 1, awlock = 0, awcache = 0, awport = 0, awregion = 0, awqos = 0
awlen のバースト長 1、awsize は4バイトずつの転送、awburst はアドレスをインクリメント、awlock はノーマル・アクセス、awcache はDevice Non-bufferable、awport は Data access, Secure access, Unprivileged acces だった。

最初のRead トランザクションを示す。
araddr = fffffffe, arlen = 0f, arsize = 1, arburst = 2, arlock = 0, arcache = f, arport = 1, arregion = c, arqos = b
arlen のバースト長 16、arsize は2 バイトずつの転送、arburst はアドレスをキャッシュに使われるようにwrap around、arlock はノーマル・アクセス、arcache はWrite-back Read and Write-allocate、arport は Data access, Non-Secure access, Unprivileged acces だった。

次の Read トランザクションを示す。
araddr = 00000000, arlen = 0, arsize = 2, arburst = 1, arlock = 0, arcache = 0, arport = 0, arregion = 0, arqos = 0
arlen のバースト長 1、arsize は4バイトずつの転送、arburst はアドレスをインクリメント、arlock はノーマル・アクセス、arcache はDevice Non-bufferable、arport は Data access, Secure access, Unprivileged acces だった。

最初の Read トランザクションは 0xfffffffe から 16バーストなので、4 K バイト境界を越してしまう。よって、AXI のプロトコル違反なんじゃないか?と思う。ランダムで生成されているようなのだが、ランダムの数に制約は付けられないのかな?
ランダムに発生させた数に自分で制約を与えれば良いのだとは思うが。。。
  1. 2017年04月25日 06:08 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2017.1 の新機能3(AXI Verification IPのサンプル・デザイン1)

Vivado 2017.1 の新機能2(AXI Verification IPの概要)”の続き。

前回は、AXI Verification IP の概要を調べた。今回は、AXI Verification IP のサンプル・デザインをやってみよう。

なお、AXI Verification IPの記事を tethys_seesaa さんにお願いして書いて頂いた。検証のプロだけに、要点がまとまった良い記事だと思うので、ご紹介したい。”XilinxのAXI Verification IPを試す。

AXI Verification IPのサンプル・デザインには、10 個のシミュレーション・セット・テストベンチがあって、シミュレーション用のファイルが 3 個ある。 generic_tb.sv と マスタ・スティミュラス、スレーブ・スティミュラスだ。
generic_tb.sv はマスタ側をエラーチェックする機能がある。マスタ・スティミュラスは、AXI Master VIPとAXI pass-through VIP で生成されて、スレーブ・スティミュラスはAXI Slave VIPでマスタへの応答として生成されるようだ。

それでは、AXI Verification IPのサンプル・デザインを始めよう。
まずは、”Digilent社のボード・ファイルのインストール”を参考にして、Vivado 2017.1 に Digilent 社のボード・ファイルをインストールする。
Vivado 2017.1 で ZYBO 用のプロジェクトを作成する。
次に、AXI_VIP_test という名前のブロック・デザインを生成した。
Vivado_2017-1_30_170423.png

Diagram ウインドウで + ボタンをクリックして、IP を追加する。
Vivado_2017-1_31_170423.png

Search のテキスト・ボックスに”AXI Veri”と入力して、AXI Verification IPを選択する。
Vivado_2017-1_32_170423.png

axi_vip_0 がインスタンスされた。
セーブ・ボタンでセーブする。(セーブしないと、Open IP Examples Design... が出てこない)
Vivado_2017-1_33_170423.png

左のDegign ウインドウの axi_vip_0 を右クリックし、右クリックメニューからOpen IP Examples Design... を選択する。
Vivado_2017-1_34_170423.png

Open IP Example Design ダイアログが表示された。
デフォルトで、OK ボタンをクリックする。
Vivado_2017-1_35_170423.png

axi_vip_0_ex プロジェクトが生成されて、開いた。
Vivado_2017-1_36_170423.png
  1. 2017年04月24日 06:13 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:2

Vivado 2017.1 の新機能2(AXI Verification IPの概要)

Vivado 2017.1 の新機能1(概要)”の続き。

前回は、Vivado 2017.1 の新機能の概要を書いた。今回は、AXI Verification IPの概要を調査しよう。

AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”を参照させて頂くことにする。
”AR# 68234 AXI Verification IP - AXI VIP のリリース ノートおよび既知の問題”も参考にしよう。

AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”によると、AXI Verification IP には、3つのモードがある。

AXI Master VIP
AXI Slave VIP
AXI Pass-Through VIP


つまり、AXI Master になるか、AXI Slave になるか、AXI Master とAXI Slave の間に入るか?の違いのようだ。
AXI VIP はSystemVerilog で書かれているそうだ。Vivado のSystemVerilog サポートも進んできて、だいぶ良くなったのだろう?
UVMと同様の名前付けと構造を使用しているようだ。
AXI VIP は2つの部分で構成されている。

other traditional IP (modules in the static/physical world)
dynamic world


つまり、HDLで書かれた従来のIP があってダイナミック?なソフトウェアがあって、AXI VIP は、仮想インターフェース(virtual interface)でその2つの橋渡しをするようだ。

AXI Master VIP
AXI Master VIPは3つのパートからできている。

• User environment
• Master agent
• AXI master VIP


ソフトウェアの世界には、マスター・エージェントがあって、それには4つのクラス・メンバがあるそうだ。

• Master write driver
• Master read driver
• Monitor
• Virtual interface


AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の29ページの”Figure 4-4: AXI VIP Master Test Bench”を引用する。
Vivado_2017-1_27_170423.png
この図を見ると一目瞭然だ。

ユーザー環境(User Environment)がWrite トランザクションを定義して、マスタ・エージェントのマスタ・ライト・ドライバが create_transaction を行う。
ユーザー環境はデータ入力かランダム入力?トランザクションを決めて、データを出力して、マスタ・エージェントに送る。
マスタ・エージェントでは、send でAXI VIP 経由で検証対象のAXI System に送られるようだ。
AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の30ページの”Figure 4-5: Write Transaction Flow”を引用する。
Vivado_2017-1_28_170423.png

AXI Slave VIP
AXI slave VIP は3つのパートからできている。

• User environment
• Slave agent without a memory model
• AXI slave VIP


やはり、AXI Master VIPと同様にマスタ・エージェントの代わりにスレーブ・エージェントがあって、メモリモデル無しのスレーブ・エージェントには4つのクラス・メンバがある。

• Slave write driver
• Slave read driver
• Monitor
• Virtual interface


”Figure 4-6: AXI VIP Slave Test Bench ”は、構造的には、”Figure 4-5: Write Transaction Flow”と同じ。

Writeする場合は、ユーザー環境は、トランザクション・タイプの変数を宣言してから、スレーブWrite ドライバが get_wr_reactive をコールしてWrite トランザクションが来るまで待っている。
Write トランザクションが来たら、ユーザー環境が用意されたデータでもランダムデータでも応答を用意する。それをスレーブWrite ドライバが仮想インターフェース越しに、AXI VIP に送る。
AXI VIP は応答をAXI System に物理的な信号線で伝える。

Simple SRAM Memory Model
AXI Slave VIP はSystemVerilog の配列を使ったシンプルなメモリ・モデルがある。
Write トランザクションでは、メモリのデータをWrite して、Read トランザクションでは、メモリからデータをRead することができる。
この機能は、ランタイム・スレーブ・モードで、AXI Slave VIPとAXI Pass-through VIP に実装されているそうだ。
メモリ・モデルには、backdoor_memory_write と backdoor_memory_read があって、それぞれ Write または Read するバックドアAPI とのこと。
やはり、メモリ・モデルが無いとAXI Slave を処理するのは厳しい気がするので、これがあって良かった。
AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の32ページのFigure 4-8: Memory Model”を引用する。
Vivado_2017-1_29_170423.png
なお、readmemh はサポートされていないそうだ。あと、reset してもメモリ内容には影響が無いそうだ。

AXI Slave Simple Memory VIP
AXI Slave Simple Memory VIP はAXI Slave VIP にメモリ・モデルが入っているもので、こっちのほうが使いやすいと思う。
私だったら、これを使用すると思う。
  1. 2017年04月23日 07:00 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0
»