FC2カウンター FPGAの部屋 DCMを使わないクロックを使いIOB内のFFでデータを受ける
FC2ブログ

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

FPGAの部屋

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

DCMを使わないクロックを使いIOB内のFFでデータを受ける

IOBの入力用FFを活用する”でDCMを使わないクロックを使いIOB内のFFでデータを受けた。その結果、クロックの遅延のほうが大きくなったのでセットアップ時間は-0.944nsとマイナスになってしまった。下にFPGA Editorでのlvds_rx_clkからBUFGMUXまでの配線とIOB内の配線、Timing Analyzerのタイミング解析結果を示す。(使用しているFPGAはVirtex-2proです)
clk_FPGA_Editor_3_061220.png

clk_timing_ana_4_061220.png

”IOBの入力用FFを活用する”でDCMを使わないクロックを使いIOB内のFFでデータを受けた。その結果、クロックの遅延のほうが大きくなったのでセットアップ時間は-0.944nsとマイナスになってしまった。下にFPGA Editorでのlvds_rx_clkからBUFGMUXまでの配線とIOB内の配線、Timing Analyzerのタイミング解析結果を示す。
clk_FPGA_Editor_3_061220.png

clk_timing_ana_4_061220.png

ホールド時間は足りているはずだがプラスの値に戻そうと思った。そこで以前は余計物と思ったIOB内の遅延素子をONにすることにした。前回はディフォルトで入っていたものだ。IOB内の配線とTiming Analyzerのタイミング解析結果を示す。
clk_FPGA_Editor_3_061220.png



これではセットアップ時間の規格を満足しないのでクロックを遅延して辻褄を合わせることにする。”クロックを遅延する方法”を参考にして受信クロックに遅延を挿入した。LUT3プリミティブではINIT値が不正だとSynplify ProにけられたのでBUFプリミティブを挿入した。VHDL記述を下に示す。(Synplify Proで論理合成した場合)

attribute syn_keep : string;
attribute syn_keep of clk_node: signal is "ture";
attribute syn_keep of clk_delay_1: signal is "true";
attribute syn_keep of clk_delay_2: signal is "true";
attribute syn_keep of clk_delay_3: signal is "true"; 

..........................

    ibufg_inst1 : ibufg port map(
        i => lvds_rx_clk,
        o => rxclk_ibuf
    );
    
    clk_node <= rxclk_ibuf;
    delay1 : buf
        port map(
            o => clk_delay_1,
            i => clk_node
        );
    delay2 : buf
        port map(
            o => clk_delay_2,
            i => clk_delay_1
        );
    delay3 : buf
        port map(
            o => clk_delay_3,
            i => clk_delay_2
        );
        
    bufg_in : bufg port map(
        i => clk_delay_3,
        o => rxclkfb
    );


このVHDL記述を追加してインプリメントするとBUFプリミティブが入っていなかった。Synplify Proに制約ファイルを出力するオプションをつけてもだめだった。それでUCFにネットをKEEPするようにKEEP制約を追加した。

NET "clk_delay_1" KEEP;
NET "clk_delay_2" KEEP;
NET "clk_delay_3" KEEP;


これでクロックにBUFプリミティブを入れて遅延されられるようになった。下にFPGA Editorで見たBUFプリミティブの様子とTiming Analyzerでのタイミング解析結果を示す。
clk_delay_FPGA_Editor_1_061220.png

clk_delay_timing_ana_2_061220.png

これでセットアップ時間は0.439nsになったので多少FPGAの遅延時間が違っていても大丈夫だろう。
なお、clk_delay_1はIOBの中に統合されてしまったようで外のスライスにはアサインされなかった。(KEEP制約でKEEPしたのはネットなのでclk_delay_1ネットはIOBからの出力ネットとして存在する)
大体ワーストケースの遅延時間はあるがベストケースの値はマニュアルに書いていない。
  1. 2006年12月21日 12:56 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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