FC2カウンター FPGAの部屋 ISE12.1の疑問2と感想
FC2ブログ

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

FPGAの部屋

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

ISE12.1の疑問2と感想

ISE12.1の疑問”では、だいぶ勘違いして申し訳なかった。

まだ疑問がある。”ISE12.1が出ていました”で、defparamを使うとXSTでエラーが出るということを書いた。

ISE12.1でSP605のBRDデザインがXSTでエラーになる話ですが、これは、BRAMの初期値をdefparamで指定している部分でエラーとなっているようです。What's New in Xilinx ISE Design Suite 12のXST、Improved design methodology:を見ると、VHDLのgenericやVerilogのparameterを使わないといけないそうです。
つまり、プリミティブのインスタンスの時にVHDLだったらgeneric map, Verilogだったら# を使ってBRAMの初期値を入れる必要があると思われます。


ISE12.1のエラー画面を見ると、defparamの前に、// synthesis translate_off が記述されている。これは、ここからは論理合成時に無視するというディレクティブだ。これが効いていないのではないか?と思う。下図の記述の意味はシミュレーション時にはdefparamのデータを入れて、シミュレーションして、実際にFPGAにインプリメントするときには、初期値をデフォルト値にするという意味だと思う。それがXSTでエラーになるのだから、おかしいと思う。
ISE121_question_4_100509.png

上図で最初のエラーの全文を下に示す。

ERROR:Xst:3154 - "H:\HDL\FndtnISEWork\Spartan6\SP605_Sample_Projects\sp605_dsp_copy\remote_sources\Projects\Xilinx\ObiWan\FPGA\SP605\Dev\DSP48A\PB_CODE.v". Line 30. Unable to set attribute "INIT_00" with value "00110F07400C000EC0000018002A00FA002A00FA002A00FA002A00FAC0000010" on instance of block . This property is already defined with value "0000000000000000000000000000000000000000000000000000000000000000" on the block definition by a VHDL generic or a Verilog parameter. Apply the desired value by overriding the default VHDL generic or Verilog parameter. Using an attribute is not allowed.



ISE12.1でSpartan3A Starter KitのDDR2 SDRAMコントローラのバーストテスト回路をインプリメントすると、XSTは通るが、パーサーエラーが2個でる。
ISE121_question_5_100509.png

このプロジェクトは、DCMのアトリビュートの設定にdefparamを使っているが、この記述はXSTを通っている。

    DCM dcm_DDR2_clk_dcm (
        .CLKIN(sysclk),
        .CLKFB(clk_bufg),
        .DSSEN(1'b0),
        .PSINCDEC(1'b0),
        .PSEN(1'b0),
        .PSCLK(1'b0),
        .RST(1'b0),     // 前段のDCMがロックするまでリセット
        .CLK0(clk_node),
        .CLK90(),
        .CLK180(),
        .CLK270(),
        .CLK2X(),
        .CLK2X180(),
        .CLKDV(),
        .CLKFX(clk_sdram_node),
        .CLKFX180(),
        .LOCKED(dcm1_locked),
        .PSDONE(),
        .STATUS()
    );
    defparam dcm_DDR2_clk_dcm.CLKIN_PERIOD = 20.0;
    defparam dcm_DDR2_clk_dcm.DLL_FREQUENCY_MODE = "LOW";
    defparam dcm_DDR2_clk_dcm.DUTY_CYCLE_CORRECTION = "TRUE";
    defparam dcm_DDR2_clk_dcm.CLKDV_DIVIDE = 16.0;
    defparam dcm_DDR2_clk_dcm.PHASE_SHIFT = 0;
    defparam dcm_DDR2_clk_dcm.CLKOUT_PHASE_SHIFT = "NONE";
    defparam dcm_DDR2_clk_dcm.STARTUP_WAIT = "FALSE";
    defparam dcm_DDR2_clk_dcm.CLKFX_DIVIDE = 1;
    defparam dcm_DDR2_clk_dcm.CLKFX_MULTIPLY = 3;
    // defparam dcm_DDR2_clk_dcm.FACTORY_JF = 16'hFFFF;


BRAMはだめでDCMはOKなのか?それともSpartan-6はダメで、Spartan-3AはOKなのか?

どうやら、Spartan-6やVirtex-6などの6入力LUTとそれ以外ではXSTのアルゴリズムがそうという違うのではないだろうか?(当たり前という話もあるが。。。)Spartan-3Eで論理合成が5時間かかっていた仕事のプロジェクトをVirtex-6に試しに変更したら数分で終了した。(これはISE11.5でだったかISE12.1だったか記憶が曖昧)
ISE12.1でインプリメントがスピードアップするとしても、Spartan-6やVirtex-6が主になるんじゃないかと予想している。その他は、変わらないのではないだろうか?(あくまで私の予想です)
  1. 2010年05月09日 06:10 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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