FC2カウンター FPGAの部屋 ISimハードウェア協調シミュレーション2(FFTのシミュレーション1)
FC2ブログ

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

FPGAの部屋

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

ISimハードウェア協調シミュレーション2(FFTのシミュレーション1)

このところISimハードウェア協調シミュレーションをしようとしていたが、いろいろな問題があって、いろいろ試行錯誤していた。
ハイブリッド デザイン向けのハードウェア協調シミュレーションをやりたいと思って、”ISim ハードウェア協調シミュレーション :Spartan-6 メモリ コントローラーおよびオンボード DDR2 メモリ”をやろうとしたが、SP601を持っていない。SP605でやろうとしたが、変換するのが難しかった。結局、ハイブリッド デザイン向けのハードウェア協調シミュレーションはそれ用のHDLを書かなくてはいけないし、内部信号も見えないので、あまり得をしないかな?という考えになった。
(2013/07/05:追記)現在は、SP601のISim ハードウェア協調シミュレーション のマニュアルは無くなって、ML505nadoのマニュアルがある。”ISim ハードウェア協調シミュレーション : Virtex-5エンベデッド イーサネット MAC を介したライブ イーサネット トラフィックの処理

それよりは、そのまま実行出来るロジック ベースのデザイン向けモデルの有効性を検証してみたい。
そこで、”ISim ハードウェア協調シミュレーション チュートリアル : 浮動小数点高速フーリエ変換のシミュレーション”をやってみることにした。
これも、 Virtex®-6 FPGA ML605 評価キットのチュートリアルだが、SP605に変換してやってみることにした。やってみると、FFTのIPの生成が遅かった。30分くらいかかっていたので、途中で自分から落としてしまうことが多かった。
それにSpartan-6では、浮動小数点数のFFTがだめなようだったので、固定小数点に変更してやってみることにした。(使用したISEは13.2)

1.最初にSP605用の新規プロジェクトを作成した。
ISim_Co_Sim_9_110713.png

2.Project メニューからNew Source...を選択する。

3.New Sourece Wizardが起動する。IP(CORE Generator & Architecture Wizard) を選択して、File name:にfft_core2 と入力した。
ISim_Co_Sim_10_110713.png

4.Select IPダイアログで、Detital Signal Processing -> Transforms -> FFTs -> Fast Fouier Trasform 7.1 を選択する。Next->ボタンをクリックする。
ISim_Co_Sim_11_110713.png

5.Summaryが表示される。Finishボタンをクリックする。
ISim_Co_Sim_12_110713.png

6.Fast Fouier Trasformのダイアログが開く。Transform Lengthを16384に、Implementation OptionsをPipelined, Streaming I/Oに設定する。
ISim_Co_Sim_13_110713.png

7.チュートリアルでは、Floationg Pointにしてあるが、ここでは、Fixed Pointのままとする。Output OrderingをNatural Orderに変更する。これは、バタフライを元に順番に戻すオプションかな?
ISim_Co_Sim_14_110713.png

8.Optimize Options -> Complex Multipliers -> Use 4-multiplier structure (performance optimization) のラジオボタンをチェックする。これでGenerateボタンをクリックする。
ISim_Co_Sim_15_110713.png

9.FFTのIPが生成される。30分くらいかかるのでほっといた。

10.fp_fft_core_top.v を作成した。Verilogコードを下に示す。

module fp_fft_core_top(
    clk,
    start,
    xn_re,
    xn_im,
    fwd_inv,
    fwd_inv_we,
    scale_sch,
    scale_sch_we,
    rfd,
    xn_index,
    busy,
    edone,
    done,
    dv,
    xk_index,
    xk_re,
    xk_im);


    input wire    clk;
    input wire    start;
    input wire    [15 : 0] xn_re;
    input wire    [15 : 0] xn_im;
    input wire    fwd_inv;
    input wire    fwd_inv_we;
    input wire    [13 : 0]    scale_sch;
    input wire    scale_sch_we;
    output wire    rfd;
    output wire    [13 : 0] xn_index;
    output wire    busy;
    output wire    edone;
    output wire    done;
    output wire    dv;
    output wire    [13 : 0] xk_index;
    output wire    [15 : 0] xk_re;
    output wire    [15 : 0] xk_im;

    fft_core2 fft_core2_inst (
        .clk(clk), // input clk
        .start(start), // input start
        .xn_re(xn_re), // input [15 : 0] xn_re
        .xn_im(xn_im), // input [15 : 0] xn_im
        .fwd_inv(fwd_inv), // input fwd_inv
        .fwd_inv_we(fwd_inv_we), // input fwd_inv_we
        .scale_sch(scale_sch), // input [9 : 0] scale_sch
        .scale_sch_we(scale_sch_we), // input scale_sch_we
        .rfd(rfd), // ouput rfd
        .xn_index(xn_index), // ouput [13 : 0] xn_index
        .busy(busy), // ouput busy
        .edone(edone), // ouput edone
        .done(done), // ouput done
        .dv(dv), // ouput dv
        .xk_index(xk_index), // ouput [13 : 0] xk_index
        .xk_re(xk_re), // ouput [15 : 0] xk_re
        .xk_im(xk_im) // ouput [15 : 0] xk_im
    );
endmodule


11.一度インプリメントしてみたが、MAPにすごく時間がかかるので、諦めた。(今回はシミュレーションがメインなので。。。)
ISim_Co_Sim_16_110715.png

12.MAPのレポートを下に示す。LUTsは11%だが、RAMB16BWERsを53%、DSP48A1sを41%使用している。

Release 13.2 Map O.61xd (nt)
Xilinx Mapping Report File for Design 'fp_fft_core_top'

Design Information
------------------
Command Line   : map -intstyle ise -p xc6slx45t-fgg484-3 -w -logic_opt off -ol
high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off
-pr off -lc off -power off -o fp_fft_core_top_map.ncd fp_fft_core_top.ngd
fp_fft_core_top.pcf 
Target Device  : xc6slx45t
Target Package : fgg484
Target Speed   : -3
Mapper Version : spartan6 -- $Revision: 1.55 $
Mapped Date    : THU 14 JUL 18:58:14 2011

Interim Summary
---------------
Slice Logic Utilization:
  Number of Slice Registers:                 4,929 out of  54,576    9%
    Number used as Flip Flops:               4,929
    Number used as Latches:                      0
    Number used as Latch-thrus:                  0
    Number used as AND/OR logics:                0
  Number of Slice LUTs:                      3,211 out of  27,288   11%
    Number used as logic:                    2,408 out of  27,288    8%
      Number using O6 output only:           1,026
      Number using O5 output only:              20
      Number using O5 and O6:                1,362
      Number used as ROM:                        0
    Number used as Memory:                     795 out of   6,408   12%
      Number used as Dual Port RAM:              0
      Number used as Single Port RAM:           32
        Number using O6 output only:            32
        Number using O5 output only:             0
        Number using O5 and O6:                  0
      Number used as Shift Register:           763
        Number using O6 output only:           153
        Number using O5 output only:             0
        Number using O5 and O6:                610
    Number used exclusively as route-thrus:      8
      Number with same-slice register load:      0
      Number with same-slice carry load:         8
      Number with other load:                    0

Slice Logic Distribution:
  Number of LUT Flip Flop pairs used:        4,258
    Number with an unused Flip Flop:           296 out of   4,258    6%
    Number with an unused LUT:               1,047 out of   4,258   24%
    Number of fully used LUT-FF pairs:       2,915 out of   4,258   68%
    Number of unique control sets:              28
    Number of slice register sites lost
      to control set restrictions:              42 out of  54,576    1%

  A LUT Flip Flop pair for this architecture represents one LUT paired with
  one Flip Flop within a slice.  A control set is a unique combination of
  clock, reset, set, and enable signals for a registered element.
  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.

IO Utilization:
  Number of bonded IOBs:                        95 out of     296   32%

Specific Feature Utilization:
  Number of RAMB16BWERs:                        62 out of     116   53%
  Number of RAMB8BWERs:                          9 out of     232    3%
  Number of BUFIO2/BUFIO2_2CLKs:                 0 out of      32    0%
  Number of BUFIO2FB/BUFIO2FB_2CLKs:             0 out of      32    0%
  Number of BUFG/BUFGMUXs:                       1 out of      16    6%
    Number used as BUFGs:                        1
    Number used as BUFGMUX:                      0
  Number of DCM/DCM_CLKGENs:                     0 out of       8    0%
  Number of ILOGIC2/ISERDES2s:                   0 out of     376    0%
  Number of IODELAY2/IODRP2/IODRP2_MCBs:         0 out of     376    0%
  Number of OLOGIC2/OSERDES2s:                   0 out of     376    0%
  Number of BSCANs:                              0 out of       4    0%
  Number of BUFHs:                               0 out of     256    0%
  Number of BUFPLLs:                             0 out of       8    0%
  Number of BUFPLL_MCBs:                         0 out of       4    0%
  Number of DSP48A1s:                           24 out of      58   41%
  Number of GTPA1_DUALs:                         0 out of       2    0%
  Number of ICAPs:                               0 out of       1    0%
  Number of MCBs:                                0 out of       2    0%
  Number of PCIE_A1s:                            0 out of       1    0%
  Number of PCILOGICSEs:                         0 out of       2    0%
  Number of PLL_ADVs:                            0 out of       4    0%
  Number of PMVs:                                0 out of       1    0%
  Number of STARTUPs:                            0 out of       1    0%
  Number of SUSPEND_SYNCs:                       0 out of       1    0%



まだシミュレーションしていませんが、今回は終了です。次回に続く。
  1. 2011年07月15日 05:52 |
  2. ISim
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/1851-489bf6db
この記事にトラックバックする(FC2ブログユーザー)