Posts Tagged with "Design"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.
posted by sakurai on December 7, 2022 #565

verilogシミュレーション

verilogのソースを覗いてみると、FIFO2というモジュールがインスタンスされていました。ソースの一部を示します。

  // submodule ifs
   FIFO2 #(.width(32'd32), .guarded(32'd1)) ifs(.RST(RST_N),
                                                .CLK(CLK),
                                                .D_IN(ifs$D_IN),
                                                .ENQ(ifs$ENQ),
                                                .DEQ(ifs$DEQ),
                                                .CLR(ifs$CLR),
                                                .D_OUT(ifs$D_OUT),
                                                .FULL_N(ifs$FULL_N),
                                                .EMPTY_N(ifs$EMPTY_N));

ライブラリ中のFIFO2($BLUESPECDIR/Verilog/FIFO2.v)のソースを見ると、中心部分は以下のようになっており、レジスタ2段によるFIFOです。

         data0_reg  <= `BSV_ASSIGNMENT_DELAY
                       {width{d0di}} & D_IN | {width{d0d1}} & data1_reg | {width{d0h}} & data0_reg ;
         data1_reg <= `BSV_ASSIGNMENT_DELAY
                      d1di ? D_IN : data1_reg ;

ただし、FIFOなので、2段とはいってもレイテンシが必ず2サイクルになるわけではありません。First-In, First-Outなので、1段目に入れたものをデキューしようとすると、そのまま1段目から供給するロジックとなっています。上記のように、data0は入力か、1段目か、0段目の選択となっており、data1が入力か1段目の選択となっています。

  assign                 D_OUT = data0_reg ;

であることから、data0が出力側レジスタであることがわかります。一方、data1がD_INを入力とする場合は、d1diという信号がTrueの時であり、その論理は、

  wire                   d1di = ENQ & empty_reg ;

となっています。これはFIFOがemtpy(負論理なので)でなく、かつENQされたときというように読めますが、後で条件を調査します。


左矢前のブログ 次のブログ右矢


ページ: