Altera Design Contest 수상팀 논문 FPGA를 이용한 무선 빔프로젝터 Altera Design Contest 수상팀 논문 FPGA를 이용한 무선 빔프로젝터
김재호 2014-11-26 18:29:40

본 작품을 이용하면 빔프로젝터 시스템을 구현할 때 추가적인 영상 케이블을 연결할 필요가 없으며 전원 케이블 하나만 연결한 상태에서 시스템을 구축할 수 있다는 장점이 있
다. 또한 영상 출력의 형태는 VGA이므로 홈 오토메이션 등의 근거리 네트워크를 구축할 수 있으며 빔프로젝터 뿐 아니라 TV나 LCD 모니터로 영상을 출력할 수 있으므로 무선영상 수신TV로 이용하는 등 시스템의 적용범위가 매우 넒은 범용적인 모듈이다.
수상팀/서울과학기술대학교, 김상돈, 권오성, 신정우
지도교수/이승은 교수 

 

디자인 소개

본설계는 FPGA를 이용한 빔프로젝터용 무선 영상수신장치로써 Host PC(Notebook, Desktop)의 무선통신 장치에서 전송된 영상데이터를 수신하고 이를 빔프로젝터로 출력하는 기능을 수행한다.
사전조사에서 무선 LAN을 사용하는 무선 빔프로젝터 제품이 있는 것으로 조사되었으나, 빔프로젝터를 포함한 네트워크를 구성하여야 하므로 무선 공유기 등 추가적인 장치가 요구되고 IP접속을 필요로 하기 때문에 IP를 알아야 하며 사용하기 번거롭다는 단점이 있다. 또한 높은 해상도의 이미지, 동영상을 전송할 때 수 Mb의 대역폭이 요구되지만 무선랜은 네트워크 상태에 따라 데이터 전송 속도가 가변적이므로 끊김현상 등이 발생할 수 있는 문제점이 있다. 따라서 기존 제품은 낮은 해상도의 영상출력만을 지원하고 있으며 널리 상용화되지 못하였다.

 

본 설계에서는 기존 문제점을 해결하기 위하여 블루투스를 이용한 1:1 연결방식을 제안하며 끊김없는 영상을 재생하기 위한 채널을 확보한다. 블루투스 장치의 전송속도는 최근 규격인 블루투스 v4.0에서 24Mbps까지 지원되며 영상 전송에 충분한 속도를 나타낸다. 그러나 시중에 많이 보급되어 있는 노트북의 블루투스 장치는 블루투스 v2.0이며 2.1Mbps의 전송속도만을 지원하므로 원활한 영상 전송을 위한 추가적인 방법이 요구된다. 따라서 Host PC에서는 영상 데이터를 압축하여 전송하며, 이미지 데이터를 수신하는 FPGA에서 영상을 병렬로 압축해제한다. 결과적으로 낮은 전송속도에서도 원활한 영상 전송이 가능하며 상위 버전의 블루투스장치를 이용할 경우 더 높은 해상도의 영상 출력까지 지원할수 있는 장점을 가진다.

 

영상 포맷의 압축방식은 Run Length Encoding, LZ77 등이 이용될 수 있으며 하드웨어의 요구사항에 따라 다른 압축방식이 사용될 수 있다. 추가적인 대역폭을 확보하기 위한 방법으로 화면분할 방식이 사용될 수 있으며 디스플레이되는 화면을 일정 영역으로 분할함으로써 압축 효율을 높일 수 있는 방법도 고려될 수 있다.
본 작품을 이용하면 빔프로젝터 시스템을 구현할 때 추가적인 영상 케이블을 연결할 필요가 없으며 전원 케이블 하나만 연결한 상태에서 시스템을 구축할 수 있다는 장점이 있다. 또한 영상 출력의 형태는 VGA이므로 홈 오토메이션 등의 근거리 네트워크를 구축할 수 있으며 빔프로젝터 뿐 아니라 TV나 LCD 모니터로 영상을 출력할 수 있으므로 무선 영상 수신TV로 이용하는 등 시스템의 적용범위가 매우 넒은 범용적인 모듈이다.

 

디자인의 기능


현재 사용되는 프로젝터는 전원을 공급하기 위한 전원선과 영상 데이터를 전송하기 위한 신호선을 필요로 한다.
전원은 별도의 선을 연결하여 공급받을 수 있으나 영상 신호선은 매번 화면을 출력하고자 하는 PC로 연결해야 하는 불편함이 따른다. 특히 프로젝터를 위한 별도의 PC가 준비되어 있지 않은 상황에서 불편함을 초래할 수 있다. 이러한 문제점을 해결하기 위하여 일반적인 노트북에 포함되어 있는 무선 데이터 연결기능으로 영상데이터를 전송하는 방법이 사용될 수 있다. 무선통신을 사용하는 경우 프로젝터에 쉽게 연결하여 영상데이터를 출력할 수 있다.

 

본 설계는 원거리에 있는 프로젝터 또는 모니터에서 영상 데이터를 무선으로 수신하기 위한‘블루투스 영상데이터 수신장치’를 구현한다. 블루투스는 두 기기간의 1:1 무선통신 채널을 구성하고 안정적인 속도로 데이터를 전송할 수 있으며 통신속도가 매우 빠르다. 무선으로 수신된 영상 데이터는 VGA Sync에 맞춰 출력되므로 빔프로젝터의 영상수신단자(VGA Port)로 입력되어 영상을 출력할 수 있다. 따라서 대형 화면을 출력하기 위하여 사용되는 프로젝터에서 VGA 케이블을 대체할 수 있는 수단으로 사용될 수 있으며 병원의 대기실이나 학교의 수업등에서 사용하는 대형 TV에 적용되어 화면을 원격으로 출력하기 위한 모니터 영상수신장치로써 사용할 수 있다. 또한 퍼미션의 문제를 제외한다면 스마트폰의 블루투스 장치를 이용하여 핸드폰의 영상을 출력하는 것도 가능하다.

 

구현 과정

(1) 블루투스 모듈 선정
이미지 데이터를 무선으로 송수신하기 위하여 블루투스 채널을 구현하여야 한다. 블루투스는 블루투스 3.0규격에서 최대 데이터 전송속도를 24Mbps까지 확장하였으며 블루투스 4.0 규격에서 저전력 시스템을 구현함으로써 활용범위가 매우 다양하도록 발전되었다. 그러나 실제 무선통신장치를 개발하는 것은 전파혼선등 문제점을 야기할 수 있으므로 전파인증을 통과해야 하는 등 제약이 따른다. 또한 블루투스 트랜시버는 아날로그 회로를 포함하므로 디지털 회로만을 구현할 수 있는 FPGA로 구현할 수 없다. 이러한 문제점을 해결하기 위해 상용 모듈을 사용할 수 있다. 모듈로 개발되어 사용할 수 있는 블루투스 제품의 무선통신 속도는 매우 빠른 편이지만 RS-232C와 같은 직렬통신으로 데이터를 전송할 때 병목현상이 발생하여 최대 전송속도가 제한된다.

Firmtech사의 FB155BC모듈은 블루투스 2.0규격을 지원하며 무선통신은 최대 2.1Mbps까지 지원한다. 블루투스 모듈에서 무선 수신된 데이터는 전압신호로 변환되며 RS-232C 통신규격을 이용하여 출력된다. 모듈에서 지원하는 RS-232C 통신의 최고속도는 230kbps이므로 최대 230kbps의 속도로 무선 통신채널을 구축할 수 있다.

 

(2) 직렬 데이터 수신채널 구현
FB155BC 블루투스 모듈을 사용하여 무선으로 수신된 데이터는 RS-232C통신으로 출력된다. FPGA에서는 데이터를 수신하기 위한 RS-232C 통신모듈이 구현되어야 한다. RS-232C는 다음과 같은 특성을 가진다. RS-232C는 데이터의 시작과 끝을 알리기 위한 Start bit와 Stop bit가 있으며 115200bps의 통신속도를 사용하는 경우 하나의 비트가 출력되는 시간은 1/115200[sec]와 같다. 따라서 Start bit와 Stop bit를 포함하여 1초에 115200bit를 전달할 수 있다는 것을 의미한다.

1.jpg

(3) 이미지 처리 시스템
수신된 이미지 데이터는 픽셀 주소에 맞게 Video를 출력하기 위한 모듈로 전송되어야 하며, JPEG 형태로 수신된 경우 이미지를 원래 이미지로 복원할 수 있어야 한다. 이러한 기능을 수행하기 위하여 MCU(Micro 컨트롤러 Unit)을 이용할 수 있다. FPGA에서 프로세서를 구현할 수 없는 경우 외부 프로세서를 이용할 수 있으나 FPGA에서 구현된 프로세서를 이용함으로써 불필요한 비용을 줄이고 효율적인 시스템을 구현할 수 있다. FPGA에서 구현될 수 있는 프로세서로써 Altera社에서는 Nios II 프로세서를 제공하고 있으며 QSys를 이용하면 개발환경을 빠르게 구축할 수 있다.

 

또한 MegaWizardPlug-In을 사용할 경우 ARM社에서 개발한 Cortex-M1프로세서 IP를 이용할 수 있다. 이러한 프로세서는 유료로써 제공되며 각각 사용료를 지불해야 한다. 라이센스가 없이 사용할 수 있는 코어로 OpenCores에서 개발 및 제공하는 OpenRISC를 사용할 수 있다. OpenRISC의 개발보드는 Altera 칩을 이용하므로 Altera FPGA에서 원활한 동작을 수행할 수 있음이 이미 확인되었다. 또한 FPGA에서 합성 가능하도록 설계된 IP를 사용할 수 있다.

모든 프로세서는 서로 다른 버스구조를 사용한다. Nios II는 AVALON 버스구조를 사용하며 하바드 아키텍처로 구현된다. Cortex-M1은 AMBA 버스를 사용하며 폰노이만 구조로 구현된다. OpenRISC는 Wishbone버스를 사용한다. 버스에 연결되는 주변기기를 설계하려면 미리 정의된 버스인터페이스를 준수하여 디자인하여야 한다. 주변기기는 데이터 입출력 및 메모리 제어기능을 수행하는 블록으로 구성될 수 있다.

 

(4) 처리된 이미지를 출력하기 위한 VGA 제어기 구현
VGA는 영상데이터를 출력하기 위한 아날로그 인터페이스이며 대부분의 모니터, 프로젝터 등 영상출력장치가 지원하고 있는 규격이다. 따라서 미리 정의된 해상도의 이미지를 출력하기 위한 Sync신호를 생성하는 모듈이 설계되어야 하며 Sync신호에 맞추어 저장된 픽셀 데이터를 출력함으로써 화면을 출력한다.
영상출력장치는 이미지 출력 버퍼를 가지고 있지 않으므로 정지화면을 출력하더라도 지속적으로 영상데이터를 입력받아야 한다. 따라서 FPGA에서 이미지 버퍼를 구현해야 한다. 이미지 데이터는 용량이 크기 때문에 외부메모리를 사용하여 저장되어야 하며 VGA 컨트롤러에 포함되어 설계된 비디오 SDRAM 컨트롤러를 이용할 수 있다.

 

성능 파라미터


(1)블루투스로부터 데이터 수신 속도(블루투스 모듈 속도에 제한되며 최대 속도 지원)
- 블루투스 전송대역폭: 최대 230,400bps
- FPGA 직렬통신 대역폭: 230,400bps
설계된 시스템은 블루투스 모듈로부터 최대 전송속도를 사용하여 수신된 이미지를 읽어올 수 있다. 그러나 실제 설계하려던 성능은 블루투스 무선대역폭을 모두 사용한 2.1Mbps 이상이었다. 이는 블루투스 모듈의 성능에 제약이 발생하는 것이므로 다른 블루투스 솔루션을 사용하여 대체하여야 한다.

 

(2) 이미지 처리능력
- RS-232C 데이터 입출력 버퍼: 8bit 8-Entry
- VGA 입출력 버퍼: 16bit 64-Entry, 32bit 64-Entry
50MHz로 동작하는 Cortex-M0 DS코어를 사용하여 이미지를 처리할 수 있으며 데이터 입출력구간에 병목현상이 발생하지 않도록 충분한 크기의 FIFO를 설계하여 구현하였음.


(3) 640x480 해상도의 1Frame 이미지 출력속도(모니터화면 주사율: 60Hz)
- Internal ROM을 사용한 동작결과: 0.475Hz
- NOR Flash Memory을 사용한 동작결과: 12Hz
이미지를 60Hz로 주사하면서 남는시간(Porch Time, Line Interval Time)동안 메모리에 기록된 이미지 1Frame을 변경하는데 걸리는 시간으로 측정하였으며 시스템의 RAM영역과 ROM영역의 속도에 따라 화면 변경속도도 매우 큰 차이를 보임.

 

디자인 설명


(1) 디자인의 전체 블록도
설계된 디자인은 Cortex-M0 DS 코어를 이용하였으며 AHB-Lite 버스인터페이스를 기반으로 한 주변기기를 설계하는 방식으로 진행되었다. 원활한 디자인을 위하여 FPGA에서 기본적으로 제공하는 내부 메모리와 PLL 등의 리소스를 사용하였고, 이외 주변기기는 모두 Verilog HDL로 기술되었다.

 

(2) 클럭 제어기 설계 - PLL
시스템이 구동되기 위한 메인 클럭을 생성할 수 있는 부분은 FPGA 내부의 PLL을 이용하였다. Altera Cyclone II FPGA에는 외부 클럭 소스를 입력으로 하여 사용하고자 하는 주파수를 만들 수 있는 PLL(Phase Lock Loop)이 포함되어 있다. 아날로그 소자인 PLL을 쉽게 제어할 수 있도록 Altera에서는 MegaWizard Plugin을 통하여 “ALT_PLL”IP를 제공하며 원하는 주파수를 생성하고 사용할 수 있도록 한다. PLL의 입력 클럭으로써 외부 오실레이터 주파수인 50MHz를 사용할 수 있다. 설계에서 Cortex-M0 DS의 최대 동작주파수가 50MHz이므로 입력과 출력 주파수의 비율을 1:1로 설정하였으나 상황에 따라 RTL 디자인에 변화를 주지 않고 주파수만 조절할 수 있으며, 메인 주파수 하나만 생성하는 것이 아니라 VGA를 제어하기 위한 주파수를 생성할 수도 있다.

 

(3) Cortex-M0 디자인Start
Cortex-M0는 기존의 8비트 마이크로프로세서를 대체할 수 있도록 설계된 32비트 기반의 저전력 프로세서이며 합성에 필요한 게이트 리소스도 매우 적은 편이라는 특징이 있다. Coretex-M0 DS코어는 디자인을 공개하지 않지만 FPGA에서 합성하여 사용할 수 있도록 Netlist형태로 제공된다. 기반이 되는Cortex-M0와 비교하여 곱셈기의 사용, 인터럽트 벡터 크기, 저전력 모드 사용 등 일부 옵션이 제한되어 있으나 기능적으로는 Cortex-M0와 거의 유사한 특징을 가진다. 또한, MegaWizard Plugin에서 유료로 제공하고 있는 Cortex-M1과 성능 파라미터가 거의 비슷하므로 라이센스가 있는 경우 메인 프로세서만 Cortex-M1으로 대체될 수 있다. Cortex-M1은 FPGA에서 최적화 되어 사용할 수 있도록 개발된 제품이며 Cortex-M0 제품군과 성능이 비슷하다. 따라서 개발자의 개발환경에 맞도록 시스템을 변형하는 것도 가능하다.

 

(4) AMBA(AHB-Lite) 버스인터페이스 설계
AHB-Lite버스는 하나의 마스터만 사용할 수 있도록 설계된 ARM사의 AMBA버스규격 중 하나이다. 하나의 마스터만 사용하므로 불필요한 신호를 제거하여 효율적으로 리소스를 사용할 수 있도록 설계되었으며 버스 중재를 담당하는 Arbiter가 포함되어 있지 않다. 이외 특징은 AHB 버스와 같으며 코어(마스터)의 명령은 어드레스 위상과 데이터 위상으로 나뉘어 전달된다. 어드레스 위상에서 슬레이브로 접근하기 위한 어드레스정보와 슬레이브 컨트롤 신호를 보낸다. 따라서 슬레이브는 읽기 동작인지, 쓰기 동작인지, 접근하려는 데이터 크기, 접근방식, 주소 등에 대한 정보를 수신하여 동작을 준비할 수 있다.데이터 위상에서는 미리 송신된 제어신호에 따라 데이터를 접근할 수 있다.


읽기동작은 어드레스 위상에서 H쓰기 신호를 로우로 처리함으로써 읽기 명령을 전달하고, 한 클럭만에 읽기동작이 끝나는 경우 데이터 위상에서 H읽기Y를 하이로 유지하여 데이터 위상이 끝난 후 마스터에서 데이터를 읽어가도록 할 수 있다. 그러나 데이터를 읽는데 여러 클럭이 필요한 경우 H읽기Y신호를 로우로 제어함으로써 데이터를 읽어오기 위한 시간을 확보할 수 있다. 쓰기 동작은 어드레스 위상에서 H쓰기신호를 하이로 처리함으로써 실행될 수 있다. 한 클럭만에 데이터를 쓰는 동작이 완료되는 경우 데이터 위상에서 H읽기Y신호를 하이로 유지하면서 마스터로부터 데이터를 받아 쓰기 동작을 수행한다. 그러나 데이터를 쓰는 동작에 여러 클럭이 소요되는 경우 H읽기Y신호를 제어하여 여러 클럭동안 데이터 위상을 유지되도록 할 수 있다.
Verilog HDL로 직접 설계된 모든 주변기기는 이와같은 인터페이스를 위하여 AHB-Lite BIU을 포함하여 설계되었다.

 

(5) 디코더, MUX 설계
Cortex-M0 DS는 32비트 프로세서로써 MMU를 포함하지 않으므로 최대 4GB의 메모리영역을 가진다. 메모리 영역은 여러 슬레이브에 할당되어 있으며, 할당된 주소영역에 접근하기 위한 방법으로 디코더와 MUX를 사용하여야 한다. 그림 3은 AHB-Lite 버스에서 마스터와 슬레이브를 연결하기 위한 디코더와 MUX의 블록도를 나타낸다.

2.jpg

3.jpg

 

디코더는 마스터로 부터 주소를 수신하고 해당 주소영역의 슬레이브로 선택 신호를 보낸다. 따라서 슬레이브는 버스로부터 신호를 수신하고 동작을 수행할 수 있는 상태가 된다. 또한 멀티플렉서를 제어하는 MUX_SEL신호를 내보냄으로써 슬레이브의 응답을 마스터로 전달하기 위한 경로를 생성한다. 디코더에서 HADDR을 해석하는 방법은 다음과 같이 Verilog HDL로 기술될 수 있다.
만약 마스터가 모든 슬레이브와 1:1로 연결되어 응답을 수신하는 경우 마스터 회로가 복잡해지게 된다. AHB MUX는 이러한 문제점을 해결하고 마스터와 슬레이브를 1:N으로 연결하기 위하여 사용된다. AHB MUX는 모든 슬레이브로부터 생성된 응답신호를 수신하며 현재 동작중인 슬레이브의 응답신호를 마스터와 연결한다. 현재 동작중인 슬레이브를 구분하기 위하여 디코더에서 주는 신호를 이용할 수 있다.

 

(6) GPIO 설계
GPIO 제어모듈은 AMBA BUS의 가장 간단한 주변기기로써 LED를 제어하거나 스위치를 통한 입력을 받아들일 수 있다. LED를 제어하기 위하여 구현된 하드웨어는 다음 그림과 같다. 어드레스 위상에서 전달된 명령을 저장하기 위한 F/F과 데이터를 입출력하기 위한 F/F으로 간단하게 구 성 된다.

LED인 경우 저장된 데이터를 출력할 수 있고, 스위치의 경우 입력을 받아들여 F/F에 저장할 수 있다.

4.jpg

 

 

(7) 리셋 제어기 설계

디지털 하드웨어는 전원 인가 후 바로 사용할 수 있는 장치가 있는 반면 SDRAM이나 LCD 모듈처럼 전원을 인가한 후 일정시간 기다려야 하는 장치도 있다. SDRAM은 이러한 전원 지연 이외에도 동작모드를 결정하기 위하여 추가적인 초기화 과정이 필요하므로 모든 시스템이 전원인가와 동시에 동작할 수 없다. 따라서 리셋을 제어하기 위한 회로가 요구된다. 리셋 컨트롤러는 AMBA버스와 무관하게 동작하며 Counter를 사용하여 일정 시간이 지난 후 차례대로 리셋을 해제하는 방식으로 구현하였다. 다음 표는 시스템 초기화 과정에 따른 리셋 컨트롤 타이밍을 나타낸다.

1-1.jpg

 

(8) 디버그 모듈 설계
설계에 사용된 코어는 디자인 스타트 버전이므로 프로세서의 동작을 검증하기 위한 JTAG 및 디버그 채널이 구현되어 있지 않다. 따라서 코어에 포함된 레지스터를 세그먼트를 이용해 확인할 수있도록 간단한 디버그 채널을 구현하였다. 보드에서 이용할 수 있는 세그먼트로 어느 정도 동작을 예측하는 데 도움이 될 수 있으나, 자세한 프로세서의 정보를 확인할 수 없다. 따라서 더 효율적인 디버그를 수행할 필요가 있으며 알테라에서 제공하는 Signal TAP II를 이용하였다. 이 기능은 라이센스 비용 없이 사용할 수 있으며 Web Edition에서도 Talk-Back 옵션을 허용하면 사용할 수 있다.

5.jpg


그림 6은 Signal TAP II를 실행한 화면이다. 일반적인 로직 아날라이저를 사용하는 것과 유사하며 쉽게 사용할 수 있다.

 

6.jpg


(1)먼저 데이터를 관측하기 위한 클럭을 설정한다.

(2) 몇 개의 데이터를 샘플링할 것인지 설정한다.
(3) 샘플링 하고자 하는 데이터를 선택한다. 샘플링 데이터는 F/F에 저장되는 값만 선택할 수 있으며 와이어로 흘러가는 데이터는 캡처할 수 없다.
(4) Signal TAP II에 대한 로직을 생성하기 위하여 다시 합성한다.
(5) FPGA 보드에 다운로드하고 JTAG를 연결한다.
(6) 신호를 캡처하기 위한 트리거 조건을 설정하고 시작한다.

 

위와 같은 과정을 통하여 실제 보드에서 동작하는 신호를 실시간으로 샘플링 할 수 있으므로 Verilog HDL로 설계된 모듈이 어떻게 동작하고 있는지 확인할 수 있으므로 매우 유용하다. 단, 샘플링 된 신호를 저장하기 위한 메모리 영역과 신호를 샘플링하기 위한 하드웨어를 구현하는데 FPGA의 리소스를 사용하므로 설계된 디자인을 제외하고 로직 및 메모리의 추가적인 리소스가 충분히 확보되어야 한다. 와이어로 흘러가는 데이터를 관측하기 위한 방법으로 와이어의 신호를 임시로 저장하는 F/F을 추가하는 것인데, 이는 디자인을 매번 수정해야 하므로 번거로우며 최종 디자인과 완전히 일치하는 결과를 보장하지 못할 수 있으므로 시험적인 단계에서 사용하도록 한다.

 

(9) 메모리 제어기의 설계
폰노이만 아키텍쳐로 디자인된 MCU는 명령어 BUS와 데이터 BUS를 공용으로 사용한다. 따라서 AHBLite BUS로부터 명령어를 읽어옴으로써 동작을 수행하도록 설계되어 있으며 수행 결과는 다시 AHB-Lite BUS를 통하여 메모리에 저장된다. 메모리 제어기는 코어가 접근하기 위하여 반드시 버스인터페이스를 준수하여 디자인되어야 하며, 프로그램 명령어를 저장하기 위한 ROM 영역과 실행 도중 변수를 저장하기 위한 RAM영역으로 구분되어야 한다.

 

(1)AHB 내부 RAM/ROM 컹트롤러
DE1에 적용된 Cyclone II FPGA(EP2C20F484C7)는 약 20KByte의 내부 메모리를 가지고 있으며 이는 시그널 TAP II와 같은 툴을 사용하였을 때 샘플링된 데이터가 저장되는 영역으로 사용될 수 있다. 그러나 디버깅 목적으로 메모리를 사용하지 않으면 사용자의 데이터를 저장하기 위한 용도로 사용할 수도 있으므로 편리하게 이용할 수 있다.
따라서 ARM 프로세서를 동작시키기 위한 ROM 영역 및 RAM영역으로도 내부 메모리를 사용할 수 있다. 내부 메모리를 이용하는 경우 다음과 같은 장점을 가진다.

 

ⓐ 데이터 폭이 정해진 외부 메모리와 달리 원하는 데이터 폭을 생성할 수 있음
ⓑ 데이터를 읽고 쓰는 속도가 외부 메모리에 비하여 매우 빠름
ⓒ PCB 트레이스의 노이즈와 같은 영향을 받지 않으므로 안정적으로 동작시킬 수 있음

 

6-1.jpg


따라서 내부 메모리를 주메모리로 사용하는 경우는 시스템의 속도를 빠르게 만들거나 외부 메모리의 연결상태가 불안정한 경우 검증하기 위한 목적으로 사용할 수 있다. DE1보드에서 외부 NOR 플레시를 이용하여 ROM영역을 사용하는 경우보다 내부 ROM을 사용하면 프로세서의 처리량을 16배 이상 향상시킬 수 있다. 단, 용량이 외부 메모리에 비해 상당히 작은 편이므로 코드 사이즈가 큰 경우 사용하기 힘들다.


내부 메모리를 ROM영역으로 이용할 때 프로그램 명령어를 쓸 수 있는 방법은 여러가지가 있으나 신데시스과정에서 초기화 데이터를 넣는 방법으로 사용할 수 있다. 다음 코드는 내부 메모리를 hex파일로 초기화시킨 후 합성하기 위하여 사용되는 방법이다. 단, Quartus II 툴에서 intel hex 형식을 지원하지 않으므로 모든 hex파일형식을 사용할 수 있는 것은 아니며 hex파일 대신에 .mif (Memory Initialization File) 포맷을 이용할 수도 있다.

7.jpg

 

(2)AHB SRAM 컨트롤러
DE1 보드는 512KB 용량의 16bit 데이터 폭을 가지는 SRAM을 포함한다. 이는 20KB에 불과한 내부 메모리를 대신하여 ARM코어가 동작하기 위한 충분한 RAM영역으로 사용될 수 있다.

단, AHB-Lite 버스는 32bit 데이터 폭을 사용하므로 연속된 2개의 데이터를 읽어서 버스 인터페이스로 사용해야 한다. 따라서 32비트 데이터를 저장하기 위한 데이터 버퍼를 포함하여 디자인되어야 한다.

8.jpg

 

(3)AHB SDRAM 컨트롤러
SDRAM은 면적대비 용량이 매우 뛰어난 저장장치로써 DE1보드에서는 8MB의 SDRAM을 포함하고 있다. 데이터 폭은 SRAM과 마찬가지로 16bit이므로 32bit 버스에서 이용하기 위하여 Burst Length를 2로 설정하여 사용할 수 있다. 따라서 한 번의 읽기 또는 쓰기 명령으로 2번 연속 읽기/쓰기 동작을 수행하도록 하였다.

9.jpg

 

SDRAM의 버스트 모드 선택은 메모리 초기화 과정에서 이루어지며 다음 그림과 같이 초기화 동작을 위한 파라미터를 미리 설정하여 이용한다. 따라서 현재 디자인은 합성된 다음 지정된 모드로 자동으로 초기화를 진행하도록 설정되어 있으며 다시 합성하기 전까지 SDRAM의 동작모드를 수정하는 것은 불가능하므로 사용자가 임의로 바꿀 수 없도록 하였다.

10.jpg

 

(4)AHB Flash 컨트롤러
NOR 플래시는 지우는데 상당한 시간이 걸리며 쓰기 횟수도 제한되어있는 메모리이지만 비휘발성의 특성을 가지고 있으며 랜덤 엑세스하기 쉬우므로 주로 프로세서의 ROM영역으로써 사용된다. DE1 보드에서 사용하는 플래시 메모리는 8bit 대역폭을 가지므로 32비트 버스에서 사용하기 위하여 4개의 연속된 주소로부터 데이터를 읽는 동작을 수행해야 한다.

11.jpg

NOR 플래시는 페이지 모드 액세스를 지원하며 한 번의 명령으로 최대 4개의 연속된 주소로부터 데이터를 읽는 동작을 수행할 수 있다.

12.jpg

(10) RS-232C 컨트롤러 설계
RS-232C 통신은 8비트 직렬통신을 위한 규격으로써 과거 모뎀에서부터 현재의 PC까지 폭넓게 사용된다. RS-232C 컨트롤러를 이용하여 PC와 FPGA 시스템 사이에서 데이터를 주고받는 통신채널을 구성할 수 있고 블루투스 모듈과 통신하여 무선으로 데이터를 송수신 할 수 있다. 그림 13은 블루투스 장치로부터 수신된 데이터를 캡쳐하는 방식을 나타낸다.
직렬 데이터는 미리 정의된 속도로 전송되며 리시브모듈에서 데이터 신호를 16분주하여 수신한다. 16분주된 데이터의 중간에서 3개의 데이터를 샘플링 하며 3개 중 가장 많이 샘플링된 신호를 데이터로 간주하여 처리한다.

13.jpg

 

3개의 데이터를 샘플링하여 처리하기 위한 상태도 및 설계된 하드웨어는 그림 14, 15와 같다. 실제로 RS-232를 사용하여 데이터를 송수신하는 과정은 MCU의 동작속도에 비하여 매우 느리므로 읽기와 쓰기를 위한 8bit FIFO를 두었으며 데이터를 원활하게 송수신할 수 있도록 하여 시스템의 성능을 향상시킬 수 있다.

 

14.jpg

 

(11) VGA 제어기 설계
VGA 제어기는 AHB-Lite 버스 인터페이스 유닛, 싱크를 맞추기 위한 비디오 싱크 제너레이터 유닛, 픽셀 컬러를 제어하기 위한 픽셀 컨트롤러 유닛, 이미지 프레임을 저장하기 위한 비디오 메모리 컨트롤러로 구성된다.

16.jpg
LCD에 이미지를 출력하기 위하여 HSYNC (Horizontal Sync), VSYNC(Virtical Sync) Signal이 필요하며 이미지 출력 해상도에 따라 신호가 결정된다. 그림 17은 영상을 출력하기 위한 타이밍도를 보여준다. VSYNC는 이미지 1Frame을 출력하는 동안 High로 유지되며, HSYNC는 1 Line을 출력하는 동안 하이로 유지된다. T2 및 T4의 시간은 LCD 출력해상도에 따라 결정된다. 실제 LCD에 출력할 때는 VSYNC에 Back porch, Front porch Timing을 고려해야 하며 해상도에 따라 시간이 다르다.

 

픽셀은 HSYNC와 VSYNC가 모두 High인 구간에서 출력된다. PCLK은 픽셀데이터가 출력되는 클럭으로써 640x480 이미지를 출력하는 경우 25MHz가 사용된다. 이미지 출력라인과 물리적으로 연결되는 포트가 없으므로 FPGA 내부에서만 이용되며 PCLK에 맞춰 데이터를 출력한다.

 

17.jpg

 

정지화면을 출력할 때 MCU에서 데이터를 계속 보내 줄 수 없으므로 최소 1Frame의 이미지를 저장하기 위한 이미지 버퍼가 필요하다. 일반적으로 속도가 빠른 SRAM 또는 면적대비 용량이 저렴한 DRAM을 사용한다. DE1 보드에는 512KB의 SRAM과 8MB의 SDRAM이 연결되어 있으므로 이미지 버퍼로써 사용할 수 있다. 각 메모리는 16bit 데이터폭을 가지므로 1픽셀당 16비트 데이터를 사용하도록 하였으며 RGB565 포맷으로 저장된다.
해상도 640x480의 이미지를 저장할 때 16bit pixel data 를이용하면최소요구되는메모리크기는다음과 같다.

 

640*480*16bit=600Kbyte


DE1의 VGA 출력은 [RGB=4,4,4] bit이므로 실제 출력할 수 있는 픽셀 데이터는 12bit width인데 픽셀 데이터를 16bit로 저장하는 것은 용량을 낭비하는 것처럼 보일 수 있다. 그러나 12bit 픽셀 데이터를 연속적으로 저장한 상태에서 임의의 1픽셀 데이터를 바꾸려는 동작을 수행하는 동작을 수행할 때 인접한 픽셀값이 바뀌지 않도록 원래 저장된 16비트를 읽어오고 다시 바꾸려는 이미지 데이터만 변경해서 재기록하는 번거로움이 발생한다. 이는 이미지 처리가 복잡해지며 전체 시스템의 처리량이 떨어지는 결과를 초래하기 때문에 16비트씩 픽셀 데이터를 저장하도록 하였다.

 

결과적으로 SRAM을 이미지 버퍼로 이용하는 경우 DE1에서 지원하는 512KB 메모리가 부족하므로 화면 일부가 표시되지 않는 문제점을 수반하는 반면 8MB의 넉넉한 SDRAM을 MCU의 메인 메모리로 사용할 수 있다. uClinux의 운영체제가 동작하기 위해서는 최소 8MB의 메모리가 필요하므로 운영체제를 사용해서 기능을 확장하려고 할 때 이미지 출력 해상도가 더 줄어들어야 한다. SDRAM을 이미지 버퍼로 이용하는 경우 8MB의 충분한 용량을 지원하므로 Full HD 해상도 이미지까지 저장할 용량을 확보할 수 있다. 실제 Full HD 이미지를 출력하기 위해서 매우 빠른 속도로 데이터를 읽어야 하지만 Cortex-M0의 최대 동작속도가 50MHz이므로 이미지 출력 해상도에 제한이 발생한다. 이미지 버퍼로 사용하기 위한 SDRAM 컨트롤러는 버스트 읽기/싱글 쓰기 모드로 동작하며 읽기 버스트 길이는 8로 설정하였다. 원활한 이미지 출력을 위하여 픽셀 컨트롤러로 데이터를 전달하기 위한 FIFO를 64 Entry로 구성하였으며 SDRAM으로부터 데이터를 읽어 저장한다.

 

따라서 SDRAM이 리프레시 동작을 수행하거나 다른 동작을 수행하더라도 안정적으로 화면을 출력할 수 있다. 픽셀 데이터가 출력됨으로써 FIFO의 데이터가 빠지면 SDRAM에서 다시 읽어서 FIFO를 채운다. 또한 이미지 출력이 끊기지 않도록 하기 위해 읽기 명령을 쓰기 명령보다 우선시하여 받아들이도록 작성하였으며 FIFO에 충분한 데이터가 저장되어 있는 Interval Time을 이용하여 SDRAM에 데이터를 쓸 수 있다. 주로이미지 데이터를 출력하지 않는 T1, T2, T3, T4의 시간에 쓰기동작이 수행된다. AHB-Lite 버스에서 데이터를 쓰려고 할 때 이미지를 출력하는 중인 경우 쓰기동작에 상당한 시간이 소요될 수 있으므로 MCU의 원활한 동작을 위하여 AHB버스와 메모리 제어기 사이에 FIFO를 배치하였으며 메모리에 쓸 데이터를 저장하고 있다가 메모리가 사용 가능할 때 데이터를 쓸 수 있다.

 

결론

설계가 완료된 디자인을 합성하였을 때 DE1 FPGA보드의 리소스 사용량이 그림 20에 표시되었다.
- Combinational Functions: 51%
- Dedicated logic registers: 25%


작은 디자인이므로 대부분의 리소스는 데이터 흐름을 원활하게 하기 위한 FIFO에서 소비한다. FIFO를 내부메모리로 대체함으로써 리소스를 더 확보할 수 있다. 본 설계를 진행하면서 Altera의 설계툴을 오랜 시간 사용하게 되었다. QSys나 SOPC를 사용해서 디자인하면 간단하게 완성할 수 있는 간단한 수준의 시스템이지만 직접 RTL을 설계하는 과정에서 어려움이 많이 발생하였다. 이러한 과정 중 디버그 기능도 지원되지 않는 ARM코어를 사용하다보니 Signal TAP II와 같은 디버그 툴로 대부분 디버깅을 하게 되었으며 효율적으로 문제점을 찾고 해결할 수 있었다. 실제 RTL을 개발하는 개발자로써는 QSys나 SOPC를 이용하여 개발하는 경우보다 이처럼 직접 모듈을 기술하는 경우가 대부분일 것이다.


Quartus II 프로그램을 사용하면서 느낀 부분은 여러가지 장점과 단점이 있었다. 먼저 Altera의 Quartus II 툴은 설계에 있어서 매우 유연하였다. 예를 들어보면 하나의 “always@(*)”를 기술할 때 Non-blocking Assignment (=)와 Blocking Assignment(<=)를 섞어 사용하게 되는 실수를 겪은 적이 있다. 이때 Quartus II는 이를 경고 (warning)로 처리하며 올바른 합성결과를 만들어낼 수 있었으나 다른 툴을 사용했을 때 오류(Error)로 처리하여 합성자체가 안 되는 결과를 내게 되었다.


또한 오류 및 경고가 발생했을 때 상황에 대한 목록이 구체적으로 나오며, 상세한 도움말이 제공되므로 별도의 포럼을 찾을 필요 없이 바로 문제를 해결할 수 있었다.

Hierarchy 구조를 사용하여 시스템을 디자인 할 때 상위모듈과 하위모듈의 연결이 잘못되었거나 bit 폭이 맞지 않으면 연결 실수를 상세하게 알려주므로 문제를 빠르게 해결할 수 있었다. 단, 다른 경고 메시지와 달리 콘솔 창에서 내용을 출력해주지 않으므로 Compilation Report를 찾아가서 일일이 확인해야 하므로 다소 보기 불편한 점이 있었다. 또한 Quartus II는 컴파일 속도가 다른 FPGA 설계툴에 비해 빠른 편이었다. 그러나 서버에 설정해 놓은 Floating License를 받아 오도록 설정하면 라이선스를 획득하는 데만 5분 이상 시간이 소요되었으며 작은 디자인을 합성할 뿐인데 오히려 라이선스를 획득하는 시간이 더 길어지는 문제점이 발생하였다.

 

컴파일속도는 빠르지만 합성된 결과 파일들이 용량을 많이 차지하였으며, 여러 개의 프로젝트를 관리하는 입장에서는 하드디스크 사용량이 많아지게 되었다. Quartus II 설계툴의 MegaWizard Plug-in에서 IP를 불러오는 작업은 다른 툴에 비해 매우 빠르며 인터페이스가 매우 사용하기 쉽게 되어있어 PLL 제어장치를 생성하는데 있어서 편리하게 사용할 수 있었다.

이번 설계를 진행하면서 다른 RTL 설계툴보다 사용이 편리하고 Error/Warning을 적절히 처리해주며 동작속도가 매우 빠른 툴이라는 점을 느끼게 되었고 FPGA를 보다 편리한 환경에서 학습할 수 있는 계기가 되었다. 다만 이번 설계를 진행하면서 아쉬웠던 점은 DE1보드를 사용하여서 FPGA의 리소스를 넉넉하게 사용하지 못하였다는 점이었다. 이러한 제약조건 및 라이선스 문제 때문에 동작속도가 50MHz에 불과한 Cortex-M0 DS를 사용하여 메인 시스템을 디자인하게 되었는데 실제 설계를 진행하다보니 너무 제약사항이 많았다. Altera에서 제공하는 프로세서인 Nios II를 쓰면 동작속도가 최대 100MHz이므로 더 좋은 성능의 시스템을 구축할 수 있을 것이다.

 

19.jpg

 

<반도체네트워크 11월>

디지털여기에 news@yeogie.com <저작권자 @ 여기에. 무단전재 - 재배포금지>