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에서 레코드(record)는 C의 구조체(struct)처럼 설계를 간소화하는 강력한 방법입니다. 관련 신호들을 단일 타입으로 그룹화하면 코드 중복을 크게 줄이고 가독성을 높이며 여러 엔티티 간 포트 맵을 단순화할 수 있습니다. 레코드는 오프칩 메모리나 FIFO 연결 같이 크고 반복되는 인터페이스에서 빛을 발합니다. 같은 제어·데이터 신호 세트가 반복 등장할 때 레코드를 패키지에 한 번 정의하고 어디서나 재사용하면 엔티티 인터페이스가 깔끔해지고 향후 수정이 쉬워집니다. 다음 예제는 전용 패키지(example_record_pkg
VHDL 프로시저란? 프로시저는 VHDL에서 서브프로그램 패밀리에 속합니다. 재사용 가능한 로직을 캡슐화해 코드 중복을 줄이고 유지보수성을 높입니다. 한 번 정의하면 여러 프로세스나 아키텍처에서 호출해 일관된 동작을 보장합니다. 예제: std_logic_vector 1 증가시키기 다음 예제는 8비트 std_logic_vector를 받아 1을 더하고 결과를 반환하는 프로시저를 보여줍니다. 프로시저에는 테스트벤치 내 타이밍 제어를 설명하기 위한 1ns 대기도 포함돼 있습니다. library ieee; use ieee.std_logic_
Numeric_Std와 Std_Logic_Arith 패키지 파일 모두 활용 아래에서 가장 자주 쓰이는 VHDL 타입 변환을 확인할 수 있습니다. 기사는 두 섹션으로 나뉩니다: 첫 번째는 현대적인 numeric_std 패키지 기반 변환, 두 번째는 레거시 std_logic_arith 패키지 동등 변환. 많은 설계자가 여전히 std_logic_arith를 쓰지만, 업계 모범 사례는 명확성과 이식성 측면에서 numeric_std를 권장합니다. 많은 예제가 VHDL 속성 length를 사용하는데, 이는 벡터 폭 변경 시 코드가 자동 적응하
소개 VHDL 또는 Verilog로 FPGA에서 간단한 LED 블링커를 만드는 실습 가이드에 오신 것을 환영합니다. 이 예제는 동시 프로세스, 주파수 합성, 멀티플렉서 로직 등 25MHz 클록으로 구동되는 핵심 FPGA 개념을 보여줍니다. 프로젝트 개요 선택 가능한 4가지 블링크 주파수 생성: 100Hz, 50Hz, 10Hz, 1Hz. 각 주파수 50% 듀티 사이클 유지. LED_EN 스위치 어서트 시에만 LED 활성화. 두 독립 스위치로 원하는 주파수 선택. 하드웨어 배포 전 시뮬레이션 필수로 조기 오류 포착. 주파수 선택 진
VHDL Process 블록과 Verilog Always 블록 활용 VHDL의 Process 블록과 Verilog의 Always 블록은 하드웨어 동작을 기술하는 핵심 구조입니다. 두 가지 구별된 로직 유형을 모델링하는 데 쓰입니다: 조합 로직(Combinational logic) – 출력이 현재 입력에만 의존. 순차 로직(Sequential logic) – 출력이 현재 입력과 과거 상태에 의존, 보통 클록으로 구동. 많은 교과서가 단순한 조합 예제를 다루지만, 실전 설계는 레지스터, 상태 머신, 파이프라인 단계 구현을 위해 거의
VHDL(Very High Speed Integrated Circuit Hardware Description Language)은 FPGA와 ASIC 설계에 사용되는 두 가지 주요 하드웨어 기술 언어 중 하나입니다. 소프트웨어 언어에 비해 장황해 보일 수 있지만, 문법이 정밀하고 디지털 로직을 매우 높은 추상화 수준에서 기술하도록 설계되었습니다. VHDL 코드에 들어가기 전에 사용 맥락을 이해하면 도움이 됩니다. FPGA(Field-Programmable Gate Array)와 ASIC(Application-Specific Integ
VHDL