Technical Article
제품 및 Tools
자일링스의 단일 FPGA로 수백 개의 신호를 디지털화하는 방법
자일링스의 단일 FPGA로 수백 개의 신호를 디지털화하는 방법
2016-09-21
최신 자일링스(Xilinx®) FPGA는 LVDS(Low-Voltage Differential Signaling) 입력을 이용해 단 하나의 레지스터와 하나의 커패시터만 있으면 아날로그 입력 신호를 디지털화할 수 있다. 최신 자일링스 디바이스에는 수백 개의 LVDS 입력이 존재하기 때문에, 이론상 단일 FPGA로 수백 개의 아날로그 신호를 디지털화하는 것이 가능하다.
글/ 윌리엄 리차드(William D. Richard) 워싱턴대학 부교수, 미첼 마나(Mitchell Manar), 제레미 탱(Jeremy Tang) 워싱턴대학 학생
최근 우리 팀은 3.75MHz 중심 주파수와 5bit의 분해능으로 대역-제한 입력 신호를 디지털화할 수 있는 디자인 영역에 대한 연구를 진행했으며, 더불어 128-element 선형 초음파 어레이 변환기의 신호를 디지털화하기 위한 옵션에 대해서도 조사했다. 이 데모 프로젝트를 자세히 살펴보도록 하겠다.
2009년에 자일링스는 LogiCORE™ 소프트 IP 코어를 발표했는데, 이는 외부의 비교기와 하나의 레지스터, 하나의 커패시터를 이용해 최고 1.205kHz 주파수로 입력을 디지털화할 수 있는 ADC(Analog-to-Digital Converter)를 구현할 수 있다.[1] 외부 비교기 대신 FPGA의 LVDS 입력과 함께 델타 변조기 ADC 아키텍처를 이용하면, 단 하나의 레지스터와 하나의 커패시터 만으로 훨씬 높은 주파수로 아날로그 입력 신호를 디지털화할 수 있다.
ADC 토폴로지 및 실험용 플랫폼
그림 1. 1-채널 델타 변조기 ADC는 하나의 외부 레지스터와 하나의 외부 커패시터를 사용한다.
그림 1은 자일링스 FPGA 상의 LVDS 입력을 이용해 구현한 1-채널 델타 변조기 ADC[2] 블록 다이어그램을 나타낸 것이다. 여기에서 아날로그 입력은 비인버텅 LVDS_33 버퍼 입력을 드라이브하며, 입력 신호 범위는 기본적으로 0~3.3V이다. LVDS_33 버퍼의 출력은 입력 아날로그 신호 주파수 보다 훨씬 높은 클럭 주파수로 샘플링되며, LVCMOS33 출력 버퍼와 외부의 1차 RC 필터를 통해 인버팅 LVDS_33 버퍼 입력으로 피드백된다. 이 회로에서는 적절하게 선택된 클럭 주파수(F), 저항(R), 커패시턴스(C)로 정해진 피드백 신호가 입력 아날로그 신호를 추적하게 된다.
그림 2. 이 오실로스코프 플롯은 애질런트 33250A 펑션 제너레이터로 생성된 3.75MHz 입력 신호(노랑색: 채널 1)와 F= 240MHz, R=2K, C= 47pF인 경우의 피드백 신호(파랑색: 채널 2)를 보여준다. 텍트로닉스 DPO 3054 오실로스코프로 계산된 입력 신호의 푸리에 변환은 빨강색(채널 M)으로 나타내었다.
예를 들어 그림 2를 보면, F= 240MHz, R= 2K, C= 47pF인 경우 노랑색(채널 1)은 입력신호, 파랑색(채널 2)은 피드백 신호를 보여준다. 입력 신호는 애질런트(Agilent) 33250A 펑션 제너레이터의 200MHz, 12bit, 임의 출력 함수 기능을 이용해 생성된 것이다. 텍트로닉스(Tektronix) DPO 3054 오실레이터를 이용해 계산된 입력 신호의 푸리에 변환(Fourier Transform)은 빨강색(채널 M)으로 나타나 있다. 이러한 주파수에서 오실로스코프 프로브의 입력 커패시턴스(그라운드 이슈 포함)는 오실로스코프 트레이스에서 보여진 피드백 신호의 무결성을 저하시켰지만, 그림 2는 회로의 동작을 볼 수 있다.
블랙맨-누탈(Blackman-Nuttall) 윈도우를 적용해 그림 2에 나타낸 대역-제한 입력 신호는 1-Vpp 3.75MHz 사인파로 정의했다. 이론적으로 윈도우상의 신호와 관련된 노이즈 플로어는 중심 주파수 관련 진폭보다 낮은 거의 100dB이지만, 200MHz 샘플 주파수, 12bit 분해능의 애질런트 33250A 펑션 제너레이터의 결과는 가장 이상적인 데모 신호를 나타냈다. 중심 주파수가 거의 3.75MHz에 이르는 대부분의 초음파 변환기로 생성된 출력신호는 변환기의 기계적 특성상 대역-제한 신호이기 때문에 이 방식에 사용하기에 이상적인 신호 소스다.
8개의 R/C 네트워크와 입력 커넥터를 갖춘 자체 제작한 소형의 PCB 상에 탑재된 자일링스의 스파르탄-6(Spartan®-6) XC6SLX4 FPGA와 Digilent Cmod S6 개발 모듈[3]을 이용해 그림 2의 플롯을 얻었으며, 이 프로토타입 시스템은 최고 8개의 신호를 동시에 디지털화할 수 있다. 각 채널은 신호 생성기에서 동축 케이블로 적절하게 종단되도록 그라운드로 50ohms으로 병렬로 종단된다. 이러한 성능을 달성하기 위해 LVCMOS33 버퍼의 드라이브 강도는 24mA로, 슬루 레이트는 FAST로 설정했다는 것을 유의해야 하며, 이 VHDL 소스 예제는 그림 5에 정리했다.
그림 3. 이 그래프는 그림 2와 관련된 컨피규레이션으로 생성된 비트스트림의 푸리에 변환을 보여준다.
또한 이 자체 제작한 프로토타입 보드는 분석을 위해 호스트 PC로 패킷화된 직렬 비트스트림을 전송하는데 사용한 FTDI FT2232H USB 2.0 Mini-Module[4]을 지원한다. 그림 3은 그림 2의 아날로그 신호를 공급할 때 프로토타입 보드에서 생성된 푸리에 변환 비트스트림의 강도를 보여주고 있다. 240MHz 저조파 샘플링 주파수 관련 피크와 입력 신호 관련 3.75MHz에서의 피크 또한 분명하게 확인할 수 있다.
다수의 TAPS
비트스트림에 대역통과 FIR(Finite Impulse Response) 필터를 적용함으로써 아날로그 입력 신호(ADC 출력)의 N-bit 바이너리 표현을 생성할 수 있다. 디지털 비트스트림은 아날로그 입력 신호보다 훨씬 높은 주파수에 있기 때문에 다수의 탭(Tap)을 가진 FIR 필터를 사용해야 한다. 하지만 필터링된 데이터는 0과 1 값만 갖기 때문에 멀티플라이어는 필요하지 않다.(FIR 필터 계수에 애더만 추가)
그림 4. ADC 출력은 중심 주파수 3.75MHz에서 801-tap 대역통과 FIR 필터를 이용해 생성되었다.
그림 4에 나타난 ADC 출력은 호스트 PC에서 생성된 것으로, 중심 주파수 3.75MHz에서 801-tap 대역통과 필터를 사용했으며, 온라인에서 무료로 제공되는 TFilter FIR 디자인 툴[5]을 사용해 설계했다. 이 필터는 3MHz에서 4.5MHz 사이에서는 0.58dB의 리플과 2.5MHz ~ 5MHz 통과대역의 외부 감쇠는 36dB 이상을 나타내었다.
그림 4에 나타난 ADC 출력 신호는 분해능이 약 5bit에 이른다. 이는 결과적으로 오버샘플링 레이트로, 낮은 입력 주파수에 최적화된 설계를 통해 더 높은 분해능을 달성할 수 있다.
또한 그림 4의 ADC 출력 신호는 240MHz에서 심하게 오버샘플링되었으며, ADC 출력 대역폭을 감소시키는 데시메이션(Decimation)이 일어날 수 있다. 대역통과 필터와 데시메이션 블록의 하드웨어를 구현할 때는, 효과적인 15MHz(대역-제한 입력 신호의 최고 주파수보다 3배 빠름) 샘플링 레이트로 16인자를 다운시켜 데시메이션하는 경우, 모든 16번째 필터 출력 값만 계산하면 되며, 하드웨어 요건을 간소화할 수 있다.
그림 5는 그림 2에 나타낸 피드백 신호와 그림 3의 푸리에 변환과 관련된 비트스트림 데이터를 생성하기 위해 Digilent Cmod S6 개발 모듈을 사용한 VHDL 소스를 보여준다. LVDS_33 입력 버퍼는 직접 예시화했으며, 아날로그 입력 및 피드백 신호, sigin_p 및 sigin_n과 각각 연결되어 있다. 내부 신호 sig는 sigout을 생성하기 위해 LVDS_33 버퍼의 출력으로 드라이브되며, 암시된 플립-플롭으로 샘플링된다. 신호 sigout은 N-bit ADC 출력을 생성하기 위해 필터링된 직렬 비트스트림이다. 우리는 무료로 제공되는 자일링스의 ISE® 웹팩(Webpack) 툴을 사용하여 이 프로젝트를 구현했다.[6]
그림 5는 그림 1 회로와 관련된 VHDL 코드와 UCF 파일의 일부를 나타낸 것이다.
적은 컴포넌트 수
그림 5. VHDL 소스 코드와 UCF 파일 내용
우리가 기술한 ADC 아키텍처는 최근 몇몇 기사에서 델타-시그마 아키텍처로 부정확하게 언급되어 있다.[7] 하지만 진정한 델타-시그마 ADC는 여러 장점을 가지고 있으며, 이러한 접근방식의 단순성, 적은 컴포넌트 수는 일부 애플리케이션에서 상당한 이점을 가지고 있다. 그리고 LVDS_33 입력 버퍼는 비교적 높은 입력 임피던스를 가지고 있기 때문에, 여러 애플리케이션에서 프리앰프나 버퍼를 사용하지 않고도 센서 출력을 FPGA 입력과 직접 연결할 수 있다. 이는 여러 시스템에 상당한 혜택을 제공할 수 있다.
우리가 제안한 접근방식의 또 다른 장점은 중첩이 가능해 여러 직렬 비트스트림을 ‘혼합’할 수 있으며, 출력 신호를 복구하는데 단일 필터를 적용할 수 있다는 점이다. 예를 들어, 어레이-기반 초음파 시스템의 경우, 직렬 비트스트림은 초점 알고리즘을 구현하기 위해 시간을 지연할 수 있고, 그런 다음 벡터 패션(Vector Fashion)을 추가하고, 디지털화된 초점 초음파 벡터를 복구하기 위해 단일 필터를 사용할 수 있다.
ADC 출력을 생성하기 위해 FIR 필터를 이용한 것은 여기에서는 설명을 목적으로 단순하게 무차별적으로 접근한 방식이다. 대부분의 구현 작업에서 ADC 출력은 전통적인 적분기/로우패스 필터 복조기 토폴로지를 사용해 생성될 것이다.[2]
글/ 윌리엄 리차드(William D. Richard) 워싱턴대학 부교수, 미첼 마나(Mitchell Manar), 제레미 탱(Jeremy Tang) 워싱턴대학 학생
최근 우리 팀은 3.75MHz 중심 주파수와 5bit의 분해능으로 대역-제한 입력 신호를 디지털화할 수 있는 디자인 영역에 대한 연구를 진행했으며, 더불어 128-element 선형 초음파 어레이 변환기의 신호를 디지털화하기 위한 옵션에 대해서도 조사했다. 이 데모 프로젝트를 자세히 살펴보도록 하겠다.
2009년에 자일링스는 LogiCORE™ 소프트 IP 코어를 발표했는데, 이는 외부의 비교기와 하나의 레지스터, 하나의 커패시터를 이용해 최고 1.205kHz 주파수로 입력을 디지털화할 수 있는 ADC(Analog-to-Digital Converter)를 구현할 수 있다.[1] 외부 비교기 대신 FPGA의 LVDS 입력과 함께 델타 변조기 ADC 아키텍처를 이용하면, 단 하나의 레지스터와 하나의 커패시터 만으로 훨씬 높은 주파수로 아날로그 입력 신호를 디지털화할 수 있다.
ADC 토폴로지 및 실험용 플랫폼
그림 1. 1-채널 델타 변조기 ADC는 하나의 외부 레지스터와 하나의 외부 커패시터를 사용한다.
그림 1은 자일링스 FPGA 상의 LVDS 입력을 이용해 구현한 1-채널 델타 변조기 ADC[2] 블록 다이어그램을 나타낸 것이다. 여기에서 아날로그 입력은 비인버텅 LVDS_33 버퍼 입력을 드라이브하며, 입력 신호 범위는 기본적으로 0~3.3V이다. LVDS_33 버퍼의 출력은 입력 아날로그 신호 주파수 보다 훨씬 높은 클럭 주파수로 샘플링되며, LVCMOS33 출력 버퍼와 외부의 1차 RC 필터를 통해 인버팅 LVDS_33 버퍼 입력으로 피드백된다. 이 회로에서는 적절하게 선택된 클럭 주파수(F), 저항(R), 커패시턴스(C)로 정해진 피드백 신호가 입력 아날로그 신호를 추적하게 된다.
그림 2. 이 오실로스코프 플롯은 애질런트 33250A 펑션 제너레이터로 생성된 3.75MHz 입력 신호(노랑색: 채널 1)와 F= 240MHz, R=2K, C= 47pF인 경우의 피드백 신호(파랑색: 채널 2)를 보여준다. 텍트로닉스 DPO 3054 오실로스코프로 계산된 입력 신호의 푸리에 변환은 빨강색(채널 M)으로 나타내었다.
예를 들어 그림 2를 보면, F= 240MHz, R= 2K, C= 47pF인 경우 노랑색(채널 1)은 입력신호, 파랑색(채널 2)은 피드백 신호를 보여준다. 입력 신호는 애질런트(Agilent) 33250A 펑션 제너레이터의 200MHz, 12bit, 임의 출력 함수 기능을 이용해 생성된 것이다. 텍트로닉스(Tektronix) DPO 3054 오실레이터를 이용해 계산된 입력 신호의 푸리에 변환(Fourier Transform)은 빨강색(채널 M)으로 나타나 있다. 이러한 주파수에서 오실로스코프 프로브의 입력 커패시턴스(그라운드 이슈 포함)는 오실로스코프 트레이스에서 보여진 피드백 신호의 무결성을 저하시켰지만, 그림 2는 회로의 동작을 볼 수 있다.
블랙맨-누탈(Blackman-Nuttall) 윈도우를 적용해 그림 2에 나타낸 대역-제한 입력 신호는 1-Vpp 3.75MHz 사인파로 정의했다. 이론적으로 윈도우상의 신호와 관련된 노이즈 플로어는 중심 주파수 관련 진폭보다 낮은 거의 100dB이지만, 200MHz 샘플 주파수, 12bit 분해능의 애질런트 33250A 펑션 제너레이터의 결과는 가장 이상적인 데모 신호를 나타냈다. 중심 주파수가 거의 3.75MHz에 이르는 대부분의 초음파 변환기로 생성된 출력신호는 변환기의 기계적 특성상 대역-제한 신호이기 때문에 이 방식에 사용하기에 이상적인 신호 소스다.
8개의 R/C 네트워크와 입력 커넥터를 갖춘 자체 제작한 소형의 PCB 상에 탑재된 자일링스의 스파르탄-6(Spartan®-6) XC6SLX4 FPGA와 Digilent Cmod S6 개발 모듈[3]을 이용해 그림 2의 플롯을 얻었으며, 이 프로토타입 시스템은 최고 8개의 신호를 동시에 디지털화할 수 있다. 각 채널은 신호 생성기에서 동축 케이블로 적절하게 종단되도록 그라운드로 50ohms으로 병렬로 종단된다. 이러한 성능을 달성하기 위해 LVCMOS33 버퍼의 드라이브 강도는 24mA로, 슬루 레이트는 FAST로 설정했다는 것을 유의해야 하며, 이 VHDL 소스 예제는 그림 5에 정리했다.
그림 3. 이 그래프는 그림 2와 관련된 컨피규레이션으로 생성된 비트스트림의 푸리에 변환을 보여준다.
또한 이 자체 제작한 프로토타입 보드는 분석을 위해 호스트 PC로 패킷화된 직렬 비트스트림을 전송하는데 사용한 FTDI FT2232H USB 2.0 Mini-Module[4]을 지원한다. 그림 3은 그림 2의 아날로그 신호를 공급할 때 프로토타입 보드에서 생성된 푸리에 변환 비트스트림의 강도를 보여주고 있다. 240MHz 저조파 샘플링 주파수 관련 피크와 입력 신호 관련 3.75MHz에서의 피크 또한 분명하게 확인할 수 있다.
다수의 TAPS
비트스트림에 대역통과 FIR(Finite Impulse Response) 필터를 적용함으로써 아날로그 입력 신호(ADC 출력)의 N-bit 바이너리 표현을 생성할 수 있다. 디지털 비트스트림은 아날로그 입력 신호보다 훨씬 높은 주파수에 있기 때문에 다수의 탭(Tap)을 가진 FIR 필터를 사용해야 한다. 하지만 필터링된 데이터는 0과 1 값만 갖기 때문에 멀티플라이어는 필요하지 않다.(FIR 필터 계수에 애더만 추가)
그림 4. ADC 출력은 중심 주파수 3.75MHz에서 801-tap 대역통과 FIR 필터를 이용해 생성되었다.
그림 4에 나타난 ADC 출력은 호스트 PC에서 생성된 것으로, 중심 주파수 3.75MHz에서 801-tap 대역통과 필터를 사용했으며, 온라인에서 무료로 제공되는 TFilter FIR 디자인 툴[5]을 사용해 설계했다. 이 필터는 3MHz에서 4.5MHz 사이에서는 0.58dB의 리플과 2.5MHz ~ 5MHz 통과대역의 외부 감쇠는 36dB 이상을 나타내었다.
그림 4에 나타난 ADC 출력 신호는 분해능이 약 5bit에 이른다. 이는 결과적으로 오버샘플링 레이트로, 낮은 입력 주파수에 최적화된 설계를 통해 더 높은 분해능을 달성할 수 있다.
또한 그림 4의 ADC 출력 신호는 240MHz에서 심하게 오버샘플링되었으며, ADC 출력 대역폭을 감소시키는 데시메이션(Decimation)이 일어날 수 있다. 대역통과 필터와 데시메이션 블록의 하드웨어를 구현할 때는, 효과적인 15MHz(대역-제한 입력 신호의 최고 주파수보다 3배 빠름) 샘플링 레이트로 16인자를 다운시켜 데시메이션하는 경우, 모든 16번째 필터 출력 값만 계산하면 되며, 하드웨어 요건을 간소화할 수 있다.
그림 5는 그림 2에 나타낸 피드백 신호와 그림 3의 푸리에 변환과 관련된 비트스트림 데이터를 생성하기 위해 Digilent Cmod S6 개발 모듈을 사용한 VHDL 소스를 보여준다. LVDS_33 입력 버퍼는 직접 예시화했으며, 아날로그 입력 및 피드백 신호, sigin_p 및 sigin_n과 각각 연결되어 있다. 내부 신호 sig는 sigout을 생성하기 위해 LVDS_33 버퍼의 출력으로 드라이브되며, 암시된 플립-플롭으로 샘플링된다. 신호 sigout은 N-bit ADC 출력을 생성하기 위해 필터링된 직렬 비트스트림이다. 우리는 무료로 제공되는 자일링스의 ISE® 웹팩(Webpack) 툴을 사용하여 이 프로젝트를 구현했다.[6]
그림 5는 그림 1 회로와 관련된 VHDL 코드와 UCF 파일의 일부를 나타낸 것이다.
적은 컴포넌트 수
그림 5. VHDL 소스 코드와 UCF 파일 내용
우리가 기술한 ADC 아키텍처는 최근 몇몇 기사에서 델타-시그마 아키텍처로 부정확하게 언급되어 있다.[7] 하지만 진정한 델타-시그마 ADC는 여러 장점을 가지고 있으며, 이러한 접근방식의 단순성, 적은 컴포넌트 수는 일부 애플리케이션에서 상당한 이점을 가지고 있다. 그리고 LVDS_33 입력 버퍼는 비교적 높은 입력 임피던스를 가지고 있기 때문에, 여러 애플리케이션에서 프리앰프나 버퍼를 사용하지 않고도 센서 출력을 FPGA 입력과 직접 연결할 수 있다. 이는 여러 시스템에 상당한 혜택을 제공할 수 있다.
우리가 제안한 접근방식의 또 다른 장점은 중첩이 가능해 여러 직렬 비트스트림을 ‘혼합’할 수 있으며, 출력 신호를 복구하는데 단일 필터를 적용할 수 있다는 점이다. 예를 들어, 어레이-기반 초음파 시스템의 경우, 직렬 비트스트림은 초점 알고리즘을 구현하기 위해 시간을 지연할 수 있고, 그런 다음 벡터 패션(Vector Fashion)을 추가하고, 디지털화된 초점 초음파 벡터를 복구하기 위해 단일 필터를 사용할 수 있다.
ADC 출력을 생성하기 위해 FIR 필터를 이용한 것은 여기에서는 설명을 목적으로 단순하게 무차별적으로 접근한 방식이다. 대부분의 구현 작업에서 ADC 출력은 전통적인 적분기/로우패스 필터 복조기 토폴로지를 사용해 생성될 것이다.[2]
- 적용분야 :
- Automotive, Smarter Networks, Wired Communications, Wireless Communications
- 관련제품 :
- SDAccel, MicroBlaze, Artix-7, UltraScale, Vivado Design Suite, Spartan-3A, Spartan-6, Virtex-4, ISE, EDK, JESD204B, EasyPath, ZYNQ, SDSoC, Kintex-7, Spartan-3E, Virtex-5, Virtex-7, Virtex-6