지난 6개월간 개발해온 VHDL과 FPGA 강좌가 완성에 가까워졌습니다. 현재 베타 단계이며 올가을 정식 출시 예정입니다. 대상 독자 이 프로그램은 다른 프로그래밍 언어를 알지만 VHDL과 FPGA는 처음인 개발자 대상. 초중급에서 고급 VHDL 구조 마스터 수준까지 이끕니다. FPGA 개발 맡은 전문 소프트웨어 엔지니어, 하드웨어 설계 탐색하는 학생과 프리랜서, FPGA 엔지니어로 커리어 전환 고려 중인 분들에게 이상적. 기본 프로그래밍 실력만 있으면 실습 위주 접근법 혜택 누릴 수 있습니다. FPGA 엔지니어로서 제가 밟을 모든
모듈 설계 중 AXI 인터페이스 처음 접했을 때 단순화된 플로우 제어 방식에 놀랐습니다. 기존 프로토콜들이 busy/valid, full/valid, empty/valid 쌍에 의존하는 것과 달리 AXI는 ready와 valid 두 신호만 사용합니다. 좌절로 시작된 것이 곧 매혹으로 바뀌었습니다. AXI는 플로우 제어를 핸드셰이크에 직접 내장해 추가 상태 라인 불필요. 기본 규칙은 단순하지만 FPGA 하드웨어에 프로토콜 매핑 시 세심한 주의 필요. 이 튜토리얼에서 블록 RAM에서 동작하는 AXI FIFO의 VHDL 구현을 안내합니다
블록 RAM을 미리 정의된 값으로 채우는 가장 효율적인 방법은 ASCII 파일에서 이진 또는 16진 리터럴 읽기. 이 기법은 ROM 생성에도 쓰이는데, FPGA ROM은 단순히 읽기만 하는 RAM이기 때문. 아래 예제들에 다음 상수들과 RAM 타입이 VHDL 파일 선언부에 선언되어 있다고 가정: constant ram_depth : natural := 256; constant ram_width : natural := 32; type ram_type is array (0 to ram_depth - 1) of std_logic_vect
외부 파일에서 자극 데이터 읽는 것은 VHDL에서 DUT(시험 대상 장치) 제어하는 강력한 방법입니다. 일반 텍스트 파일에 신호 값과 시뮬레이션 시간 시퀀스를 스크립팅하면 테스트벤치 로직 수정 없이 테스트 패턴 빠르게 교체 가능. VHDL 파일 접근 시리즈 두 번째 글에서 TEXTIO 라이브러리로 자극 파일 읽고 4입력 멀티플렉서에 값 적용하는 법 시연. 테스트 케이스 개요 DUT는 8비트 데이터 워드 가진 표준 비동기 4:1 멀티플렉서. 테스트벤치는 출력 검증 안 하고 입력을 구동해 파형 수동 검토 가능하게만 함. 참조용 엔티티
VHDL 테스트벤치에서 이미지 가져오는 가장 간단한 방법은 BMP 래스터 그래픽 포맷 사용. BMP 파일은 Windows 네이티브 지원, 압축 없이 원시 픽셀 데이터 노출로 시뮬레이션에 이상적. 이 글은 이진 BMP 파일 읽고 픽셀 데이터를 동적 메모리에 저장, VHDL DUT에 공급, 처리된 이미지를 새 BMP 파일로 쓰는 방법 설명. 예제 DUT는 그레이스케일 변환 수행하지만 기법은 모든 픽셀 단위 처리 모듈에 적용 가능. TEXTIO 시리즈 일부: TEXTIO로 파일에서 RAM 초기화 TEXTIO로 테스트벤치 자극 파일 읽기
이 영상은 FPGA와 프로그래머블 로직 기술에 대한 입문 프레젠테이션입니다. 2019년 11월 19일 태국 방콕에서 7 Peaks Software 주최 행사에서 45분간 발표한 내용입니다. 프레젠테이션 하이라이트: 05:07 – FPGA 사용자는 누구? 09:06 – FPGA란? 12:13 – 정적 RAM으로 로직 게이트 에뮬레이션 17:47 – 일반적인 FPGA 프리미티브 19:51 – 가장 저렴하고 비싼 FPGA 20:53 – FPGA 플로어플랜 24:30 – VHDL 28:05 – 합성과 배치배선 30:50 – 소프트코어 3
VHDL은 [0, 1] 구간 부동소수점 값을 산출하는 내장 유사 난수 생성기 포함. 이 값들을 스케일링과 오프셋으로 실수, 정수, std_logic_vector, 시간 등 모든 타입의 난수 데이터 생성 가능, 테스트벤치에 적합. 다음 가이드는 IEEE MATH_REAL uniform 프로시저로 이 생성기들 구축하고 OSVVM Random 패키지로 더 큰 유연성 확보하는 법 보여줍니다. 아래 예제들 기반인 uniform 프로시저는 IEEE MATH_REAL 패키지에 정의: procedure UNIFORM(variable SEED1,
펄스 폭 변조(PWM)는 디지털 FPGA 핀을 강력한 아날로그 컨트롤러로 바꿉니다. 고속으로 전원 온/오프 전환하여 부하가 보는 시간 평균 전류를 정확하게 공급, 진짜 아날로그 전압 생성 없이 제어 가능. 대표적 PWM 애플리케이션: 스피커 오디오 출력, LED 디밍, 서보 모터·컴퓨터 팬·펌프·전기차용 브러시리스 DC 모터 같은 유도 모터 토크 제어. 참고: FPGA 핀 PWM으로 RC 서보 컨트롤러 PWM 작동 원리 전원을 높은 주파수로 100%와 0% 사이 전환하면 부하가 보는 시간 평균 전류는 전원이 켜진 시간 비율에 정비례
최근 몇 년간 구입한 많은 기기들이 LED 점멸에서 LED 호흡 효과로 전환했음을 발견했습니다. 대부분 전자 기기엔 내부 상태를 나타내는 상태 LED가 있습니다. 전동 칫솔은 충전 시 LED 깜빡이고, 휴대폰은 다양한 이유로 LED로 주의 환기. 하지만 예전처럼 LED가 깜빡이지 않습니다. 연속적으로 강도가 변하는 아날로그 펄싱 효과에 가깝습니다. 아래 GIF 애니메이션은 로지텍 마우스가 배터리 충전 중임을 이 효과로 나타내는 모습. 빛 강도 패턴이 사람 호흡 주기의 속도·가속도와 비슷해 호흡 LED라 부릅니다. 조명 주기가 사인파
VHDL 테스트벤치가 의도한 실행 끝에 도달하면 시뮬레이터가 깔끔하게 정지하고, 가능하다면 호출 스크립트로 제어권을 반환하길 원합니다. 이 글은 주요 VHDL 시뮬레이터 전반에서 시뮬레이션을 멈추는 가장 일반적이고 신뢰할 수 있는 기법들을 ModelSim, Vivado, Tcl 스크립트용 코드 예제와 함께 리뷰합니다. 1. finish 프로시저 사용 (VHDL-2008) std.env 패키지의 finish 루틴은 에러 없이 완료된 테스트벤치를 끝내는 가장 직관적인 방법. 테스트벤치만 VHDL-2008로 컴파일하면 되며 RTL은 이전
대부분 VHDL 시뮬레이터는 Tcl(Tool Command Language)을 주 스크립팅 인터페이스로 노출합니다. 시뮬레이터 콘솔에 명령어를 입력하면 Tcl을 쓰는 것이고, VHDL 설계를 구동하고 관찰하는 스크립트도 작성 가능합니다. 이 글은 간단한 코드락 모듈의 동작을 VHDL이 아닌 Tcl로 검증하는 자가 검사 테스트벤치 구축 과정을 안내합니다. 결과는 VHDL 재컴파일 없이 실행, 수정, 재사용 가능한 명확하고 유지보수하기 쉬운 테스트 하네스입니다. 참고: Tcl을 배워야 하는 이유 Tcl을 이용한 대화형 테스트벤치 아
무선 조종(RC) 서보는 취미용 항공기, 자동차, 보트의 핵심입니다. 원격 무선 명령을 정밀한 각도 위치로 변환합니다. RC 시스템이 수십 년 된 만큼 업계 표준 인터페이스는 순수 디지털 프로토콜이 아닌 펄스 폭 변조(PWM)입니다. FPGA가 제공하는 결정론적 타이밍으로 고정밀 PWM 구현은 간단합니다. 이 글은 PWM을 사용하는 모든 RC 서보와 호환되는 제네릭 VHDL 서보 컨트롤러를 시뮬레이션 테스트벤치와 Lattice iCEstick FPGA 보드 실구현 예제와 함께 안내합니다. RC 서보용 PWM 제어 원리 PWM 기초는
VHDL generate 문은 코드 블록을 여러 인스턴스로 자동 복제하여 각기 다른 신호에 연결하게 합니다. 컴파일 타임 for 루프로 체인된 프로세스나 모듈 인스턴스를 생성해 보일러플레이트를 획기적으로 줄이고 유지보수성을 높입니다. 전통적 루프가 프로세스나 서브프로그램 내에 국한되는 것과 달리, generate는 아키텍처 영역에 직접 위치합니다. 제네릭과 결합하면 고도로 구성 가능하고 재사용 가능한 VHDL 컴포넌트를 만드는 강력한 메커니즘이 됩니다. Generate 문 문법 [label :] for in generate [d
VHDL에서 텍스트 문자열은 일반적으로 고정 길이 문자 배열로 제한됩니다. 이는 VHDL이 하드웨어를 기술하기 때문이며, 가변 길이 문자열은 동적 메모리를 필요로 하기 때문입니다. 문자열 배열을 정의하려면 저장하려는 최대 문자열 수만큼 컴파일 타임에 공간을 할당해야 합니다. 더 나쁜 건, 문자열의 최대 길이를 정하고 모든 항목을 그만큼 패딩해야 한다는 점입니다. 아래 코드는 그런 구조의 사용 예입니다. type arr_type is array (0 to 3) of string(1 to 10); signal arr : arr_typ
이 튜토리얼은 Xilinx Vivado의 통합 로직 분석기(ILA)와 가상 입출력(VIO) 코어를 사용하여 VHDL 설계를 온칩에서 디버깅하고 모니터링하는 방법을 안내합니다. 끝까지 따라하면 외부 장비 없이 프로브 삽입, 트리거 구성, 정밀한 신호 동작 캡처 방법을 익히게 됩니다. 개요 본문에서 Vivado 스크린샷을 참조합니다. 각 이미지를 클릭하면 확대됩니다. 사이드바나 모바일 팝업 내비게이션으로 빠르게 이동할 수 있습니다. ILA와 VIO ILA IP를 사용하면 내부 FPGA 신호를 실시간으로 프로빙할 수 있고, VIO IP를
안전关键 FPGA 애플리케이션용 VHDL 설계 시 단순 테스트벤치 작성은 불충분합니다. 엔지니어는 숨겨진 부작용 없이 모듈이 명세대로 정확히 동작함을 증명해야 합니다. 형식 검증이 그 수학적 보장을 제공합니다. 형식 검증은 요구사항과 구현 간 간극을 메워 모든 가능한 입력 시퀀스가 설계 속성을 만족함을 증명합니다. DO-254 인증이 필요한 의료 기기, 항공전자 시스템 등 모든 도메인에서 필수적입니다. 이 게스트 포스트에서 숙련된 형식 검증 실무자 Michael Finn Jørgensen이 실용적 통찰과 실행 가능한 팁을 공유합
VUnit은 Python 테스트 스위트 러너와 전용 VHDL 라이브러리를 결합한 선도적인 오픈소스 VHDL 검증 프레임워크입니다. 함께 테스트벤치 컴파일, 실행, 결과 리포팅을 자동화해 엔지니어가 테스트 주도 개발 주기를 따르게 합니다. 이 튜토리얼에서 VHDLwhiz 저자 Ahmadmunthar Zaklouta가 설치·설정부터 테스트벤치 생성, 테스트 케이스 작성, ModelSim 실행까지 VUnit 전체 워크플로를 안내합니다. 즉시 실행 가능한 예제 프로젝트 다운로드 가능. 개요 사이드바나 모바일 내비게이션 버튼으로 섹션 간
Quartus IP 코어를 VUnit 검증 프레임워크로 VHDL 시뮬레이션에 포함시키고 싶었던 적이 있으신가요? FPGA 엔지니어 Konstantinos Paraskevopoulos가 그런 생각을 했지만 적절한 튜토리얼을 찾지 못했습니다. 다행히 그는 재능으로 해결책을 찾아내 VHDLwhiz를 통해 이 게스트 기사로 공유했습니다. Konstantinos에게 말씀을 넘깁니다! VUnit으로 시스템 시뮬레이션 시 Quartus IP 카탈로그의 사전 정의된 IP를 설계에 포함시키는 것이 종종 바람직합니다. 이 튜토리얼은 외부 Qua
VHDL에서 변수는 C 변수처럼 동작합니다: 할당 직후 값이 즉시 사용 가능하고 다음 할당까지 변경되지 않습니다. 이는 프로세스 내 임시 저장과 절차적 계산에 이상적입니다. VHDL 변수 사용 핵심 규칙 변수는 선언된 프로세스 내에 국한됨. 각 프로세스마다 고유한 변수 세트를 가지며 프로세스 간 공유 불가. process 키워드와 begin 키워드 사이에 선언. 할당에는 := 연산자 사용. 한 번 할당하면 변수는 즉시 새 값을 보유해 동일 프로세스 내 후속 문장에서 사용 가능. 마지막 포인트(즉시 할당)가 종종 혼란의 원인입니다
디지털 설계자는 FPGA와 ASIC 내 정밀 산술에 의존합니다. 핵심 개념은 VHDL에서 signed와 unsigned 데이터 타입의 구분입니다. 두 타입 모두 IEEE 라이브러리의 numeric_std 패키지에 정의됩니다. 많은 설계자가 여전히 std_logic_arith를 쓰지만, 이 패키지는 IEEE 표준이 아니며 프로덕션 설계에 권장되지 않습니다. VHDL에서 signed 신호는 2의 보수 숫자로 해석돼 양수와 음수 값을 모두 허용합니다. unsigned 신호는 음이 아닌 값만 표현합니다. 내부적으로 FPGA는 선언한 타입과
VHDL