RTL 수준에서 모델링이 가능한 최초의 HDL은1980년대에 개발되었으며, 이후 엔지니어들이 전자 회로의 데이터 흐름을 모델링할 수 있게 해주는 완전한 설계 시스템으로 발전했습니다.
설계가 점점 더 대규모화되고 복잡해지며, 제조 기술의 발전으로 논리 및 수학적 연산을 수행하는 새로운 방식이 가능해짐에 따라 RTL 설계 방법도 이에 발맞춰 발전해 왔습니다. 시간이 지남에 따라 RTL 설계는 시스템 사양과 회로 설계 단계를 연결하는 디지털 설계 프로세스에서 필수적인 단계가 되었습니다.
RTL 기술의 추상적 특성은 설계 프로세스의 보다 복잡하고 시간이 많이 소요되는 단계를 파고들기 전에 신속한 연구와 빠른 설계 반복을 통해 허용 가능하고 최적화된 설계를 얻을 수 있도록 합니다.
RTL 설계는 설계-실현-검증( 집적 회로 설계 ) 주기의 핵심 단계로, 엔지니어들이 물리적 구성 요소와 그 연결 방식을 고려하기 전에 레지스터, 연산자 및 데이터 흐름 단계에서 설계를 최적화할 수 있게 해줍니다. 이 기사에서는 몇 가지 기본 개념을 다루고, 디지털 회로 설계에서 RTL 설계가 차지하는 위치를 설명하며, RTL 설계 흐름을 소개하겠습니다. 이어서 RTL 설계가 FPGA(FPGA) 및ASIC(Application-Specific Integrated Circuit) 칩 설계에서 어떤 역할을 하는지 살펴보고, RTL 설계의 미래가 어떻게 펼쳐질지 알아보겠습니다.
“레지스터 전송(register-transfer)”이라는 용어는 이 언어가 레지스터 간의 데이터 흐름을 어떻게 기술하고, 데이터에 논리 연산 및 수학적 연산을 어떻게 적용하는지를 의미합니다. 엔지니어들은 RTL 설계를 사용하여 기능 블록을 기술함으로써, 특정 기능을 실행하는 데 사용되는 개별 구성 요소의 동작을 정의합니다. 각 기능 블록에는 순차 회로라고 하는 블록 내 레지스터에 대한 설명과, 해당 기능 블록의 논리 연산을 포함하는 조합 회로에 대한 설명이 포함됩니다. 또한 엔지니어들은 HDL을 사용하여 기능 블록들이 어떻게 연결되는지를 기술함으로써 회로를 통과하는 데이터의 흐름을 정의합니다.
RTL 설계의 장점은 복잡한 시스템을 HDL 코드로 표현되는 비교적 단순한 블록들로 분해한다는 점에 있습니다. 다음은 RTL 설계가 어떻게 활용되는지 이해하는 데 중요한 몇 가지 기본 사항입니다.
RTL 설계에서 일정량의 데이터를 저장할 수 있는 하드웨어 요소를 레지스터라고 합니다. 레지스터는 일반적으로D 플립플롭으로 구현됩니다. 레지스터의 값은 논리 연산의 입력으로 읽히거나, 연산의 출력으로 설정될 수 있습니다. 레지스터 간에 데이터가 어떻게 흐르는지, 그리고 연산에 의해 데이터가 어떻게 변화하는지를 규명하는 것이 RTL 설계의 근본적인 목적입니다.
RTL 설계에서 가장 중요한 부분은 회로의 동작을 기술하는 코드입니다. HDL은 변수, 함수 호출, if-then-else 및 CASE와 같은 논리 문, 부울 문, 수학 연산 등을 포함하는, 프로그래밍 언어와 매우 유사한 사양 언어입니다. 그러나 HDL은 전자 회로, 주로집적 회로의 동작과 구조를 기술하기 위해 특별히 고안되었습니다. HDL을 일반 프로그래밍 언어와 구별하는 한 가지 특징은, 언어 내에 시간 개념이 포함되어 있어 회로 내의 클럭에 의해 연산이 트리거될 수 있다는 점입니다.
이 작업은 이 VHDL에서와 마찬가지로 회로의 디지털 클록 값을 정의하는 변수를 사용하여 수행됩니다. 다음은 클록 값인 clk가 낮은 상태에서 높은 상태(상승 에지)로 이동하는 경우 출력(Q)이 입력 값(D)으로 설정된 인버터의 간단한 예입니다.
D <= not Q;
process(clk)
begin
if rising_edge(clk) then
Q <= D;
end if;
end process;
가장 널리 사용되는 HDL인 초고속 집적회로 하드웨어 기술 언어(VHDL)는 C 언어와는 다른 구문을 가진, 표현이 장황하고 강력한 타입 시스템을 갖춘 언어입니다. 이 언어는 보다 복잡한 시스템 설계를 기술할 때 주로 사용되는 HDL입니다.
또 다른 일반적인 HDL로는 베릴로그(Verilog)나 그 상위 집합인 VHDL( SystemVerilog)이 있습니다. 이 언어는 더 간결하고, 약한 타입 체계를 가지며, 유연성이 뛰어나며, 구문은 C 언어 코드와 비슷합니다. 배우기 쉽고 설명 작성도 간편하기 때문에, 엔지니어들은 입문 단계이거나 회로가 그리 복잡하지 않을 때 이 언어를 선호합니다. IEEE는 베릴로그와 VHDL을 모두 업계 표준으로 정의하고 있습니다.
다음은 두 언어 모두에서 AND 게이트를 보여주는 간단한 예시입니다. AND 게이트는 두 개의 입력과 하나의 출력을 가집니다. 입력값이 모두 1이면 출력은 1이 됩니다. 입력값이 서로 다르거나 둘 다 0으로 설정되어 있으면 출력은 0이 됩니다.
VHDL은 다음과 같이 AND 게이트를 기술합니다.
엔티티 my_and는 -- 먼저, 엔티티를 정의합니다.
port (
inp1: in std_logic; -- 첫 번째 포트
inp2: in std_logic; -- 두 번째 포트
rst: out std_logic -- 출력 포트
);
end my_and;
architecture blk of my_and is -- Next, define the architecture
begin
process(inp1, inp2) -- With the inputs, do the following
Begin
-- Use a simple if-then-else statement
if((inp1=’1’) and inp1=’1’))then
rst <= ’1’;
else
rst <= ’0’;
End if;
end process
end blk;
AND 게이트에 대한 Verilog는 다음과 같습니다.
module my_and(inp1, inp2, rst); // 모듈 정의 call
input inp1, inp2; // 입력 및 출력 정의
output rst;
rst = inp1 & inp2; // & (and) 연산자 사용
endmodule
이 논리 회로는 두 입력 포트의 값을 받아, 두 포트 모두 1일 경우 출력을 1로 설정합니다. 이것은 간단한 예시이지만, 이러한 유형의 코드는 시스템 내의 모든 요소를 표현할 수 있으며, 이를 조합하여 전체 디지털 회로를 정의할 수 있습니다. 대표적인 기본 구성 요소로는 가산기, 곱셈기, 카운터, 메모리, 상태 기계 등이 있습니다. 설계 엔지니어가 시스템을 정의하면 코드는 컴파일러로 전송됩니다. 오류 없이 컴파일되면 엔지니어는 그 결과를 사용하여 시스템을 테스트할 수 있습니다.
RTL 설계에는 두 가지 유형의 연산이 있습니다. 첫 번째인 논리 연산은 레지스터에 저장된 데이터에 대해 비트 단위의 평가 및 수정을 수행합니다. AND, OR, NOT, XOR, 시프트와 같은 논리 연산은 HDL에서 논리적 동작을 정의함으로써 구현됩니다. 위의 예제는 VHDL과 Verilog에서 AND 연산을 어떻게 표현할 수 있는지 보여줍니다. 논리 연산은 하드웨어 내의 논리 게이트를 나타냅니다.
RTL 설계에서 두 번째로 다루는 연산 유형은 산술 연산입니다. 이 연산들은 레지스터에 저장된 데이터를 사용하여 덧셈, 뺄셈, 곱셈, 나눗셈을 수행합니다. HDL에서는 표준 수학 연산자로 표현됩니다. 예를 들어, VHDL에서 두 숫자를 더하려면 다음과 같은 코드를 사용합니다:
rst <= inp1 + inp2;
— 여기서 inp1과 inp2는 두 개의 입력 레지스터이며, rst는 출력 레지스터에 할당된다. RTL에서의 산술 연산은 가산기, 감산기, 곱셈기, 나눗셈기 등과 같은 전용 물리적 소자를 나타낸다.
RTL 설계는 데이터 흐름을 동기식 또는 비동기식 방식으로 표현할 수 있습니다. 동기식의 경우, 루틴은 함수에 입력된 시스템 클럭에 의해 실행되거나 트리거됩니다. 비동기식의 경우, 하나 이상의 입력 포트의 값이 특정 방식으로 변경될 때 루틴이 실행됩니다. 이는 if 문으로 클럭 입력 또는 비클럭 입력의 입력 값이 변경되었는지 확인함으로써 구현됩니다.
현대적인 집적 회로(IC) 설계 흐름은 장치가 수행해야 할 작업에 대한 사양을 받아 이를 패키지화된 반도체 칩으로 구현하는 과정을 포함합니다. RTL 설계가 제공하는 추상화 수준 덕분에 엔지니어들은 설계를 물리적으로 구현하는 구체적인 방법을 고려할 필요 없이 시스템의 상위 수준 기능에 집중할 수 있습니다.
집적 회로 설계 (RTL) 프로세스. RTL 설계는 시스템 사양과 회로 설계 단계를 연결하는 역할을 합니다.
IC 설계 흐름의 첫 번째 단계는 시스템 사양과 아키텍처 설계를 정의하는 것입니다. 이 정보는 HDL 코드로 변환됩니다. 그런 다음 엔지니어들은 해당 코드를 사용하여 기능적 및 논리적 설계를 정의합니다. 이 작업이 완료되면 설계는 넷리스트로 변환되며, 이를 바탕으로 회로 설계를 생성한 후 나머지 설계 과정을 진행합니다.
RTL 설계를 활용한 추상적 표현은 설계 프로세스 중 가능한 한 초기 단계, 즉 시뮬레이션( 물리 설계), 하드웨어 프로토타입( 물리 설계) 검증, 또는 실제 하드웨어 제작에 시간과 비용을 투입하기 전에 이루어집니다. RTL 설계 단계를 이 프로세스에 적절히 반영하기 위해서는 초기 단계의 시스템 사양과, RTL 설계가 완료되었을 때 레지스터, 연산, 데이터 흐름을 실제 회로로 변환해 주는 강력한 도구 간의 원활한 통합이 필요합니다.
RTL 설계 흐름의 목표는 집적 회로, 주로 ASIC( FPGA ) 소자의 기능을 정의하고 최적화하는 것입니다. 설계 엔지니어들은 RTL 설계 흐름을 사용하여 먼저 소자의 논리 구조와 흐름을 정의하여 시스템을 테스트하고 최적화한 다음, RTL 정의를 넷리스트로 변환합니다. 다음의 다섯 단계는 일반적인 RTL 설계 방법론을 설명합니다.
이 흐름에서 첫 번째 작업은 장치 사양을 가능한 한 수정 없이 HDL 코드로 변환하는 것입니다. 대부분의 경우, 엔지니어들은 C나 C++과 같은 표준 프로그래밍 언어를 사용하여 장치의 원하는 동작을 표현합니다. 그런 다음 소프트웨어 도구가 소프트웨어 모델 내의 알고리즘을 선택한 사양 언어로 분해합니다. 이 단계는 단순한 설계의 경우 생략할 수 있지만, 복잡한 설계의 경우 상당한 노력을 절약할 수 있습니다.
그런 다음 엔지니어들은 코드를 작성하거나 개선합니다. 설계자들은 특정 레지스터의 세부 사항, 필요한 연산, 그리고 데이터 흐름에 대해 심도 있게 검토합니다. 이 단계에서 중요한 부분 중 하나는 공통적인 연산과 시스템의 특정 부분을 설명하기 위해 모듈을 사용하는 것입니다. 모듈이 한 번 생성되면 해당되는 곳에서 재사용할 수 있어, 전체 설계의 복잡성을 크게 단순화할 수 있습니다.
코딩이 완료되면 최적화 과정이 시작됩니다. 이 단계의 목표는 성능을 향상시키고, 전력 소모를 최소화하며, 설계의 물리적 크기를 줄이는 것입니다.
타이밍 및 논리 시뮬레이션: 시뮬레이션도구는 타이밍 분석을 수행하고 시스템 전반에 걸쳐 레지스터 값을 추적하는 데 사용됩니다. 설계는 레지스터 전송(RTL) 수준에서 검증되어 회로 전반에 타이밍 문제가 없는지, 그리고 연산 결과가 예상된 출력을 생성하는지 확인합니다. 설계 팀은 이 단계에서 설계 프로세스 초기에 시스템의 전원 글리치 등 모든 문제를 가능한 한 조기에 디버깅하기 위해 노력합니다.
전력 추정:시스템 내 각장치는 일정량의 전력을 소비하며, 설계 엔지니어는 소비되는 전력량을 파악하고, 설계를 반복적으로 개선하여 전력 분배 현황을 이해하고 전력 소비를 최소화해야 합니다.
면적 최소화:집적 회로 내의 모든소자는 물리적 공간을 차지하며, 소자 간 배선 역시 마찬가지입니다. RTL 설계 과정에서는 소자의 물리적 크기를 직접 고려하지는 않지만, 소자의 수와 소자 간 연결의 복잡성은 반영합니다.
설계가 최적화되면, 모든 사양이 충족되는지 확인하기 위해 검증 과정을 거쳐야 합니다. 이는 설계 과정의 핵심 단계이며, 설계를 다음 단계로 진행하기 전에 모든 설계 요구 사항을 점검해야 합니다. 이 검증은 RTL 시뮬레이션이나 형식 검증 중 하나를 통해 수행됩니다.
RTL 시뮬레이션:설계를 동적으로 검증하기 위해 다양한 소프트웨어 도구가 사용됩니다. 입력 벡터를 적용한 후, 그 결과로 얻어진 출력 벡터를 예상 결과와 비교합니다. 입력 및 출력은 일반적으로 파형으로 표시되어 설계 엔지니어가 시스템의 동작을 시각적으로 확인할 수 있습니다.
형식 검증: 이는자동화 기술을 활용하여 일련의 동작 기대치를 시스템의 전체 작동 영역을 살펴보기 하는 수학적 알고리즘으로 변환하는 정적 검증 과정입니다. 그런 다음 그 결과를 수학적으로 평가하여 정확성을 검증합니다.
시스템 설계가 완전히 검증되면, RTL 합성 과정을 통해 RTL 설계의 HDL 코드 표현을 게이트 레벨 넷리스트로 변환합니다. 이는 전자 설계 자동화(EDA) 도구에서 생성된 회로도를 물리적 레이아웃으로 변환하는 도구의 프런트엔드 역할을 합니다.
집적 회로는 크게 두 가지 유형으로 나눌 수 있습니다. 특정 용도용 집적 회로(ASIC)는 특정 용도나 작업을 위해 맞춤 설계된 것입니다. 일단 제작되면 칩 내의 논리 회로는 변경할 수 없습니다. ASIC 칩의 예로는 메모리 모듈, 디지털 음성 녹음기, 최적화된 신호 처리기, 마이크로프로세서, 중앙 처리 장치(CPU), 심지어 I/O, CPU, 메모리 등을 포함하는 시스템 온 칩(SoC)처럼 복잡한 장치까지 포함됩니다.
FPGA(FPGA) 칩은 제조 후 재프로그래밍이 가능한 반도체 칩입니다. FPGA는 논리 회로가 칩의 구조에 고정되어 있는 대신, 프로그래밍이 가능한 연결 그리드로 연결된 논리 블록 배열을 갖추고 있습니다.
RTL 설계는 두 설계 흐름의 초기 단계에서 동일한 역할을 수행합니다. RTL 합성이 완료되면, ASIC 설계 흐름에서는 엔지니어들이 물리적 회로를 계획하고 레이아웃을 설계해야 하는데, 이를 ‘ 플로어플래닝 ’라고 합니다. FPGA 설계에서는 RTL 코드가 사용 가능한 논리 블록을 파악하는 넷리스트로 직접 변환되며, ‘ 배치 및 배선 ’ 단계에서 해당 블록들이 구성됩니다.
디지털 시스템의 원하는 동작을 표현하기 위해 하드웨어 기술 언어를 사용하는 것은 1970년대와 1980년대에 시작되었다. 이는 초대규모 집적회로(VLSI)가 대중화되면서 큰 호응을 얻었으며, 이후 집적회로 설계의 발전과 발맞추어 발전해 왔다. 집적회로의 회로 선폭이 계속 축소되고, 클럭 속도가 지속적으로 증가하며, 하나의 칩에 더 많은 기능이 집적됨에 따라 설계 엔지니어들은 점점 더 큰 어려움에 직면하고 있다.
설계 복잡성은 여전히 가감 없이 증가하고 있으며, RTL 툴들은 이러한 과제에 계속해서 대응해 나가고 있습니다. 설계자들이 차세대 집적회로를 정의하는 데 사용할 툴 제품군을 개발하는 기업들은 RTL 설계 흐름의 사용 편의성, 성능 및 기능을 개선하기 위해 몇 가지 핵심 분야에 집중할 것입니다. 주요 중점 분야는 다음과 같습니다: