한눈에 이해하기.
KO
명령어가 아닌 하드웨어.
같은 입력이 서로 독립된 논리 셀로 들어가는 과정을 따라가 보세요.
3D 보기 포커스 · A–D 입력 · 스페이스 클록 · R 초기화 · L 라벨 · 1–6 챕터 · Esc로 해제
3D 렌더링을 사용할 수 없습니다
논리 조작, 진리표, 파형 엔진은 계속 사용할 수 있습니다.
5분 실험으로 시작하기
전가산기에서 A, B, C를 전환해 보세요. SUM은 세 입력의 패리티이고, CARRY는 둘 이상이 1일 때 1이 됩니다. 클록은 필요 없습니다. LUT 내부를 열어 입력이 어떤 저장 비트를 선택하는지 확인하세요. 메모리 비트를 하나 바꿔 보세요. 데이터 입력을 바꾼 것이 아니라 회로를 재구성한 것입니다.
다음으로 2단 파이프라인을 불러오고, 비트 기억하기를 연 뒤, 클록 펄스를 보내 보세요. 두 레지스터는 같은 에지에서 각자의 D 값을 샘플링합니다. 두 번째 레지스터는 그 에지가 막 만들어 낸 값이 아니라 첫 번째 레지스터의 이전 출력을 샘플링합니다. CE를 끄면 상태가 유지됩니다. SRST는 동기식이며 CE보다 우선합니다.
LUT의 진짜 의미
4입력 LUT의 주소는 I0 + 2·I1 + 4·I2 + 8·I3입니다. 저장된 비트는 16개이며, INIT[address]가 조합 결과입니다. 화면의 16→8→4→2→1 트리는 2입력 멀티플렉서 15개로 이루어진, 논리적으로 등가인 망입니다. I0 입력은 쌍 안에서 선택하고, I1, I2, I3 입력은 점점 더 큰 묶음을 선택합니다. 이 설명은 특정 트랜지스터 배치를 주장하지 않습니다. 트리는 도착한 LUT 입력이 뜻하는 선택을 보여 줄 뿐이며, 내부 게이트의 지연을 하나하나 시뮬레이션하지는 않습니다. F는 LUT 전체에 대한 단일 지연 620 ps가 지난 뒤 갱신됩니다.
예를 들어 0x6666은 I0 XOR I1을, 0x9696은 3입력 패리티를, 0xE8E8은 3입력 다수결 함수를 구현합니다. 함수가 I3 입력을 쓰지 않으면 위쪽 여덟 항목이 아래쪽 여덟 항목을 되풀이합니다. 데이터 입력이 바뀌는 동안에도 LUT 메모리 내용은 바뀌지 않습니다.
구성할 수 있는 것과 없는 것
구성은 LUT 비트, 입력 소스, 그리고 셀이 내보내는 출력이 F인지 레지스터를 거친 Q인지를 정합니다. 멀티플렉서와 금속 배선은 제조된 칩에 이미 존재하며, 구성은 그 동작을 선택할 뿐입니다. 라우팅 현미경은 이를 목적지마다 선택된 소스 하나로 추상화합니다. 실제 디바이스에는 범용 크로스바가 아니라, 제품군마다 다른 유한한 트랙, 스위치 연결성, 라우팅 제약이 있습니다.
이 실험실의 셀 16개에는 각각 LUT4 하나와 선택적인 상승 에지 DFF 하나가 있습니다. 실제 구성 가능 논리 블록은 보통 여러 논리 소자를 묶으며, 명칭, LUT 크기, 패킹과 공유 규칙은 제품군마다 다릅니다. 더 큰 LUT나 분할 가능한(fracturable) LUT를 쓰는 FPGA도 있습니다. FPGA의 구성 기술도 다양하므로, 모든 FPGA가 휘발성 SRAM 구성을 쓴다고 단정하지 마세요.
디지털 엔진
엔진은 정수 피코초 단위의 시간, 대기열에 쌓이는 신호 이벤트, 인터커넥트의 전송 지연, 관성 LUT 지연을 사용합니다. 상수가 아닌 연결의 라우팅 지연은 260 ps + 140 ps × Manhattan hops + added route delay, 즉 260 ps에 맨해튼 거리 기준 홉마다 140 ps와 추가 라우팅 지연을 더한 값입니다. 상수에 묶인 연결의 모델 라우팅 지연은 0입니다. LUT 지연은 620 ps, 클록-Q 지연은 220 ps, 셋업과 홀드는 각각 200 ps와 120 ps입니다. 이 값들은 설명을 위한 숫자이며 어떤 칩의 사양도 아닙니다.
공통의 이상적 상승 에지에서는 Q가 하나라도 바뀌기 전에 모든 D 입력이 먼저 샘플링됩니다. 따라서 카운터 피드백은 동기식입니다. 조합 논리로만 이루어진 피드백 루프는 거부됩니다. X는 디지털 값이 보장되지 않는다는 뜻입니다. LUT 입력에 알 수 없는 값이 있으면, 해당하는 표 항목이 모두 같은 값일 때만 결과가 확정됩니다. 셋업/홀드 위반은 보수적으로 알 수 없는 상태를 만듭니다. 엔진은 아날로그 준안정 전압이나 그 확률적 해소를 예측하지 않습니다.
클록 펄스는 현재 상태가 셋업 시간을 확보한 뒤, 앞으로 올 12 ns 클록 격자 경계에 완전한 펄스 하나를 예약합니다. 사용자 조작 사이의 유휴 경계는 건너뛸 수 있습니다. 이것은 계속 돌아가는 발진기가 아니라 대화형 테스트벤치입니다. 클록 실행은 이런 펄스를 반복해서 대기열에 넣습니다. 다음 이벤트는 자동 전파를 멈추고 시뮬레이션 타임스탬프를 하나 진행합니다. 파형 계측기와 VCD 내보내기에는 예시용 사인파가 아니라 실제로 기록된 모델 상태가 담깁니다. 화면에는 이벤트 시각 스냅숏이 최대 4,000개까지 순환 기록으로 유지됩니다.
타이밍은 명시적인 별도 워크시트입니다
타이밍 챕터는 실시간 회로나 그 파형을 바꾸지 않습니다. 가상의 레지스터 간 경로를 예시용 최소/최대 코너에서 점검합니다. 셋업은 가장 늦은 도착 시각인 tCQ(max) + route(max) + N·tLUT(max)를 사용하며, 그 마감 시각은 T + capture−launch skew − uncertainty − setup입니다. 홀드는 가장 이른 도착 시각을 사용하며, 이 값이 capture−launch skew + uncertainty + hold보다 커야 합니다. 양의 캡처 스큐는 셋업에는 유리하고 홀드에는 불리합니다. 클록 주파수를 낮추는 것만으로는 같은 에지의 홀드 위반을 고칠 수 없습니다.
워크시트는 tCQ 최대/최소 = 0.22/0.10 ns, tLUT 최대/최소 = 0.62/0.18 ns를 사용합니다. 보수적인 불확실성 여유 0.10 ns는 각 점검에 따로 적용됩니다. 표시되는 셋업 기준 주파수 상한은 설계 전체의 타이밍을 보장하지 않습니다. 워크시트는 클록 재수렴, 타이밍 예외, 멀티사이클 경로, 멀티 클록 분석, 벤더 타이밍 코너를 다루지 않습니다.
구성과 작은 컴파일러
논리식 매퍼는 변수 최대 네 개와 NOT, AND, XOR, OR, 괄호를 받습니다. 식을 구문 분석하고, 16가지 경우를 모두 평가해, 그 함수를 LUT4 하나에 정확히 매핑합니다. 고정된 교육용 셀 하나와 입력 연결 네 개를 할당합니다. 임의의 Verilog를 합성하거나, 실제 라우팅 혼잡을 해결하거나, 타이밍 기반 배치를 실행하거나, 벤더 비트스트림을 생성하지는 않습니다. 생성된 RTL은 동기 리셋과 논블로킹 레지스터 할당을 포함해, 현재 구성된 실험실 넷리스트를 기술합니다. FPGA 레지스터 초기화 지원 여부는 대상 디바이스와 도구에 따라 다릅니다.
워드를 프로그래밍하거나, 라우팅을 바꾸거나, 레지스터/바이패스 출력을 선택하면 모델 전체의 재구성으로 처리됩니다. 클록이 멈추고, 런타임과 파형 기록이 다시 시작되며, Q는 0으로 초기화되고, 선택해 둔 주 입력 레벨은 유지됩니다. 이것은 동작 중 부분 재구성을 시뮬레이션하는 것이 아닙니다. JSON 프로젝트 파일은 회로와 주 입력을 저장하며, 아날로그 상태나 과도적인 런타임 상태는 저장하지 않습니다.
하드 블록과 모델의 한계
BRAM 열과 DSP 열은 구조를 보여 주기 위한 맥락입니다. 살펴볼 수는 있지만 제공된 논리 넷리스트에는 인스턴스화되어 있지 않습니다. 많은 실제 아키텍처에서는 전용 캐리 체인이 산술 연산을 가속합니다. 여기의 가산기와 카운터는 불 논리의 동작 원리를 드러내려고 일부러 LUT 논리를 사용하며, 최적화된 캐리 체인 매핑이라고 주장하지 않습니다.
트랜지스터 동작, 전력, 발열, 신호 무결성, 아날로그 준안정성, 전기적 I/O 표준, 세부적인 클록 트리 스큐, SRAM 업셋 확률, 디바이스 속도 등급, 제조사 핀 배치는 모델링하지 않습니다. 층 사이의 간격, 패키지처럼 보이는 패드, 치수는 예시일 뿐입니다. 이 JavaScript 시뮬레이터를 실행하는 것은 FPGA를 실행하는 것이 아니며, 명시된 디지털 의미론을 소프트웨어로 재현할 뿐입니다.
조작과 접근성
드래그하면 회전하고, Shift+드래그나 오른쪽 버튼 드래그로 이동하며, 핀치로 확대·축소합니다. 위를 선택하면 직교 평면도로 볼 수 있습니다. 논리 셀, LUT 비트, 라우팅 교차점을 클릭해 보세요. 편집할 수 있는 회로 매개변수는 모두 일반 양식 컨트롤로도 조작할 수 있습니다. 3D 보기에 포커스가 있을 때는 스크롤로 확대·축소하고, 화살표 키로 회전하며, A–D로 주 입력을 전환하고, 스페이스로 클록 펄스를 대기열에 넣고, R로 런타임을 초기화하고, 1–6으로 챕터를 바꾸고, L로 라벨을 켜고 끄며, ?로 이 가이드를 열고, Esc로 보기를 해제합니다. 이 실험실은 네이티브 WebGL 2를 사용하며 모든 신호를 이 브라우저에서 계산합니다.
주요 기술 참고 자료
구조 개념과 타이밍 식은 다음 자료와 대조해 확인했습니다. 외부 링크는 새 탭에서 열립니다.
전용 메모리가 있는 이유
LUT는 작은 진리표를 저장하며, 일부 FPGA의 LUT는 분산 메모리로도 구성할 수 있습니다. 더 큰 버퍼, FIFO, 테이블은 전용 블록 RAM 자원으로 구현하는 편이 더 효율적입니다. 실제 블록에는 정해진 용량, 데이터 폭, 포트 모드, 쓰기 인에이블, 읽기 타이밍, 쓰기 중 읽기 동작이 있습니다.
비트의 다른 역할
이 실험실에서 LUT의 INIT 비트는 논리 함수를 정의합니다. 동작 중인 메모리 설계에서는 주소, 데이터, 쓰기 인에이블이 사용자 데이터에 접근합니다. 이 두 용도를 RAM의 동작 모드를 고르거나 포트를 라우팅하는 구성 비트와 혼동해서는 안 됩니다.
호박색 LUT 셀을 선택하면 시뮬레이션되는 데이터 경로로 돌아갑니다. 이 시각 모델은 BRAM 지연 시간, 듀얼 포트 충돌 동작, 저장된 사용자 데이터를 지어내지 않습니다.
곱셈기가 LUT를 많이 차지할 필요는 없습니다
많은 FPGA 제품군에는 곱셈이나 곱셈 누산 같은 연산을 위한 전용 산술 블록이 있습니다. 이 블록에는 파이프라인 레지스터, 가산기, 피연산자 멀티플렉서, 캐스케이드 연결이 들어갈 수 있습니다. 데이터 폭, 부호 처리, 지원 연산, 타이밍은 디바이스마다 다릅니다.
HDL에서 알맞은 자원으로
합성 도구는 대상 디바이스, 피연산자 폭, 합성 설정이 허용하면 산술 RTL에서 DSP 블록을 추론할 수 있습니다. 대신 작은 함수는 LUT로 구현할 수도 있습니다. 하드웨어 자원이 많을수록 더 많은 일을 동시에 할 수 있지만, 처리량과 지연 시간은 여전히 클로킹, 파이프라이닝, 데이터 이동에 좌우됩니다.
이 학습 실험실은 일부러 LUT 기반의 작은 함수를 드러내 보입니다. 도식으로 그린 DSP 열이 벤더의 산술 프리미티브를 시뮬레이션한 것이라고 주장하지 않습니다.
구성한 LUT 워드, 라우팅, 레지스터 선택, 주 입력 레벨을 저장하세요. 파형과 일시적인 레지스터 상태는 구성 파일에 포함되지 않습니다.
옮겨 쓸 수 있는 구성
FABRIC 형식으로 된, 읽을 수 있고 검증된 JSON 파일입니다. 벤더 비트스트림이 아닙니다.
브라우저 로컬 체크포인트
이 브라우저에만 저장됩니다. 사용 가능 여부는 브라우저의 저장소 정책에 따라 다릅니다.
기록된 신호 활동
현재의 이벤트 시각 기록을 표준 Value Change Dump 형식(시간 단위 1 ps)으로 내보냅니다.
읽을 수 있는 하드웨어 기술
적용하지 않은 논리식 초안이 아니라, 실제로 프로그래밍된 넷리스트에서 생성됩니다.
이번 호 전시물
구독자는 모든 새 전시물을 공개 당일에 열 수 있습니다. 무료 DigiSim 계정은 {memberDate}부터, 계정이 없으면 {anonymousDate}에 열립니다.
로그인 또는 가입요금제 보기전시를 이용할 수 없어 재생을 멈췄습니다. 새로고침하여 다시 시도하세요.