01signal.com

input / output block内での registers の使用

序章

FPGAでは、すべての I/O port が logic fabric上に独自の小さな領域を持っています。 IOB (Input / Output Block) と呼ばれるこの領域には、この I/O portの機能をサポートするために必要なすべてが含まれています。 I/O pin、およびいくつかの特別な logic elementsで正しい電圧と電流を保証するアナログ回路。

「IOB」という用語は、 Xilinxの用語の一部であることを指摘しておく必要があります。各 FPGA ベンダーは異なる用語を使用しています。

ほとんどの場合、 IOBの中に IOB registers があります。これらの registers は、 I/O portの pinに直接接続された flip-flops です。

一部の flip-flops は、 pin が input portである場合に使用することを目的としています。 これらの flip-flopsの D input は、 I/O portの pinに接続されています。したがって、この種の flip-flop は、外界から到着した signal の sampling を実行します。

他の flip-flops は、 output portとして pin 専用です。これらの flip-flopsの Q output は pinに接続されています。

IOBs の構造は、 FPGA ごとに異なります。一部の IOBs は複雑で豊富な機能を備えており、他の IOBs はより単純な構造を持っています。多くの場合、 IOB register は SERDESなどのより大きな logic elementの一部です。したがって、 IOBを説明するドキュメントの図面に flip-flops が明示的に描かれていない場合でも、 FPGAの I/O pins に IOB registersがある可能性は依然としてあります。

IOB registersを使用する理由

IOB registers を使用する主な動機は timingです。 これらの registersは I/O portの pinに近いため、この方法で実現された clock-to-output は無敵です。また、 input portsについては、 IOB register が必要な timingを達成する可能性が最も高くなります。

しかし、 timing の要件を満たすのが簡単な場合でも、 IOB registersに固執する正当な理由があります。 再現性。それ以外の場合、 I/O portの pin と flip-flop の間の delay は、 FPGA プロジェクトの implementation ごとに異なります。これは、ツールが flip-flop を毎回異なる場所に配置できるためです。また、 timing constraints が達成されている限り、 routingの delay を変更することも許可されています。 PCB design が正しく、外部コンポーネントとのインターフェースが適切に計画されている限り、これは問題ではありません。ただし、そのような問題が存在する場合、ある implementation と次の delay の違いにより、混乱が生じる可能性があります。 何かがうまくいかず、 designで何かを修正すると、問題が解決したように見えます。しかし、本当に違いを生んだのは、 I/O timing のどこかのわずかな変更です。

IOB registers を使用することで、 FPGAの logicの開発プロセス中に外部コンポーネントとの電気的インターフェイスが意図せず変更されないようにします。これにより、問題が発生した場合に問題を特定しやすくなります。

IOB registersのリクエスト

FPGA ツールに IOB registersを使用するよう明示的に指示する必要がある場合があります。多くの場合、 synthesizer がこれを行う責任があるため、この種の synthesis attribute を Vivadoで使用できます。

(* IOB = "TRUE" *) input the_input,

XDC ファイルでも同じことができます。

set_property IOB true [get_ports the_input]

もう 1 つのオプションは、入力に接続されている register に synthesis attribute を追加することです。

(* IOB = "TRUE" *) reg the_input_samp;

XDC ファイル内の attribute では不十分な場合があることに注意してください。 多くの場合、 synthesizer は、 flip-flops を IOBに入れるために registers を複製する必要があります。これは、 flip-flop の output が FPGAの通常の logic でも使用されている場合に関係します。その理由は、 IOB の内部にある flip-flop の output は portにしか使用できないためです。したがって、同じ outputを製造するには別の flip-flop が必要になるため、 logic fabricで使用できます。このような状況では、多くの場合、 synthesis attribute (上図を参照) が必要になります。

Quartusでは、この種のコマンドを QSF ファイルに追加できます。

set_instance_assignment -name FAST_INPUT_REGISTER ON -to the_input
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to the_output

これを実現する方法は、ツールごとにわずかに異なります。

Timing constraints

IOB registerを使用する port をtiming constraintsと書く理由はありますか?結局、 IOB registerの可能な位置は 1 つしかありません。 timing constraintsの有無にかかわらず、 timing は常に同じであると結論付けても安全ではないでしょうか?

そのため、 IOB registers が使用されている場合でも timing constraints を記述するのには、主に 2 つの正当な理由があります。

最初の理由は、 IOB register が使用されていることを確認することです。 場合によっては、 logic design の変更により、 portsのすべてまたは一部で IOBs を使用できなくなることがあります。これが発生したときにツールが文句を言うことはめったにありません。むしろ、 IOB の内部にない flip-flop は黙って使用されます。 timing constraint は、この状況を防ぐことができます。 関連するすべての flip-flops が IOBs内にある場合にのみ timing constraint を実現できる場合、これらの flip-flops の削除はサイレントではありません。 その結果、 timing constraint は失敗します。

2 つ目の理由は、ツールが I/O portの pin と IOB register の間に意図的に delay を挿入する可能性があることです (すべての FPGAs がこの機能をサポートしているわけではありません)。この delay の目的は、 thold に関連して timing を改善することです ( Quartusのこの例を参照してください)。この望ましくない操作は、この余分な delayなしでのみ達成可能な timing constraint で防ぐことができます。

set_max_delayは通常、 IOB registersの一貫した使用を確保するために適切な timing constraint です。 FPGA tools がこのコマンド (または同様の機能) で "datapath_only" オプションをサポートしている場合、さらに便利です。

結論

可能な限りIOB registers を使用してください。 FPGA ツールは自発的にこれを行うわけではないため、この目標を達成するには多少の努力が必要になる場合があります。この努力の見返りは、最適な timingだけでなく、 I/O portsの再現可能な動作でもあります。

このページは英語から自動翻訳されています。 不明な点は元のページを参照してください。
Copyright © 2021-2024. All rights reserved. (6f913017)