RTL vs HDL?違いは何ですか


24

RTLとHDLの主な違いは何ですか?正直に言って、私はそれを検索/グーグルで検索しましたが、人々は意見が分かれています。HDLはデジタル回路を記述するために使用されるコンピューター言語であり、合成可能な場合はRTLと見なされると言ったことを覚えています。

回答:


18

HDLは、Object OrientedがC ++、Javaなどを参照できるのと同じ方法で、すべてのハードウェア定義言語(Verilog、VHDLなど)の包括的な名前です。

一方、RTLは回路を記述する方法です。

RTLレベルコードをHDL言語で記述し、その後、(合成ツールにより)同じHDL言語またはターゲットデバイス/プロセスで使用されるゲートレベルの記述に翻訳されます。

例を挙げましょう。RTLのマルチプレクサを記述するVerilog(HDL)の行は次のとおりです。

assign mux_out = (sel) ? din_1 : din_0;

合成ツールはそれを取得して、それを一連の論理ゲート、またはエンドデバイスでサポートされているmuxマクロに変換できます。たとえば、muxマクロをインスタンス化できます

mux u3 (mux_out, din_1, din_0);

どちらの場合でも、同じ入力をブロック(RTL、またはゲートレベル)にフィードでき、出力は同じである必要があります。実際、RTLコードに対して合成の出力をチェックするツールがあり、ツールが合成中に不一致の原因となる偶発的な最適化や変更を行っていないことを確認します。これは、フォーマル検証と呼ばれます。

さまざまな理由、相互運用性、変更の容易さ、理解しやすさから、デジタル回路の説明をゲートレベルではなくRTLとして記述します。


3
素敵な答え、さらに洗練された... RTLは、同期(クロック)デザインを意味するロジッククラウド、レジスタ、ロジッククラウド、レジスタなどの特定のデザインスタイルを想定しています。クロックレス(非同期)デザインのhdlでコーディングしている場合、合成ツール RTL以外のものを使用する可能性があります。
プレースホルダー

実際、RTLコードに対して合成の出力をチェックし、不一致の原因となった合成中に偶発的に最適化または変更を行わないことを確認するツールがあります。これはフォーマル検証と呼ばれます」いいえ、これはそうではありません。これは、論理的等価性チェックまたは形式的等価性チェックと呼ばれます。フォーマル検証は、むしろ、シミュレーション/テストベンチを使用せずに数学的な方法を使用して、ハードウェア記述が記述しようとした動作を実際に記述していることを証明するプロセスです。
アルバンディ

14

HDL(ハードウェア記述言語)は、使用される言語の種類であり、Verilog / VHDL対非HDL javascriptです。

RTL(Register-transfer level)は、あなたが書いている抽象化のレベルです。私が言う3つのレベルは、Behavioural、RTL、Gate-levelです。

Behavioralには、全体的な動作を記述する最高の抽象化層があり、多くの場合、合成できませんが、検証には役立ちます。

RTLは、必要なハードウェアを論理を暗示して記述します。フリップフロップ、ラッチ、およびそれらの間でのデータの転送方法を定義します。これは合成可能であり、合成は使用されるロジックを変更/最適化できますが、動作は変更できません。ゲートなどのマルチプレクサを切り替えて信号を反転させると、設計が最適化されます。

フリップフロップを意味するVerilog RTL:

logic a;              //logic is SystemVerilog, could be a 'reg'
logic k;              // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
  if (~rst_n) begin
    a <= 'b0 ;
  end
  else begin
    a <= k ;
  end
end

組み合わせビット演算子:

logic [1:0] n;
logic [1:0] m;
logic [1:0] result;

assign result = n & m ;

ゲートレベルは、ベースロジックゲート(NAND、NOR、AND、OR、MUX、FLIP-FLOP)を使用した設計です。合成する必要がないか、合成からの出力です。これは、最低レベルの抽象化です。チップで使用するのは論理ゲートですが、位置情報はありません。

ゲートレベルVerilog(上記と同じ機能):

wire a;
wire k;
DFFRX1 dffrx1_i0 (
  .Q (a),   //Output
  .QN( ),   //Inverted output not used
  .D (k),   //Input
  .CK(clk), //Clk
  .RN(rst_n)// Active Low Async Reset
);

コンビナトリアル

wire [1:0] n;
wire [1:0] m;
wire [1:0] result;

AND2X1 and2x1_i0 (
  .Y( result[0]),
  .A( n[0]     ),
  .B( m[0]     )
);
AND2X1 and2x1_i1 (
  .Y( result[1]),
  .A( n[1]     ),
  .B( m[1]     )
);

MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;(非同期リセット/プリセット付きブロックを使用してザイリンクス9536 CPLDに実装できる非同期並列ロードシフトレジスタ)として回路を設計すると、RTLまたはゲートレベルと見なされますか?
supercat

RTL、ゲートレベルは、AND(.a(),.b()) OR(.a(),.b())純粋に論理ゲートが接続されているように見えます。RTLは、論理ゲートではなくデータの変化をまだ記述しているので、組み合わせ回路であっても、RTLは合成しようとするものであるという印象を受けています。
pre_randomize

1
申し訳ありませんが、私は従わず、明確にしようとします。RTLはフリップフロップを意味します。ゲートレベルはフリップフロップをインスタンス化します。単純な回路の場合、論理ゲートの束を接続するのは簡単かもしれません。しかし、電力エリアの効率が悪い場合があります。Atomプロセッサには4,700万個のトランジスタがあり、これは約1,000万個のNAND2に相当します。1000万個の手配線ゲートを定義およびデバッグしますか?これは、意図した動作を調査およびデバッグできる少し抽象化することの利点です。
pre_randomize

1
HDLで74HC74を指定しようとしたとします。組み合わせロジック、同期専用フロップ、透過ラッチの組み合わせを使用してこのようなデバイスを合成する方法はさまざまありますが、競合状態を伴わない、または動作の異常を引き起こす実装を考え出すことはできませんハードウェアプリミティブには存在しません(たとえば、DとQが高い場合、CPまたは/ SDのラントパルスは効果がありませんが、実装では、このようなパルスが準安定性および/または出力グリッチを引き起こす可能性があります)。
supercat

1
MyLatchインスタンス化されたベースセルまたは暗黙のラッチをどのように作成していますか。ゲートをインスタンス化する場合、それはゲートレベルです。それを意味する場合、RTLです。ゲートレベルライブラリには、競合状態/グリッチなどをモデリングするためのタイミングが関連付けられています。RTLシミュレーションは、理想的なコンポーネントで実行されます。
pre_randomize
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.