Altifigence Academy

1 / 37 · 개념

RTL: 동시에 동작하는 회로를 기술하기

소프트웨어의 실행 순서와 하드웨어의 병렬 구조를 구분하고 상태·다음 상태·관찰 시점을 명세합니다.

회로는 계속 동작합니다

RTL은 레지스터 사이에서 조합논리를 거쳐 값이 이동하는 방식을 기술합니다. 모듈은 하드웨어의 경계이며, 모듈 두 개를 인스턴스화하면 서로 연결된 구조 두 개가 만들어집니다. “첫 함수를 호출한 다음 두 번째 함수를 호출한다”는 뜻이 아닙니다. 입력이 바뀌는 동안에도 회로는 계속 동작합니다.

디지털 논리회로 과정에서 게이트·저장소자·상태 기계를 배웠습니다. 이 과정에서는 그 개념을 명확한 SystemVerilog 인터페이스와 재현 가능한 검증으로 옮깁니다. 구현하기 전에 모든 신호의 폭·구동자·유효 시점·리셋 동작을 설명할 수 있어야 합니다.

현재 상태와 다음 상태를 나눕니다

다음 완전한 모듈은 unsigned 4비트 sample을 8비트 레지스터에 누산합니다. reset은 active high 동기식이며 enable보다 우선합니다. enable이 켜진 에지에서 더하고, 나머지 에지에서는 sum을 유지합니다. 산술은 256을 법으로 순환합니다.

SystemVerilog
module accumulator (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic [7:0] sum
);
  logic [7:0] next_sum;
  assign next_sum = sum + {4'b0000, sample};
  always_ff @(posedge clk) begin
    if (rst) sum <= 8'b0;
    else if (enable) sum <= next_sum;
  end
endmodule

next_sum은 조합 결과입니다. 클록 에지가 없어도 sum이나 sample이 바뀌면 달라질 수 있습니다. sum은 상태를 저장하며 상승 에지에서 갱신됩니다. 둘 다 logic이라고 선언했다고 같은 하드웨어 역할을 갖지는 않습니다.

이 클록 블록의 마지막 else가 없는 것은 “레지스터를 유지한다”는 뜻입니다. 반면 조합 블록에서 대입을 빠뜨리면 래치가 필요할 수 있습니다. 누락된 대입의 의미를 판단하기 전에 어떤 블록인지 확인하세요.

시뮬레이션 전에 에지 표를 계산합니다

각 행은 에지 직전의 상태와 입력을 사용합니다. 저장된 결과는 해당 에지의 nonblocking 갱신 이후에 관찰합니다.

에지rstenablesample에지 전 sum에지 후 sum
E0119알 수 없음0
E101303
E200733
E301538
E4111580

E4에서는 reset이 우선하여 덧셈하지 않습니다. 기존 sum이 250이고 수락한 sample이 10이면 새 8비트 sum은 4입니다. 아홉 번째 비트를 보존하려면 인터페이스와 산술 계약이 달라집니다.

대입 순서는 블록 안에서, 동시성은 구조에서 결정합니다

조합 프로시저 안의 blocking 대입 =은 절차상의 순서대로 실행됩니다. 서로 다른 프로시저와 연속 대입은 동시 프로세스로 스케줄됩니다. 클록 프로시저의 nonblocking 대입 <=은 프로세스 실행 시 사용할 수 있는 값으로 우변을 계산한 뒤 갱신을 예약합니다. 소스에 적힌 순서만으로 사이클 지연을 명세할 수 없습니다.

이 누산기에 #10을 넣어 “클록 하나를 기다린다”고 표현하지 마세요. 지연과 클록 생성기는 뒤에서 사용하는 범용 시뮬레이션 테스트벤치에 둡니다. 합성 가능한 상태 전이는 소프트웨어의 sleep이 아니라 클록 에지와 상태로 표현합니다.

실습 · 요구사항 하나 바꾸기

순환 대신 255에서 포화하도록 바꿔 보세요. 먼저 두 피연산자를 명시적으로 확장해 9비트 합을 구합니다. 비트 8이 1이면 255, 아니면 비트 7:0을 저장합니다. reset과 enable의 우선순위는 유지하세요. 0+0, 250+5, 250+6, enable=0인 에지, reset과 enable이 동시에 켜진 에지를 검사합니다.

기대값은 각각 0, 255, 255, 기존 상태 유지, 0입니다. 포화 검사에는 250+6이 꼭 필요합니다. 250+5만 검사하면 carry 손실을 드러낼 수 없습니다.

소스·에지 표·기대값을 함께 보관하세요. 강의 완료 표시는 학습 기록이며 시뮬레이터 실행과 별개입니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.