01signal.com

Versal APAC FPGAsで FIFOs を使用する

FIFO Generatorはどこ?

Versal FPGAsを使用する場合、 Xilinx は、 Verilog または VHDLの instantiation で使用できるプレーンな FIFO を実装する IP block を提供しません。よく知られている FIFO Generator IP は、これらの FPGAsには使用できません。これは、少なくとも Vivado 2022.1 以前の場合です。

したがって、既存の FPGA design の FPGA part を Versal FPGAに変更する場合、プロジェクトにいくつかの変更が必要になる可能性があります。ほとんどすべての FPGA プロジェクトが FIFO Generatorを使用しています。

同じことが Memory Generatorにも当てはまります。 block RAMs を作成するために時々使用される IP は、 Versal FPGAs でも削除されました。ただし、 block RAMs は inferenceによって作成されることが多いため、この IP はあまり使用されません。つまり、 Verilog (または VHDL) 内の array は、通常、 RAMを作成する目的で宣言されます。

AXI インターフェイスを持つ FIFOs および RAMs は、 IPsとして引き続き使用できることに注意してください。 Versal FPGAs のサポートの欠如は、"native" インターフェースを持つ FIFOs と block RAMs にのみ関連しています。

この問題を回避するには、いくつかのオプションがあります。考えられる2つの方法を提案します。

FIFOsの一般的なチュートリアルについては、この一連のページを参照してください。

オプション1: Xilinx Parameterized Macrosを使う

Xilinx Parameterized Macros は、このソフトウェアでサポートされているすべての FPGAs (つまり、 series-7 FPGAs 以降) の Vivado で使用できます。これらのマクロは、 Verilog または VHDLの module と同様に、 instantiationsで使用できます。それらのドキュメントは、 FPGAの primitives と一緒に見つけることができます (たとえば、 Versal Architecture Premium Series Libraries Guide, UG1485にあります)。

ただし、 primitives と Parameterized Macrosには重要な違いがあります。 synthesizer が primitiveに遭遇すると、通常、 synthesized netlistで 1 つの logic element のみを生成します。一方、 Parameterized Macroは、 Verilog moduleと同様に、大量の logic elementsを生成します。

FIFOsを生成する parameterized macros がいくつかありますが、特に次の 2 つです。

これら 2 つの macros によって生成される FIFOs には、「native」インターフェイス、つまり wr_en や rd_enのようなポートがあります。 FIFO Generator で利用可能だったほとんどすべてのオプションは、 macroの instantiation parametersを設定することで有効にすることができます。特に、これらの FIFOs は「Standard FIFOs」または First Word Fall Through (FWFT)のいずれかになります。

さまざまな種類の RAMs を実装するための macros もいくつかあります。いずれにせよ、 AXI-Stream FIFOs にもさまざまな種類がありますが、これらは IP blocksで作成できます。 Versal FPGAsでも作成できます。

これらの macrosの使用方法の詳細については、関連する Libraries Guide( Versal FPGAsの UG1485 ) を参照してください。 Vivadoで instantiation template を取得することもできます。 Tools > Language Templates を選択して Verilog > Xilinx Parameterized Macros (XPM) > XPM > XPM_FIFOに移動し、そこから該当する Synchronous FIFO または Asynchronous FIFOを選択します。

これは、このページに示されているものと同じことを行う baseline synchronous FIFOの作成方法の例です。

module fifo_8x2048
  #(parameter width = 8, depth = 2048)
   (
    input  clk,
    input  rst,
    input  wr_en,
    input [(width-1):0] din,
    input  rd_en,
    output [(width-1):0] dout,
    output full,
    output empty
    );

   xpm_fifo_sync #(
		   .DOUT_RESET_VALUE("0"),
		   .ECC_MODE("no_ecc"),
		   .FIFO_MEMORY_TYPE("auto"),
		   .FIFO_READ_LATENCY(1),
		   .FIFO_WRITE_DEPTH(depth),
		   .FULL_RESET_VALUE(1),
		   .READ_DATA_WIDTH(width),
		   .READ_MODE("std"),
		   .SIM_ASSERT_CHK(0),
		   .USE_ADV_FEATURES("0000"),
		   .WAKEUP_TIME(0),
		   .WRITE_DATA_WIDTH(width)
		   )
   xpm_fifo_sync_inst (
      .almost_empty(),
      .almost_full(),
      .data_valid(),
      .dbiterr(),
      .dout(dout),
      .empty(empty),
      .full(full),
      .overflow(),
      .prog_empty(),
      .prog_full(),
      .rd_data_count(),
      .rd_rst_busy(),
      .sbiterr(),
      .underflow(),
      .wr_ack(),
      .wr_data_count(),
      .wr_rst_busy(),
      .din(din),
      .injectdbiterr(1'b0),
      .injectsbiterr(1'b0),
      .rd_en(rd_en),
      .rst(rst),
      .sleep(1'b0),
      .wr_clk(clk),
      .wr_en(wr_en)
   );
endmodule

オプション #2: Embedded FIFO Generator

Embedded FIFO Generator はよく知られている FIFO Generatorと実質的に同じですが、 Embedded FIFO Generator は block design内でのみ使用できます。

したがって、明らかな解決策は、 block design を作成して Embedded FIFO Generatorを追加することです。次に、この IP block のパラメータを以前の FIFO Generatorとまったく同じように設定します。その後、 FIFOの ports をすべて外部 portsに接続します。その結果、 FIFOのような ports を持ち、 FIFOのように動作する block design が FIFOになります。

特に、 FIFOの ports の名前が通常よりも長くなるため、この解決策は少し醜いです。たとえば、 wr_enの代わりに、 FIFO_WRITE_0_wr_enという名前があります。

結論

Vivadoの IP Catalog から FIFO Generator が姿を消したのは突然で説明のつかないことですが、通常、この IP を Parameterized Macro または block designに置き換えることは難しくありません。

より広い文脈では、 design を Versal FPGAsに移行する可能性にどのように影響するかに関係なく、 FIFO Generator をサポートする FPGAs であっても FIFO Generator の使用を停止することをお勧めします。

このページは英語から自動翻訳されています。 不明な点は元のページを参照してください。
Copyright © 2021-2024. All rights reserved. (b4b9813f)