インテル® Quartus® Prime プロ・エディションのユーザーガイド: デザインの推奨事項

ID 683082
日付 8/03/2023
Public
ドキュメント目次

1.6.7. コンパレーターに関するHDLガイドライン

このセクションでは、コンパレーター (<>、または ==) で利用可能なさまざまな実装のタイプと、特定の実装を行うために推奨されるデザインのコーディング方法について説明します。 合成ツール ( インテル® Quartus® Prime プロ・エディション の合成など) では、デバイスおよびコンテキスト固有の実装規則を使用して、デザインに最適なものを選択します。

合成ツールは、== コンパレーターを一般的な論理セルに実装し、< コンパレーターをキャリーチェーンまたは一般的なロジックセルに実装します。6入力ALUTを備えるデバイスでは、キャリーチェーンでセルごとに最大3ビットを比較することができます。キャリーチェーンの実装は、スタンドアロンのベンチマーク・テスト・ケースでは一般的なロジックよりも高速になる傾向がありますが、大規模なデザインではフィッターの制限が増えるため、パフォーマンスが低下する可能性があります。面積の要件は、ほとんどの入力パターンで同様です。合成ツールは、入力パターンに基づき適切な実装を選択します。

特定のコーディング・スタイルを選択することにより、 インテル® Quartus® Primeの合成エンジンをガイドすることができます。キャリーチェーンの実装を明示的に選択するには、加算の観点から比較を書き直します。

例えば、次のコーディング・スタイルにより、合成ツールで実装を選択できるようになります。この場合、新しいデバイスファミリーでは一般的なロジックセルを使用する可能性が高くなります。

wire [6:0] a,b;
wire alb = a<b;
次のコーディング・スタイルの場合、合成ツールはキャリーチェーンを使用します。ただし、チェーンが非常に短い場合や、信号 a および b が同じ信号に最小化される場合などのいくつかのケースを除きます。
wire [6:0] a,b;
wire [7:0] tmp = a - b;
wire alb = tmp[7]

この2番目のコーディング・スタイルでは、tmp 信号の最上位ビットを使用します。ab より小さい場合、減算 a-b は負の数になるため、これは2の補数ロジックで1になります。

入力の範囲に関する情報がある場合は、「Don't Care」値を使用してデザインを最適化することができます。この情報は合成ツールでは利用できないため、ロジックを手動で具体的に実装することにより、コンパレーターの実装に必要なデバイス面積を小さくすることができます。

次のロジック構造はアドレスデコーダーでよく見られるものです。これにより、バスの値が一定の範囲内にあるかを少量のロジック面積で確認することができます。

図 7. コンパレーターを使用してバスの値の範囲を確認するロジック構造例