답변:
HDL은 Object Oriented가 C ++, Java 등을 참조 할 수있는 것과 동일한 방식으로 모든 하드웨어 정의 언어 (Verilog, VHDL 등)의 모든 이름을 포착합니다.
반면에 RTL은 회로를 설명하는 방법입니다.
RTL 레벨 코드를 HDL 언어로 작성한 다음 동일한 HDL 언어 또는 대상 장치 / 프로세스가 수행하는 모든 것을 게이트 레벨 설명으로 합성 도구로 변환합니다.
예를 들어 보겠습니다. 다음은 RTL의 mux를 설명하는 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)은 여러분이 쓰고있는 추상화 수준입니다. 제가 언급하는 세 가지 수준은 행동, RTL, 게이트 수준입니다.
행동 은 전체 행동을 설명하는 가장 높은 추상화 계층을 가지고 있으며 종종 합성 할 수 없지만 검증에는 유용합니다.
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;
를 비동기식 리셋 / 사전 설정 블록을 사용하여 Xilinx 9536 CPLD에서 구현할 수있는 비동기 병렬로드 쉬프트 레지스터로 설계한다면 RTL 또는 게이트 레벨로 간주됩니까?
AND(.a(),.b()) OR(.a(),.b())
순전히 로직 게이트가 연결된 것처럼 보입니다 . RTL은 데이터의 변화를 설명하면서 논리 회로를 직접 설명하지는 않지만 조합 회로조차도 합성하려는 것입니다.
MyLatch
인스턴스화 된 기본 셀 또는 암시 적 래치는 어떻게 작성합니까 ? 게이트를 인스턴스화하면 게이트 레벨이됩니다. 내포하면 RTL입니다. 게이트 레벨 라이브러리는 경쟁 조건 / 글리치 등을 모델링하기 위해 이와 관련된 타이밍을 갖습니다. RTL 시뮬레이션은 이상적인 구성 요소로 실행됩니다.