CLB は、エンコーダの応答を検出し、SPI にクロックを供給してデータを受信する役割を果たします。最初にクロックのデューティと周波数を考慮します。図 2-14 に、SPI クロックを生成する CLB ロジックを示します。対応するシミュレーション波形を 図 2-15 に示します。
最初のステップは、指定された周波数とデューティを持つクロック (SPI_CLOCK) を生成することです。SPI_CLOCK の生成において:
- TILE3_COUNTER_1:クロックのデューティおよび周波数 (幅) を決めます。SPI_CLOCK の High 遷移から Low 遷移までの時間は、CLB クロックの数で測定されます。以下の一致信号を使用します。
- zero match:クロックの Low 遷移に対応
- match1:クロックの High 遷移に対応
- match2:クロックの幅に対応
- TILE3_FSM_1:COUNTER_1 の一致値 (match1 および zero match) に基づいてクロック エッジを生成します
- TILE3_LUT_0:COUNTER_1 match2 出力で示されるクロック幅に達したときにカウンタをリセットします
2 番目のステップは、クロックを受信データと整列させることです。これは、SPI がエンコーダの応答を正しく受信するために必要です。クロックの整列には、次の 2 つの課題があります。
- セクション 2.3.1.1 で説明しているように、ケーブル伝搬遅延のせいで、応答は任意の時刻に到着する可能性があります。
- セクション 2.3.1.2 で説明しているように、エンコーダは、アクノリッジ (ACK) を遅延させて、追加の処理時間を要求することもできます。
クロックを整列させるために、LUT_0 は、応答信号の立ち上がりエッジを監視します。最初の立ち上がりエッジは、アクノリッジ (ACK) ビットの後のスタート ビットに対応します。このエッジが検出されると、LUT_0 は COUNTER_1 をリセットし、SPI_CLOCK を応答に整列させます。
3 番目のステップは、内部 SPI_CLOCK に基づいて CLB_SPI_CLOCK を生成することです。図 2-15 に例を示します。
- SPI_CLOCK は、SPI が応答を受信するのに必要とされるよりも長い時間生成されます
- CLB_SPI_CLOCK は、応答を受信するために必要なクロック数のみを出力します
これは、TILE4_FSM_2 を使って SPI_CLOCK_OUTPUT_ENABLE 信号を生成することにより実現されます。この信号は、OUTLUT によって、必要に応じて SPI_CLOCK を許可 /ブロックするために使用されます。