ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ホーム > コミュニティ > 学問、研究 > FPGA/CPLD友の会 > トピック一覧 > タイミング制約のエラーについて...

FPGA/CPLD友の会コミュのタイミング制約のエラーについて質問

  • mixiチェック
  • このエントリーをはてなブックマークに追加

コミュ内全体

タイミング制約エラーについて皆さんにお聞きしたいことがあります。

VHDLをブロックごとに記述して、それぞれのコンパイルには成功したのですが
それらを組み合わせてコンパイルしようと試みたところ、タイミング制約(?)のエラーが出てしまいました。
ランダムにどれでも1つブロックを消してみるとコンパイルできるのですが、すべてを記述した途端このエラーが出ます。
エラー文を読んでヘルプも参照したのですが、今一原因と解決法が見えてきませんでした。
このエラーはどういったものなのか、また解決法などありましたら是非ご教示ください。よろしくお願いします。

以下エラーの原文です。

ERROR:Par:228 - At least one timing constraint is impossible to meet because component delays alone exceed the
constraint. A timing constraint summary below shows the failing constraints (preceded with an Asterisk (*)). Please
use the Timing Analyzer (GUI) or TRCE (command line) with the Mapped NCD and PCF files to identify which constraints
and paths are failing because of the component delays alone. If the failing path(s) is mapped to Xilinx components as
expected, consider relaxing the constraint. If it is not mapped to components as expected, re-evaluate your HDL and
how synthesis is optimizing the path. To allow the tools to bypass this error, set the environment variable
XIL_TIMING_ALLOW_IMPOSSIBLE to 1.

For more information about the Timing Analyzer, consult the Xilinx Timing Analyzer Reference manual; for more
information on TRCE, consult the Xilinx Command Line Tools User Guide "TRACE" chapter.

コメント(21)

ツールは何?
バージョンは?
ゲート使用率は?
タイミング制約の設定は?
メッセージに書かれているマニュアルは読んだ?

メーカーのサイトは参照/検索したか?
多分、Xilinx と見た。
で、ちょっとググった。

私は英語が読めないエンジニア(爆)ですが、
多分 set the environment variable XIL_TIMING_ALLOW_IMPOSSIBLE to 1. 辺りが鍵かなと
適当にあたりをつける。

更にググって、

http://dora.bk.tsukuba.ac.jp/~takeuchi/index.php?%C5%C5%B5%A4%B2%F3%CF%A9%2FHDL%2FXilinx%20ISE%20%A4%CB%A4%AA%A4%B1%A4%EB%A4%CE%C0%A9%CC%F3%A4%CE%CD%BF%A4%A8%CA%FD

こんなん出てきましたけど、コレかなぁ?
(外してたらすんません、スルーしてください。)
ISEのバージョンはわからないけど、Xilinxですね?

たぶん、配線遅延を加えないでも、ロジックだけでタイミング制約の遅延値を超えているんじゃないでしょうか?
*がついているところが、そのダメなクリティカルパスかと?もっとタイミング制約を緩めてやると、例えば5nsだったら10nsにするとか、すると通るんではないかと思います。
もしくは、environment variable をXIL_TIMING_ALLOW_IMPOSSIBLE to 1. にするかですね。
質問の仕方すらあまり理解していなかったようで大変申し訳ありません。

お察しの通りxilinxです。
デバイス         Xilinx xc3s1500-4fg456
開発ツール    ISE Project Navigator Ver11.4
ゲート使用率(?)
              Used Available Utilization
Number of Slice Flip Flops    292 26,624 1%
Number of 4 input LUTs     1,136 26,624 4%
Number of occupied Slices    688 13,312 5%
Total Number of 4 input LUTs 1,268 26,624 4%

まだ皆様の意見には完全に目を通していないのですが
差し当たって情報だけ載せさせて頂きます。
足りない情報やこういう質問の仕方をしたほうがいいなどの
助言等ありましたらご指導ご鞭撻のほどよろしくお願い致します。

タイミング制約の意味をよく理解していないので
皆様のご意見を参考に調べてみます。
かすみ様の記載してくださったHPにて大まかな全貌が見えてきました
そこで一つ質問があるのですが、どういった条件のもとで遅延値が増減するのでしょうか。
また、タイミング設定の制約を緩めると、変更前と比べ
どのようなことが起きるのでしょうか。
あまりFPGAに詳しくない私が言うより、識者の方々が答えてくれそうですけど。(^^;;;
ISE も随分前に触った程度だし。

FPGAで合成された結果、ゲートを通る訳じゃないですか。
で、どのゲートの組み合わせで組まれているかによって、遅延値(ディレイ)が決まります。

ゲートの性能は確定していますよね。>FPGAの物理データとして決まっている。
で、最終的にタイミングが間に合うかどうかを判断している訳なので。

パスリスト(なんて言うんだっけ、クリティカルパスの情報?)が出ているはずなので、
それを見ながら、何処の回路がボトルネックになるかを調べて、
その回路を修正するとか、遅延制約でタイミングが間に合う様にするとか。

そんな作業になると思いますけどね。
FPGA のデータシートを読みました?

この場合は、Spartan-3 のデータシートです
FPGAのロジックの基本の内部構成図が書いてあります

LUTとF/F の組み合わせがどーゆー風に接続されるのか、記述したHDLから想像すると、
あー、段数が多いなとかわかると思うけど

また、大規模な容量のFPGAデバイスに、ちんまりした回路を実装すると、得てしてタイミングが満足しない場合が多いと思ったり(笑)
>アプロ様
残念ながらデータシートに目を通したことはないです。
これから探して確認してみたいと思います。

>marsee様
>かすみ様
ucfファイルのタイミング制約を緩和することによって
論理合成までは成功することが出来ました。
ご協力ありがとうございます。
さらに質問させて頂きたいのですが、このタイミング制約を緩和しすぎると
プログラム全体として破綻してしまうような気がするのですが、その点はどうなのでしょうか。


また的外れな見解ならば指摘してほしいのですが、
今回自分が組んだプログラムは

Aの入力からBを計算
Bの値からCを計算
.
.
.
Xの値からYを計算
Yから出力Zを決定

のように多段の計算をしているのですが
これがアプロ様のおっしゃる「段数が多い」ということに該当するのでしょうか。
そしてこれが遅延値増大の原因なのでしょうか。
質問ばかりで恐縮ですがご意見よろしくお願い致します。
@IT MONOist に FPGAに関する情報がありますよ。
ALTERAのツールなので、見た目・FPGA内部の構造は異なりますが、考え方は参考になるでしょう。
# protocol("http://"は抜くので、適当に開いてください

 >必修! FPGAタイミング解析の基礎
 monoist.atmarkit.co.jp/fembedded/index/fpga_index.html

 組み合わせ回路の遅延の話
 monoist.atmarkit.co.jp/fembedded/articles/timing/01/timing01b.html

---

No.8 の理解で正しいです。>"段数が多い"

それと、HDLは Hardware Description Language ですので、合成されるであろう回路を見越して記述するクセをつけておくことをお勧めいたします。
ソフトと同じ感覚では、実際に動く回路が作れないこともあるでしょう。

>プログラム全体として破綻してしまうような気がするのですが、その点はどうなのでしょうか。

回路です。
あなたが、"破綻する"条件を示さないと、判断できません。
A入力からZ出力までの時間が数秒かかってもいいのか、計算中に出力値が変化してもいいのか、など、条件はいくらでも考えられます。

コンカレント代入文を記述すると、データは順番に伝播するイメージです。が、それぞれの"計算"は、組み合わせ回路が生成されるので、C言語などのように順番に動いていくわけではありません。遅延ありでシミュレーションを実行し、計算途中の信号をモニタすると把握していただけるかと思います。

# もう少し詳しく情報を出したほうが、解決するのも早いかと思います。
# 少しずつ理解していきたいのであれば、それもかまいませんが、対応してくださる方が残られるかは... わかりません
## まわりに教えてくれそうなヒトがいるのが質疑応答の回転も速いので、ベストなのでしょうが・・・
>ぉゅぅ%迷走様

返答ありがとうございます。
丁度上記のサイトに目を通しておりました。

情報を小出しにしようという意図はないのですが何分右も左もわからないもので
申し訳ありません。

「回路が破綻する条件」とは少し違うのですが
現在行おうとしている回路の説明をさせて頂きますと
4ch同時にADコンバータからサンプリングした値を計算処理し結果を出力するというプログラムを作成しています。

計算時間自体には1μsほどの余裕があるのでその中で分割することによって遅延値を抑えるということは可能なのでしょうか。

とりあえずは遅延のシミュレーションの方法を調べて検証してみようと思います。
>さらに質問させて頂きたいのですが、このタイミング制約を緩和しすぎると
>プログラム全体として破綻してしまうような気がするのですが、その点はどうなのでしょうか。

ん〜、プログラムありきでVHDLに変換しているのであれば、
動作合成の概念なんですかねぇ?>論理合成より上層の概念

商用ツールはありますけど、VHDLに対応してたかなぁ?ってのと、
そもそも買えるかって問題になりますけどね。(汗
>cacao さん

1us 時間があっても回路方式、クロックの有り無し、クロックの速度、使用する FPGA のゲート遅延仕様次第で 1us 以内で演算できるできないが決まります(この時間が守れなければ破錠ですね)。

遅延シミュレーションも大切ですが、

「ディジタル数値演算回路の実用設計」
http://www.amazon.co.jp/gp/product/4789836177/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=466449256&pf_rd_s=lpo-top-stripe&pf_rd_t=201&pf_rd_i=4320013433&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=0PZ9CBAQ7YD00GVH9GZS

を一読してまずは回路方式を卓上で検討した方がよいと思います。
そのうえで、この回路ではどこにタイミング制約をかけて、それが守られなければならないのかを決めるべきです。
> cacaoさん
どんな計算かしりませんけど

整数の
加算、減算ならなんとかなる可能性が高い

乗算は、ちゃんと考えないといけない

除算は、もっとちゃんと考えないといけない

記述の演算子 * / をそのまま使っているとひどいことなりますよ
>た2る様
ご意見ありがとうございます。
もう少し詳しく検討してみたいと思います。

>アプロ様
乗算、除算はビットシフトを使って加減算のみで記述しています。

B(28bit) <= A(28bit) + A(28bit) + …
C(28bit) <= B(28bit) + B(28bit) + …
.
.
.

のような28bitの多段加算を1us以内に行えればいいのですが
どうもこの記述が遅延値を大幅に増加させているようでした。
100MHzのクロックを使って動作させて、セットアップ時間に40ns
かかっていることが確認できましたが、この計算を多周期に渡って
分割するようなことはできるのでしょうか。
たぶんキャリーチェーンが壮大に伸びているのだと思います。
多段演算をパイプライン化した方が良いと思います。私もソースは公開できませんが、ニューラルネットワークの演算でやっています。25MHz動作にするために10段程度のパイプライン化をしていますよ。
> 乗算、除算はビットシフトを使って加減算のみで記述しています。
> B(28bit) <= A(28bit) + A(28bit) + …
> C(28bit) <= B(28bit) + B(28bit) + …

うへー、これでは、100MHzは無理でしょう(笑)
記述では、"+" だけですが、論理合成すると、膨大な回路が生成されますよ

た2るさん が紹介されているように、書籍を読んで、FPGA向けの回路設計にする必要があると思いますけどね

または、marsee さん が書かれているように、パイプライン処理にするかですね

数種類の回路方式を検討して、トレードオフを探った方がいいんぢやないのかな
昔のインターフェースだったかDesign Waveだったかで小林芳直さんが加算器を早くする方法を連載していた覚えがあります。

それと、ISEの最適化オプションでスピード優先みたいなやつはありませんでしたっけ。
これですね、本にまとまっています

 高性能,高信頼性システムを開発するための定石
 ディジタル・ハードウェア設計の基礎と実践
たくさんのご意見ありがとうございます。
取りあえずはパイプライン化について検討しようと思います。

>tomtom様

>ISEの最適化オプションでスピード優先みたいなやつはありませんでしたっけ。

その項目についても調べさせて頂きます。
有難うございます。

ご紹介いただいた書籍に関しましてはまず図書館等の施設にて
探してみようと思います。

ログインすると、残り2件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

FPGA/CPLD友の会 更新情報

FPGA/CPLD友の会のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング

mixiチケット決済