FC2カウンター FPGAの部屋 2007年03月11日
FC2ブログ

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

FPGAの部屋

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

Virtex5のお勉強(PLLのテスト2)

Virtex5のお勉強(PLLのテスト)のプロジェクトでPLLを試しにインプリメントしてみたが、今度はシミュレーションしてみる。
テストベンチ、PLLtest_top_tb.tbw を作って論理シミュレーションしてみる。
PLLtest_V5_7_070311.png

PLLtest_V5_8_070311.png

ModelSim XE� 6.1e starter で論理シミュレーションしてみた。
PLLtest_ModelSim_070311.png

次にVeritakでシミュレーションしてみた。
PLLtest_Veritak_070311.png

当然だが結果は同じだった。
シミュレーションをしているとメモリをだいぶ消費していることに気がついた。
それでそれぞれのシュミレータがどのくらいメモリを消費しているか調べてみることにした。最初にWindowsをリブートしてISEを立ち上げてから各シミュレータを立ち上げて消費メモリを調べてみた。結果を下に示す。各シミュレータは並列に立ち上げずに、1つずつ立ち上げては落としている。シミュレーション時間はModelSimが1us、Veritakが1.082usだ。(ModelSim XE� 6.1e starter, Veritak-Basic 3.30A)
PLLtest_V5_9_070311.png

ModelSimは90MB程度メモリを使用しているが、使うたびにベースが増えてしまう。ライブラリかなにかが残ってしまうのか? 使用メモリも使用するたびに減りはするようだが?
Veritakはこのデザインでは、500MB強メモリを消費するようだ。Veritakは波形を全部記憶しているのでメモリを消費するのかもしれない? Veritakを使う時はメモリを十分に用意しないといけないようだ。

2006.03.11 追記:改めてみてみるとModelSimとVeritakの波形のCLKOUT0_OUTとCLKOUT3_OUT波形が位相が違っているようだ。485nsの波形を見るとわかると思う。なぜだろうか? 初期状態が異なるのか?

調べてみたところModelSimは 255ns 辺りからPLLの波形出力が始まっていて、しかも最初は乱れている。
(ModelSimのバージョンが古いのが原因でした。理由は後ろに書いてあります。)
PLLtest_ModelSim_2_070311.png

Veritakは 245ns からPLLの波形出力が始まっていて、最初からちゃんとした波形が出力されている。
PLLtest_Veritak_2_070311.png

この差が後で位相の差として効いてくるようだ。2つ比べないと違うとはわからない。論理としては合っているから。(ModelSimのバージョンが古いのが原因でした。理由は後ろに書いてあります。)

試してみるのでしたらPLLtestのプロジェクトをおいておきますので、試してみてください。ただし例によって保証はありませんので、自己責任でお使いください。

2006.03.12 追記:原因がわかりました。ModelSimをISE8.2i用の6.1e starterを使っていたのが原因でした。ライブラリが古かったので違いが出たようです。
ModelSimを最新の ModelSim XE� 6.2c starter にしてIPアップデート用のライブラリを更新したところVeritakと同様の波形が表示されました。Veritakと比較する場合はModelSimはライブラリを最新にしておかなければだめという教訓が出来ました。
いろいろご迷惑をおかけしまして申し訳ありませんでした。
  1. 2007年03月11日 09:22 |
  2. Virtex5のお勉強
  3. | トラックバック:0
  4. | コメント:5

Virtex5のお勉強(PLLのテスト)

Virtex5のお勉強としてPLLをCoreGenで作ってみた。どうせシビアなテストは出来ないが、どんなもんかだけでもやってみようと思った。
WebPACKで唯一出来る xc5vlx30 でプロジェクトを作った。最初にNew Source... で IP を選択して PLLtest1 という名前をつけて FPGA Features and Design -> Clocking -> Virtex-5 -> Choose wizard by component -> PLL ADV v9.1i を選択する。
PLLtest_V5_1_070310.png

PPL_ADVの選択ウイザードが走る。デフォルトでは CLKOUT0 にしかチェックがついていないので、 CLKOUT1 から CLKOUT5 までチェックをつけた。更に、Clock Jitterに100psを設定した。
PLLtest_V5_2_070310.png

wizardの次の画面に行くと、出力周波数と位相、デューテイ比を設定する。最初は全部のクロックが100MHzなので、CLKOUT_DIVIDE をいじって周波数を変えてみる。下の画面のように変えてみた。最初にやってみた時は、位相が-360になってしまったり、 デューティ比が中途半端のものがあったが、IPのアップデート (ISE 9.1i IP Update 1) をかけたら?直ったような気がする。
PLLtest_V5_3_070310.png

後はwizardを進めていってPLL_ADVを作った。その後、簡単なトップファイル (PLLtest_top.v) を作った。入力をそれぞれのクロックでシフトレジスタとして2つのDFFをカスケード接続した簡単な回路だ。なぜシフトレジスタとしたかというと、最大動作周波数を見るためだ。
PLLtest_V5_4_070310.png

UCFファイルは入力周波数を入れているだけだ。UCFにINPUT_JITERの設定項目が増えている。

NET "CLKIN1_IN" TNM_NET = CLKIN1_IN;
TIMESPEC TS_CLKIN1_IN = PERIOD "CLKIN1_IN" 10 ns INPUT_JITTER 100 ps;


これでインプリメントしてPARリポートを見てみると動作周波数ごとに Worst Case Slack、Best Case Achievable、Timing Errors が表示される。これは動作周波数というかクロック周期の制約をあたえたからだが。ISE9.1iから表示が変わって、 Worst Case Slackの値の意味が良くわからない。SETUPの方は Best Case Achievable(クリティカルパス)をクロック周期から引いた値みたいだが、(SETUPだからそうか?)HOLDの方が良くわからない。マニュアルやアンサー・サーチを見てみたが良くわからないし。今のところナゾである。わかる方は教えてください。
PLLtest_V5_5_070310.png

次はModelSimとVeritakでシミュレーションしてみようと思う。
  1. 2007年03月11日 07:55 |
  2. Virtex5のお勉強
  3. | トラックバック:0
  4. | コメント:0