ザイリンクス合成レポートを理解して遅延を減らす

私はザイリンクスのVHDLで8051命令セットをプログラミングしています。論理を書いて合成レポートを生成した後、遅延は13.330ns(75.020MHzの周波数)であり、論理レベル= 10であることがわかりました。

この値は非常に少なく(周波数)、私はそれを強調する必要がありますが、私は理解できません/どこで合成レポートを使用して遅延です。

これは、タイミングについて語るレポートの一部です。

=========================================================================
Timing constraint: Default period analysis for Clock 'clk_div1'
  Clock period: 13.330ns (frequency: 75.020MHz)
  Total number of paths/destination ports: 156134/3086
-------------------------------------------------------------------------
Delay:               13.330ns (Levels of Logic = 10)
  Source:            SEQ/alu_op_code_1 (FF)
  Destination:       SEQ/alu_src_2L_7 (FF)
  Source Clock:      clk_div1 rising
  Destination Clock: clk_div1 rising

  Data Path: SEQ/alu_op_code_1 to SEQ/alu_src_2L_7
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     FDE:C->Q             40   0.591   1.345  SEQ/alu_op_code_1 (SEQ/alu_op_code_1)
     LUT4:I1->O            2   0.643   0.527  ALU1/ci32_SW0 (N2251)
     LUT4:I1->O            1   0.643   0.000  ALU1/adder_comp/C11_F (N1292)
     MUXF5:I0->O           3   0.276   0.531  ALU1/adder_comp/C11 (ALU1/adder_comp/C1)
     MUXF5:S->O           12   0.756   0.964  ALU1/adder_comp/C21 (ALU1/adder_comp/C2)
     LUT4:I3->O            8   0.648   0.760  ALU1/ans_L<5>104 (ALU1/ans_L<5>104)
     LUT4:I3->O           17   0.648   1.054  ALU1/ans_L<7>95_SW0 (N264)
     LUT4:I3->O            1   0.648   0.000  SEQ/alu_src_2H_and000055_SW3_F (N1304)
     MUXF5:I0->O           1   0.276   0.423  SEQ/alu_src_2H_and000055_SW3 (N599)
     LUT4_D:I3->O         15   0.648   1.049  SEQ/alu_src_2L_mux0005<7>121228 (N285)
     LUT4:I2->O            1   0.648   0.000  SEQ/alu_src_2H_mux0007<6> (SEQ/alu_src_2H_mux0007<6>)
     FDE:D                     0.252          SEQ/alu_src_2H_1
    ----------------------------------------
    Total                     13.330ns (6.677ns logic, 6.653ns route)
                                       (50.1% logic, 49.9% route)

誰かが何が起きているのか説明できますか?

4
あなたのタイミング制約は何ですか?
追加された 著者 user597225,

3 答え

いくつかの定義:

  • ゲート遅延:ブロックの出力を変更する入力の場合
  • ネット遅延:信号が次のブロックに到達するまでの時間

13.33nsは2つの部分で構成されています。 6.677nsのゲート遅延、および6.653nsのネット遅延

ゲート遅延の主な要因は、論理のコーン内にどのくらい複雑な関数が含まれているかです。正味の遅延の主な要因は、信号によってどれだけ多くのものが駆動されるかです。

レポートの各行は1つの論理ブロックについて話しています。したがって、最初のラインはalu_op_code_1レジスタで、Cピン(Clk)からQピン(出力)までの時間です。ファンアウトの列には、Qピンがドライブする論理ブロックの数が示されます。この場合、それは40です。そのため、遅延が非常に大きいのです。 ALUのオペコードのような一般的に使用されるレジスタが高いファンアウトを持つのはかなり理解できます。

パス全体を見ることもでき、SEQのオペコードからALUに移動することがわかります。加算器を介してSEQブロックに戻り、最終的にはalu_src_2H_1という別のレジスタに戻ります。その道は何か、私はあなたに伝えることはできません。ソースを持つ人だけがそれを行うことができます。そして、それらの2つのレジスタの間にどのようなロジックがあるかを調べるケースです。

私がちょっと混乱しているのは、この道がタイミング(13.33nsが目標です)に合ったように見えますが、あなたはそれを「牛肉」にする必要があると言います。どうして?

3
追加された
1対1の関係はありませんが、レポートの特定の名前はソースに一致します。通常これは、通過する開始点、終了点、ブロック名です。これは、Cコンパイラからのアセンブラ出力を見るようなものです。いくつかの名前は一致し、他はコンパイラによって生成されます。
追加された 著者 Paul S,
私はソースコードを持っています。私が尋ねようとしているのは、合成レポートを見ることで、コードのどの部分が遅いのか(言い換えればどこが最も遅いのか)を知ることができるかどうかです。周波数。
追加された 著者 Saurabh,

レポートの名前を見て、ソースコードと比較してください。

基本的に、ALU演算コードからALU出力信号 "alu_src_2L"までの "SEQ"インスタンスに流れる組み合わせロジックだけがあります。

ソース:SEQ/alu_op_code_1(FF)   目的地:SEQ/alu_src_2L_7(FF)

詳細を見ると、この特定のパスでは、ほとんどの時間がALU "ALU1"、特に加算器/比較ロジック "adder_comp"で使用されていることがわかります。このパスで遅れを少なくしたい場合は、ロジックを最適化するか、別のレジスタでパスを切断する必要があります(残りのデザインはその変更でも動作します)。

3
追加された

まず、FPGA用にHDLを書き込んだり、HDLを適用したりする際には、特定のFPGAの機能と限界を理解することが大切です。ザイリンクスは、各FPGAモデルを文書化する優れた仕事をしています。 LUT4およびMUXF5ブロックを見ると、FPGAファミリはSpartan 3でしょうか?データシートを調べることで、どのハードウェア構成要素が実装するのが非常に効率的で、より多くのリソースが必要であるかを確認できます。一般に、ハードウェアの一部分が実際にチップ上のものに近づくほど、速く実行され、占有する領域が少なくなります。

たとえば、ザイリンクスLUTをシフトレジスタとして使用することもできます。つまり、スライス内のフリップフロップを使用する必要はありません。シフトレジスタがLUTにマップされていることを確認すると、非常に目立つ改善が得られます。 XSTはこれらの効率的なマッピングを推測するためにあなたのHDLに最善を尽くしていますが、リセットシグナルの前にイネーブル信号がチェックされているように、これらの効率的なマッピングを妨げる愚かなことがよくあります。シンセサイザーの出力と配置配線を調べて、FPGAへのマッピングを改善できるインスタンスを見つけてください。ザイリンクスのドキュメントには、VHDLとVerilogの例があり、より効率的なコンポーネントを推測するためにXSTを使用できます。コンポーネントを直接インスタンス化する方が簡単な場合もあります。複雑なコンポーネントの場合、非常に効率的なハードウェアを生成するUNIMACROとCOREGENウィザードがあります。

極端な例を挙げると、 PicoBlazeマイクロコントローラは、ザイリンクスFPGAアーキテクチャを利用するために特別に書かれています。この効率的なマッピングの例を見るためにPicoBlazeのソースコードを調べると役に立ちます。

第2に、組み合わせ論理パスが長すぎると、最大クロック周波数が制限されます。 FPGAをよりよくマップするためにコードを書き直すこと、または不要なハードウェアリソースを排除するために書き直すことに加えて、組み合わせ論理回路の途中にフリップフロップ(レジスタ)を挿入することもできます。コンピュータアーキテクチャでは、これをパイプラインと呼び、1命令あたりのサイクル数を増加させます。たとえば、PicoBlazeは命令ごとに2サイクルを使用します。インテルPentium 4の命令当たりのサイクルは約17サイクルでした。あなたが巧みであれば、1つの命令の処理を開始すると同時に、最後の命令の処理を終了するように、HDLを書き込むことができます。つまり、1命令(レイテンシ)あたり2クロックサイクルかかることになりますが、サイクル(スループット)ごとに1命令をリタイアすることができます。 8051やPicoBlazeのようなほとんどのマイクロコントローラはレイテンシに関係しており、x86アーキテクチャのようなほとんどのマイクロプロセッサはスループットに関係しています。

1
追加された