回答:
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として記述します。
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またはゲートレベルと見なされますか?
AND(.a(),.b()) OR(.a(),.b())
純粋に論理ゲートが接続されているように見えます。RTLは、論理ゲートではなくデータの変化をまだ記述しているので、組み合わせ回路であっても、RTLは合成しようとするものであるという印象を受けています。
MyLatch
インスタンス化されたベースセルまたは暗黙のラッチをどのように作成していますか。ゲートをインスタンス化する場合、それはゲートレベルです。それを意味する場合、RTLです。ゲートレベルライブラリには、競合状態/グリッチなどをモデリングするためのタイミングが関連付けられています。RTLシミュレーションは、理想的なコンポーネントで実行されます。