ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
Main Menu
Tweet
Facebook
Line
:-?
« 1 2 3 (4) 5 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
webadm
投稿日時: 2006-8-27 1:43
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
XilinxとAlteraの違い
Alteraでは問題なくコンパイルできる某リファレンスデザインをXilinxでコンパイルしてみたらエラーが出る。

どうもユーザー定義タイプが一部見あたらないらしい。

ちゃんと定義しているのに。

よく見たら定義は小文字で参照は大文字だった。

XilinxのVHDLは大文字と小文字を区別して扱うのか。

定義の方を大文字になおしたらコンパイルが通った。

小規模のデザインを試したところで何もわからないが、わかったことは。

・Xilinxの論理合成はHDL記述に忠実である。反面解析が浅いので大局的な最適化はしてくれない。
・Xilinxの場合、論理圧縮はほとんどデバイスへのマッピング以降で行われる。といってもこの段階ではもう大局的な圧縮はできないので局所的なものになる。
・Xilinxの場合、CPLDとFPGAとでデバイスのアーキテクチャが異なるので最適化方法がデバイス毎に異なるため最適化が後回しにせざるを得ないのかも。
・Alteraの場合最新のCPLDとFPGAはほぼアーキテクチャが似ているのでネットリスト生成時に共通の最適化をやってしまっている。対局的な最適化も行ってしまうのでHDL記述に忠実とは言えないネットリストができあがる。
・Xilinxの場合はある程度HDL記述で回路の奥行きが広がらないようにしてやらないと忠実に冗長なネットリストを生成してあとで圧縮がきかなくなってしまいかねない。
webadm
投稿日時: 2006-8-27 2:20
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
VHDL版が遅い
VHDL版の万年時計をXilinxでコンパイルしてみるとVerilog版で書いたものよりもX9500XLをターゲットにした場合スピードが出ない。X9500の時と同じしかでない。

Verilog版でもX9500は23MHzぐらい、X9500XLだと大分速くなって84MHzぐらいまでいく。

それにVerilog版だとXC95288XL-6-TQ144にFitしているのにVHDL版は何故か大きなXC95288XL-6-CS280でないと入らない。どうも必要とするFB数が多すぎるようだ。

何故だろう。

謎がまた。
webadm
投稿日時: 2006-8-29 0:05
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
RTL Viewerでみても違いがわからない
VHDL版とVerilog版でそれぞれ合成されたネットリストをRTL Viewerで見比べてみても目立った違いは見あたらない。

レジスタ構成は同じ、加算器と比較器やMUXの数も同じ。多少RTL Viewer上での配置の位置関係は違うけれども基本的には同一構成に見える。

あとは小いさなMUXやAND/OR論理の違いだろうか。

と思って論理合成レポートを見比べてみたら一個ROMの幅が違うのを発見。

VHDL版だと

Found 8x1-bit ROM for signal <$mux0002> created at line 168.

なのが、Verilog版だと

Found 8x2-bit ROM for signal <$rom0000>.

になっているしかしVerilog版の方がROMサイズが大きいのに逆にプロダクトタームは少ないというのはどういうことだろう。

しかしそれ以外はレポート内容はまったく同一。

問題となる8x2のROMは年から閏年判定を行う論理の一部を構成するがVerilog版とVHDL版とで明らかに合成結果が違う。

Verilog版では3入力2出力のROMになっているが実際には3入力1出力のMUXで出力がその先の論理で正負2つの入力論理に枝分かれしていた。ちょっと釈然としない表示のされかたではある。

VHDL版では3入力1出力のMUXとしてVerilo版と同じ論理で合成されていて実質はVerilog版とまったく同じ。

少なくともHDLからの論理合成したネットリストは意味的にはまったく同じだと言ってよい。するとデバイスへのマッピングおよびFit時に微妙なネットリスト構成の違いが違いが出たとしか言いようがない。
webadm
投稿日時: 2006-8-29 0:41
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
Technology Schematicもまったく同一だった
Technology Schematicで見比べてみても寸分違わず同一だった。

ということは何かFiting時に差異が加わっているのだろうか。

気になるのはVHDL版の方で以下の警告とエラーが出ている点。

Warning]:Cpld:868 - Cannot fit the design into any of the specified devices with the selected implementation options.
[Error]:Cpld:886 - Function block FB10 was too congested to route successfully. This occurs due to excessive (>= 50) product term input fanins to this function block. Consider moving output signals in this function block to less congested function blocks, buffering output signals that must remain in this function block, or selecting a larger package.
webadm
投稿日時: 2006-8-29 1:05
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
VHDL版だと入力リストにCLOCK1Mが入っていない
Verilog版だと自動的にCLOCK1MがGCLK1に割り当てられているがVHDL版ではそれが無い。

よく見たらFitが失敗しているレポートになっている...orz

どのデバイスにも入り切らないということだったのか。

もしかしてバグにあたってしまったのだろうか?

webadm
投稿日時: 2006-8-29 1:41
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
Coolrunner 2ならほぼ同じ
Verilog版はX9500やCoolrunner 2をターゲットにするぶんにはVerilog版よりもむしろ使用リソース数が少しちいさくなるがX9500XLをターゲットにするとリソース数が増大してFitに失敗するという違った結果になることが判明。

やはりバグか。なぜ記述言語の違いで結果がこうも違うことになるのか謎

VHDLはかなり記述に忠実にネットリストが合成されるがVerilogだと少し意図しない形になっている、その分Verilogで書いたほうがプロダクトターム数が増えている。しかしTechnologu Schematicで見比べる限りは頭からしっぽまでネットリスト的にはまったく同一。

デバイスへのFit時に言語の違いが影響するように見える。

よく見るとX9500XLへのFitの際にはログに出てくるメッセージの内容がX9500の時とかなり違っている。特にequationの数が何故かX9500の時は129だったのがX9500XLになると135に増加している。どうもFit時のデバイス固有の最適化が悪さしているように見える。
webadm
投稿日時: 2006-8-29 2:05
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
やっぱり最適化がおかしい
Compiler optionのFit時のImplementation TemplateをOptimize BalanceからOptimize Densityに変えてやってみたらなにもしないVerilog版の時よりも一回り小さいXC95144XL-5-TQ100に収まってしまった。

最高動作周波数はVerilog版のなにもしないVerilog版の84MHzよりも劣る50MHzになった。

equation数はなにもしない時よりもむしろ多い139。Optimaize Balance指定だと余裕が少ないと一回り大きなものにしてしまうようだ。

しかし納得がいかない。VHDL記述をなんとかすればVerilog版と同じ結果になるのだろうか?
webadm
投稿日時: 2006-8-29 2:15
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
ネットリストとVHDL入力で大分結果が違う
先ほどのはVHDL版で合成されたネットリスト(NGC)を入力とする新しいプロジェクトを作成しそれでFitをさせてみた場合の話でした。

今度はVHDL版でFit時の最適化方法をOptimize BalanceからOptimize Densityに変えてやってみるとやはりXC95144XL-5-TQ100にぎりぎり収まる。

しかし最高動作周波数がネットリスト入力の時よりも低い33MHzという違った結果になった。

Verilog版も同様にやってみるとこちらは34MHzとほぼ一緒の結果。

一度ネットリストを吐き出させてそれをデザイン入力とするプロジェクトを作成してデバイスにFitさせると言語入力時よりも高速に動作するという裏技がある?

また新しい謎が...
webadm
投稿日時: 2006-8-29 3:33
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
もういちどネットリストをコピーしてやり直してみた
先にFit時の最適化をDensityにして合成したVHDL版のネットリストを入力としてコピーし直してやってみたところ今度はVHDL入力のプロジェクトと同一の結果になった。これが当たり前である。

いろいろやってみたけれどももう再現しなくなった。
なんだったんだろう。

新にわかったのはVerilog版とVHDL版とで最終的にFitさせようとしたequationを見比べると大分見た目が違うという点である。

基本的には同じなはずだが記述言語によって生成される式の順序とかが違ってくるからだろう。

Technology Schematicが同一に見えるというのがそもそもバグなのだろうか?

皆目わからなくなってきた。
webadm
投稿日時: 2006-8-29 10:18
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3094
やぶ蛇でデザインのバグ発覚
どうにも難解なのでデザインのHDLソースを丹念に一行一行見直していたらやぶ蛇でバグを発見。

10月かどうか判定するのにBCDコードではなくて16進数で10.と比較していた...orz

修正して再コンパイルしたらVHDL版と同じようにどのCPLDにもFitしなくなった...orz

« 1 2 3 (4) 5 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
ページ変換(Google Translation)
サイト内検索