FC2カウンター FPGAの部屋 2006年10月08日
FC2ブログ

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

FPGAの部屋

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

IOBの入力用FFを活用する

XilinxのFPGAのIOBにビルトインされている出力用FF(フリップフロップ)はFDDRCPEなどを使えば直接インスタンシエーションできるが、IOBの入力用FFを使うときには論理合成ツールに推定させなければいけないので使うつもりでも使えていないときがある。(現在使っているのはVirtex2pro-VP30)
入力用FFを使えればかなりセットアップ時間を安定して稼ぐことが出来るのでなるべく入れて使いたい。通常は下の図のようにMAPのプロパティの"Pack I/O Registers/Latchs into IOBs"で"For Inputs and Outputs"に設定してあってFFがIOBのFFに合う形に書いてあればIOBに入るはずだが、そうならない時もある。これは不確定だがDCMを通していないクロックで使用するFFの時がそうなのだろうか?今回のケースもソースクロックでサンプルするFFの話である。
IOB_FF_0_061008.png

入力パッド後の最初のFFは入力に論理がなく、ただ単に入力パッドの状態を1クロック分ラッチしておくだけである。こんな感じ。
process(reset, rxclk) begin
 if reset='1' then
  rxdata_int <= '0';
 elsif rxclk'event and rxclk='1' then
  rxdata_int <= rxdata; -- 入力パッドから入力
 end if;
end process;

MAPのプロパティの"Pack I/O Registers/Latchs into IOBs"で"For Inputs and Outputs"に設定しただけでは下の図のようにFPGA Editorで見てみるとIOB内の入力用FFを使用していない。
IOB_FF_1_061008.png

この状態でのTiming Analyzerのタイミング解析結果を下に示す。IOBは入力だけで他のスライスにFFをアサインしているのがわかる。
IOB_FF_TA_Tiopi_061008.png

そこでIOB内の入力用FFを使うためにUCFに明示的にIOB内の入力用FFを使うように制約を書いてみる。今回はConstraints Editorを使用してみよう。最初にISEのウインドウ内のProcessesペインのUser Contraintsを展開してCreate Timing Constraintsをダブルクリックする。
IOB_FF_2_061008.png

Constraints Editorが立ち上がるのでMiscタブをクリックする。
IOB Register Control内のSpecify...ボタンをクリック。
IOB_FF_3_061008.png

IOB Register Controlのダイアログが開く。
Available Registers:で必要なレジスタを選択してAddボタンをクリックする。
IOB_FF_4_061008.png

Constraints Editorに戻ると右下のConstraintsペインに制約が追加されている。
IOB_FF_5_061008.png

INST "FFの名前(階層付)" IOB = TRUE;
これでインプリメントしてみた。結果のFPGA EditorでのIOBの様子とTiming Analyzerの結果を下に示す。
IOB_FF_6_061008.png

IOB_FF_TA_Tiopickd_061008.png

これで見るとTiopickdが使用されていてデータの遅延時間が3.732nsとかなり遅くなっている。データシートを見るとどうやらIOBの入力用ディレイが使用されているようだ。おかげでセットアップ時間は1.941nsとなってしまって、規格の1.5nsを満足しなくなってしまった。少なくともVirtex2proではホールド時間を確保するためにDCMが入らない時(たぶん)はIOBディレイが入ってしまうのだろう。(未確認)
次にこれではだめなので、IOBディレイを抜くことにした。今度はUCFを手書きで制約を追加することにする。前回の制約にIOBDELAY = NONEを追加する。
INST "FFの名前(階層付)" IOB = TRUE | IOBDELAY = NONE;
これでインプリメントしてみたところ下の図のようにIOBディレイが削除できた。
IOB_FF_7_061008.png

IOB_FF_TA_Tiopick_061008.png

IOBディレイが削除されデータ入力の遅延はTiopick = 0.847nsだけになった。結果としてセットアップ時間は-0.944nsになった。これだとクロックのほうがデータより遅れているのでホールド時間がきついが、うちのアプリではホールド時間はたっぷり余裕があるので大丈夫だろう。
余裕がない場合はやはりデータ入力用FFをIOBから出してスライスに持っていって遅延を適当に加えるしかないと思われる。その場合は手動でスライスを配置したほうが偏差が少なくてよいかもしれない。
もう1つIOBの入力用FF使用のディレイ有りでクロックを遅延する方法もあった。このほうが1つのクロック入力にLUTディレイを入れればよいので簡単だと思う。
  1. 2006年10月08日 22:09 |
  2. UCFの書き方
  3. | トラックバック:0
  4. | コメント:9

PSXが帰ってきました

PSXが帰ってきました。また、HDDが壊れて交換でした。またまた録画データが消去です。
でも2ヶ月で壊れるHDD、ものすごいはずれですね。それとも壊れるべくして壊れた?
うちのPSX、日が照るところにおいてあるので温度が上がって壊れているのかな?AVラックなのでここしか置くとこないんですけど。。。結構ラックの上の棚とは10cmくらい空いているので大丈夫だと思うんだけど。。。
これでアナログ放送終了までHDDが持つことを祈る。。。
  1. 2006年10月08日 21:26 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0