RTL 대 HDL? 차이점이 뭐야


24

RTL과 HDL의 주요 차이점은 무엇입니까? 솔직히 말해서 나는 그것을 검색 / googled했지만 사람들은 그들의 의견으로 나뉘어져 있습니다. HDL은 디지털 회로를 설명하는 데 사용되는 컴퓨터 언어이며, 합성 할 수있는 경우 RTL로 간주됩니다.

답변:


18

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로 작성합니다.


3
좋은 대답, 추가 개선 사항 ... RTL은 주어진 디자인 스타일 (논리 클라우드, 레지스터, 논리 클라우드, 레지스터 등)을 가정하여 동기식 (클럭 된) 설계를 의미합니다. 클록이없는 (비동기 적) 디자인을 위해 hdl로 코딩하는 경우 합성 도구 RTL 이외의 다른 것을 사용할 있습니다.
플레이스 홀더

실제로 RTL 코드와 비교하여 합성 결과를 확인하여 합성 중에 실수로 툴이 잘못 최적화되거나 무언가를 변경하지 않았는지 확인하는 툴이 있습니다. 이것을 정식 검증이라고합니다. ''아닙니다. 이것을 논리 동등성 검사 또는 형식적 동등성 검사라고합니다. 공식 검증은 하드웨어 설명이 실제로 의도 한 동작을 설명한다는 것을 증명하는 것입니다 (시뮬레이션 / 테스트 벤치없이 수학적 방법 사용).
Al Bundy

14

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 또는 게이트 레벨로 간주됩니까?
supercat

RTL, 게이트 레벨은 AND(.a(),.b()) OR(.a(),.b())순전히 로직 게이트가 연결된 것처럼 보입니다 . RTL은 데이터의 변화를 설명하면서 논리 회로를 직접 설명하지는 않지만 조합 회로조차도 합성하려는 것입니다.
pre_randomize

1
내가 따르지 않아 죄송합니다, 명확히하려고합니다. RTL은 플립 플롭을 의미합니다. 게이트 레벨은 플립 플롭을 인스턴스화합니다. 간단한 회로의 경우 많은 논리 게이트를 연결하는 것이 간단 할 수 있습니다. 그러나 전력 영역 효율적이지 않을 수 있습니다. Atom 프로세서에는 약 1 천만 개의 NAND2에 해당하는 4,700 만 개의 트랜지스터가 있습니다. 천만 개의 핸드 와이어드 게이트를 정의하고 디버깅 하시겠습니까? 이것은 의도 한 동작을 연구하고 디버깅 할 수있는 약간 추상화의 이점입니다.
pre_randomize '15 년

1
HDL에서 74HC74를 지정하려고한다고 가정하십시오. 조합 논리, 동기 전용 플롭 및 투명 래치의 조합을 사용하여 이러한 장치를 합성 할 수있는 다양한 방법이 있지만 경쟁 조건을 포함하지 않거나 행동 변칙을 유발하지 않는 구현을 파악할 수는 없습니다. 하드웨어 프리미티브에는 존재하지 않습니다 (예 : D와 Q가 높으면 CP 또는 / SD의 런트 펄스는 영향을 미치지 않지만 구현에서는 이러한 펄스가 전이성 및 / 또는 출력 글리치를 유발할 수 있음을 알 수 있습니다).
supercat

1
MyLatch인스턴스화 된 기본 셀 또는 암시 적 래치는 어떻게 작성합니까 ? 게이트를 인스턴스화하면 게이트 레벨이됩니다. 내포하면 RTL입니다. 게이트 레벨 라이브러리는 경쟁 조건 / 글리치 등을 모델링하기 위해 이와 관련된 타이밍을 갖습니다. RTL 시뮬레이션은 이상적인 구성 요소로 실행됩니다.
pre_randomize
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.