2010년 5월 26일 수요일

액텔, 하드형 ARM 코어 통합한 플래시 기반 FPGA 선보여

EDA/IC 설계

액텔, 하드형 ARM 코어 통합한 플래시 기반 FPGA 선보여

게재:2010년05월14일

Dylan McGrath
EE Times

Actel사가 임베디드 디자이너들의 폭 넓은 관심을 끌만한 중요한 발전이라고 밝힌 플래시 기반 FPGA(field programmable gate array) 제품군을 출시했다. 이 FPGA 패브릭은 하드형(hard) ARM Cortex-M3 프로세서로 구축된 완벽한 마이크로컨트롤러 서브시스템 및 프로그램 가능형 아날로그 블록과 통합되어 있다. SmartFusion 제품군의 첫번째 제품은 대량 생산 중으로 현재 이용 가능하다.

Actel사에 따르면, 디자이너들은 SmartFusion 디바이스를 통해 보드 레벨을 변경하지 않고도 하드웨어/소프트웨어 트레이드오프를 즉시 최적화시킬 수 있다고 한다. 프로세서와 필수 글루 로직을 한 디바이스에 제공함으로써 성능과 비용 및 풋프린트의 이점을 제공한다고 Actel사의 경영진들은 밝혔다.

“SmartFusion은 CPU 코어만이 아니라 완전한 마이크로컨트롤러 서브시스템을 갖추고 있다”고 Actel사의 세일즈 및 마케팅 VP인 Rich Kapusta 씨는 말했다. “최초로 성능에 대한 타협 없이 FPGA 및 마이크로컨트롤러를 일부 프로그램 가능형 아날로그와 통합했다.”

컨설팅 업체인 Silicon Insider사의 사장인 Jim Turley 씨에 따르면, 디자이너들은 약 10년 동안 프로세서들을 FPGA에 통합시키기 위해 노력해 왔지만 프로그램 가능형 패브릭과 프로세서 아키텍처가 조화되지 못하고 이 구성요소들 간의 통신이 느려짐으로써 그다지 큰 성공을 이루지 못했다고 한다. “Actel사는 SmartFusion을 통해 일반적인 ARM 프로세서와 FPGA 패브릭을 결합시켰을 뿐만 아니라 이 둘을 원활하게 통신할 수 있는 방식으로 통합시켰다”고 Turley 씨는 말했다.

SmartFusion은 2005년에 시장을 강타한 Actel사의 첫번째 혼성신호 FPGA인 Fusion에서 발전된 제품이다. Fusion 디바이스는 32비트 ARM Cortex-M1 등의 소프트 프로세서 코어를 통합할 수 있다.

Actel사의 마케팅 및 엔지니어링 수석 VP인 Fares Mubarak 씨는 Fusion이 시장에서 성공을 거두긴 했지만 Actel사는 타깃 어플리케이션의 폭을 보다 넓히고 싶어했다고 밝혔다. 이를 위해 Actel사는 프로세서를 강화하고 표준 주변기기에 대한 전체적인 보완 요소를 제공함으로써 프로세서 이외의 성능도 높여야만 했다.

“Actel사는 플래시 공정에 상당한 투자를 했기 때문에 이 새로운 제품군이 누구도 쉽게 복제할 수 없는 지속 가능하며 차별화된 디바이스라는 점에 대해 상당히 만족해 했다”고 Kapusta 씨는 말했다.

SmartFusion은 내장 플래시 메모리를 갖춘 CortexM3를 제공하는 한편, SRAM 기반 FPGA는 외장 플래시를 필요로 한다고 Kapusta 씨는 덧붙였다. 또한 그는 이러한 플래시 기술을 통해 SmartFusion에서 고전압 아날로그가 디지털 회로와 공존할 수 있는 것이라고 설명했다.

Actel사는 SmartFusion이 FPGA, 프로그램 가능형 아날로그 및 마이크로컨트롤러가 교차하는 광범위한 시장의 흥미를 끌 수 있을 것으로 생각하고 있다. SmartFusion은 산업, 군사, 의료, 통신, 컴퓨팅 및 스토리지 시장의 시스템 및 전력 관리, 모터 제어, 산업 자동화, 디스플레이와 같은 다양한 어플리케이션들을 타깃으로 하고 있다.

그러나 Actel사의 경영진들은 SmartFusion이 학습 곡선이 필요할 수도 있다면서, 특히 FPGA는 익숙하지만 마이크로컨트롤러에 대해서는 생소하다거나 그 반대의 상황인 디자이너들의 경우 그러할 것이라고 인정했다.

따라서 Actel사는 이 디바이스를 위한 설계 지원을 위해 Libero IDE(Integrated Design Environment)를 제공하며 GNU를 갖춘 무료 SoftConsole Eclipse 기반 IDE뿐만 아니라 Keil 및 IAR Systems사의 평가 소프트웨어 버전을 제공한다.

Actel사에 따르면, SmartFusion 디바이스에 통합된 마이크로컨트롤러 서브시스템은 ARM Cortex-M3 기반으로 100MHz 동작 속도를 가진다고 한다. 또한 최대 512킬로바이트의 플래시 메모리와 64킬로바이트의 SRAM 등이 포함되어 있다.

SmartFusion 디바이스는 Actel사의 플래시 기반 ProASIC3 FPGA 아키텍처로 제작되고 130나노 CMOS 공정에서 구현되며 6만~50만 개의 시스템 게이트와 350MHz의 성능으로 최대 204개의 입출력을 지원한다.

Actel사는 지난해 9월 이후부터 SmartFusion 디바이스를 샘플링해 왔으며 수십 곳의 고객사들과 협력을 진행해 왔다고 밝혔다. SmartFusion 제품군의 첫번째 제품인 A2F200은 대량 생산 중으로 현재 이용 가능하다. 또한 A2F500 디바이스들은 올해 2분기에 공급될 예정이며 A2F060 디바이스들은 올해 하반기에 공급될 전망이다.

고객 평가를 위한 샘플 개발 킷은 99달러에 제공되고 모든 기능을 갖춘 개발 킷은 999달러에 공급되며 두 개발 킷 모두 현재 바로 사용할 수 있다고 Actel사는 밝혔다.

SmartFusion의 내부 구성. 이 FPGA 패브릭은 하드형 ARM 코어로 구축된 마이크로컨트롤러 서브시스템 및 프로그램 가능형 아날로그 블록과 통합되어 있다.

본 기사는 http://www.eetkorea.com/ART_8800606711_480103_NP_dc456e9e.HTM에 있는 전자 엔지니어 기사에서 인쇄한 것입니다.

ADC 구현 위한 FPGA 및 CPLD 디지털 로직 강화

증폭, 컨디셔닝 및 변환

ADC 구현 위한 FPGA 및 CPLD 디지털 로직 강화

게재:2010년05월03일

By Ted Marena
Lattice Semiconductor Corp.

디지털 시스템 설계자들은 다양한 프로세서, 메모리 및 표준 함수 컴포넌트들을 인쇄회로기판에 모두 포함시키기 위해 FPGA와 CPLD를 이용해 디지털 설계의 ‘나머지 부문’을 구현하는 데 익숙하다. 이러한 디지털 함수 외에도 FPGA와 CPLD는 LVDS 입력과 간단한 저항 커패시터(RC) 회로 및 FPGA나 CPLD 디지털 논리 소자 일부를 이용하는 공통 아날로그 함수를 구현함으로써 ADC를 제작할 수 있다.

ADC는 보편적인 아날로그 빌딩 블록으로서, FPGA나 CPLD와 같이 디지털 로직을 ‘현실 세계’의 아날로그 센서로 인터페이싱할 때 거의 항상 필요하다. 여기에서는 Lattice Semiconductor사의 유용한 레퍼런스 디자인과 데모 보드를 이용해 저주파수(DC~1KHz)와 고주파수(최대 50KHz) ADC 두 가지를 모두 구현하는 것에 대해 설명할 것이다.

네트워크 스위치 내 시스템 모니터를 위한 어플리케이션과 오디오 통신 시스템 내 주파수 감지를 위한 어플리케이션 등 각 디자인을 위한 간단한 어플리케이션이 검토될 것이다.

ADC 구현의 개요

간단한 ADC는 소형 RC 회로를 FPGA나 CPLD의 LVDS 입력에 추가함으로써 이루어질 수 있다. 그림 1의 좌측 하단에 나타나 있는 바와 같이 RC 네트워크는 LVDS 입력의 한쪽 측면에 위치해 있으며 아날로그 입력은 다른 한 쪽에 자리잡고 있다.

LVDS 입력은 간단한 아날로그 비교기 역할을 하게 되며 아날로그 입력 전압이 RC 네트워크의 전압보다 높은 경우 디지털 ‘1’을 출력하게 된다. LVDS 비교기는 입력 쪽의 전압을 RC 회로로 변화시킴으로써 정확한 디지털 표시를 구현하기 위한 아날로그 입력 전압 분석에 이용될 수 있다.

아날로그-디지털 제어 모듈은 아날로그 입력 주파수, 목표 분해능 및 이용 가능한 로직 리소스에 따라 다양한 방법으로 구현될 수 있다. 그림 1의 좌측 상단 옵션 1에서 볼 수 있듯이 저주파수 신호는 간단한 연속 근사 레지스터를 이용해 처리될 수 있다.

그림 1: ADC(analog to digital converter)의 기본 블록 다이어그램: 저주파수 및 고주파수 옵션

그림 1: ADC(analog to digital converter)의 기본 블록 다이어그램: 저주파수 및 고주파수 옵션

그림 1의 우측 상단에서 볼 수 있듯이 보다 높은 주파수의 구현은 샘플링 레지스터와 CIC(cascade integrated comb) 필터를 구성하는 델타 시그마 변조 함수를 이용해 이루어질 수 있다.

디지털 신호가 구성되면 디지털 출력이 수시로 필터링됨으로써 시스템 잡음이나 피드백 지터로 인한 원치 않는 모든 고주파수 컴포넌트를 제거할 수 있다.

디지털 필터 블록 옵션에 이어서 메모리 버퍼 옵션이 디버깅/테스팅 목적으로 이용될 수 있다. 디지털 출력은 메모리 버퍼에 의해 샘플링되고 그 후 신호 분석 소프트웨어가 구동되고 있는 PC의 JTAG 포트를 통해 스캔 아웃된다.

저주파수 로직 ADC 구현 설명

저주파수 로직 구현에서 샘플링 제어 모듈은 연속 근사 레지스터를 제어하며 일반 출력 신호가 RC 회로에 적용되는 시간을 변경시킨다. 따라서 RC 회로 전압은 일반 출력의 상태, 즉 변화된 값에 따라 증가되거나 감소한다.

LVDS 입력은 변화하는 RC 회로 전압을 아날로그 입력과 비교한다. 그 결과 RC 회로 전압은 아날로그 입력 전압을 ‘찾는 데’ 이용된다. 그림 2는 전체 입력 전압 범위의 반값에 약간 못 미치는 정적 아날로그 입력(오렌지색 점선)의 실례를 보여 준다. 흑색 수직 점선은 녹색 점선으로 표시된 SAR 샘플 지점 사이의 클럭 수를 나타낸다.

첫번째 계측은 8클럭이 걸리며 다음은 4클럭, 2클럭 등이 걸리게 된다. 처음에 RC 회로는 로직 ‘1’이 일반 출력에 적용됨으로써 아날로그 입력에서 전체 전압 진폭의 반값까지 상승하게 된다. 전압이 2분의 1 지점에 오게 되면 LVDS 입력에 대한 출력은 아날로그 입력값이 RC 회로 전압 이상인지 이하인지를 나타내게 될 것이다.

아날로그 전압이 더 높으면 디지털 출력에서 가장 중요한 비트가 로직 ‘1’이 된다. 아날로그 전압이 더 낮으면 디지털 출력은 로직 ‘0’이 된다. SAR은 반으로 줄어드는 샘플링 시간을 따라 다음 비트로 이동한다. 이러한 과정이 ADC의 정확도가 목표에 도달할 때까지 반복된다.

그림 2: SAR(Successive Approximation Register) 기반 ADC 동작 실례

그림 2: SAR(Successive Approximation Register) 기반 ADC 동작 실례

그림 2의 예를 통해 RC 회로 전압이 어떻게 아날로그 입력값에 단계적으로 도달하는지를 관찰할 수 있다. 이 다이어그램의 하단에는 SAR(0101)의 4비트 디지털 출력이 나타나 있다.

저주파수 디자인은 다양한 공급 전압 및 환경 센서에 해당하는 몇 가지 아날로그 전압 레벨을 모니터링 하는 데 이용될 수 있다. CPLD 구현은 PCB 전원 공급 전압(3.3V, 2.5V 및 1.8V)뿐만 아니라 온도/습도 센서 및 오픈 캐비닛 알람을 모니터링 할 수 있다.

다수의 아날로그 입력을 계측하기 위해 하나의 LVDS 입력이 추가 RC 회로와 함께 각각의 아날로그 전압에 이용된다. 아날로그 전압은 천천히 변화되기 때문에 LVDS 출력이 다중화됨으로써 디지털 로직 함수가 각각의 입력 사이에 공유될 수 있다.

저주파수 로직 ADC 테스트 결과

Lattice MachXO CPLD에는 개발 보드를 이용해 디지털 필터 옵션이 없는 저주파수/최소 로직 회로가 구현되었으며 0~3.3V의 진폭에 0.8Hz의 입력 신호가 이용되었다.

그림 1에서 볼 수 있는 메모리 버퍼 옵션은 Lattice ispLever 디자인 소프트웨어의 Lattice Reveal Logic Analyzer 기능과 함께 이용된다. 이 기능은 디지털 신호 캡처, 데이터 버퍼링 및 JTAG 케이블을 통해 컴퓨터로 데이터를 전송하는 작업을 제어하는 데 필요한 로직 이외의 타깃 디자인에 버퍼 메모리를 추가시켜 준다. 테스트가 진행되는 동안 FFT는 Linear Technology사의 Pscope 소프트웨어를 이용해 수집된 데이터를 기반으로 구동된다.

수신된 디지털 신호는 Pscope 스크린 캡처 창의 상단에 표시된다. 세로축은 코드 스텝으로 측정하며(0~255) 가로축은 샘플로 측정한다(여기서는 1024샘플). 주파수는 f1(기본) 주파수와 같이 우측 상단의 박스에 기록된다. FFT의 결과는 창의 하단에 표시되며 고주파 주파수는 dB 레벨에 따라 세로축으로 표시된다.

FFT에서 발생한 핵심 파라미터들에 대한 요약 내용은 우측 하단 박스에 표시되며 여기에는 ENOB(effective number of bits)와 SNR(signal to noise ratio)도 들어 있다. 이 결과들은 입력 신호가 우수한 분해능과 SNR로 디지털 신호로 성공적으로 변환되었음을 나타내 준다.

고주파수 ADC 구현

그림 1의 우측 상단에 있는 고주파수 ADC 옵션의 프론트엔드는 여전히 RC 회로와 LVDS 입력을 이용하고 있다. 오버샘플링 플립플롭은 LVDS 입력으로부터 비교기 결과를 캡처한다. 이 신호는 RC 회로를 구동시키는 일반 LVCMOS 출력을 통해 피드백된다. 비교기 출력이 로직 ‘1’이라면, 이는 아날로그 입력이 RC 회로의 전압보다 높다는 것을 의미한다.

로직 ‘1’이 플립플롭에 의해 샘플링되고 RC 회로로 피드백됨으로써 RC 회로 전압은 상승하게 된다. 비교기의 출력이 로직 ‘0’이면 피드백 신호는 로직 ‘0’이 되며 RC 전압은 보다 낮아지게 된다. 이 간단한 피드백 메커니즘을 통해 디지털 값은 아날로그 입력 주파수를 ‘트래킹’하는 것이다.

그림 3: 델타시그마 모듈레이터의 변환 스테이지 결과를 보여준다.

그림 3: 델타시그마 모듈레이터의 변환 스테이지 결과를 보여준다.

그림 3의 우측 하단 그래프의 적색선은 샘플 아날로그 입력 파형과 샘플링 플립플롭의 출력을 나타내며 청색 칸은 로직 ‘1’을 나타내고 백색 칸은 로직 ‘0’을 나타낸다. ‘1’과 ‘0’이 공통 PCM(pulse code modulated) 포맷으로 변화되는 방식을 살펴 보자.

PCM 입력은 CIC(cascaded integrator comb) 필터를 이용해 아날로그 입력 스트림 주파수를 반영하는 출력 스트림으로 변환될 수 있다. CIC 기능은 근본적으로 단일 비트 PCM 신호를 통합하고 있어서 원하는 비트 수로 지속적인 출력 신호를 발생시킨다.

그림 3의 하단부의 예에서 청색 비트는 ‘1’로 백색 비트는 ‘-1’로 간주되는데 합계(통합) 작업이 입력 파형에 대한 디지털 표현을 발생시키는 것이 확실하다.

RC 회로의 전압은 이 피드백 루프를 통해 구현된 “트래킹” 과정으로 인해 아날로그 입력 레벨 주변에서 왔다 갔다 하게 된다. RC 회로 전압은 오버샘플링 플립플롭이 ‘1’과 ‘0’이라는 결과 사이에서 변화되는 것과 같이 아날로그 입력 레벨보다 약간 높거나 낮은 범위 안에서 변하게 된다. 이러한 고주파수 잡음은 부수적인 디지털 필터를 이용함으로써 제거할 수 있다.

고주파수 설계는 동작 및 환경 상태를 전달하는 데 이용되는 다중 오디오 주파수 보조 신호를 모니터링 할 수 있다. 예컨대, 5kHz 및 12kHz 신호가 주기적으로 발생됨으로써 원격 오디오 모니터링 시스템의 상태를 표시할 수 있다. 이러한 신호들은 장비의 환경 상태(온도 및 습도)를 나타낼 수 있다.

앞선 예에서와 같이 다중 아날로그 신호들은 간단하게 보다 많은 LVDS 입력을 추가함으로써 지원될 수 있다. 이 디자인은 최대 8개의 아날로그 신호를 위한 허브가 될 수 있다.

고주파수 ADC 테스트 결과

보다 높은 주파수의 ADC 회로가 개발 보드를 이용해 Lattice XP2-17 FPGA에 구현되었다. 0~3.3V 진폭의 15kHz 입력 신호가 테스트 동안 이용되었다. 이 아날로그 신호는 디지털 필터 옵션을 이용하는 그림 1에 보이는 옵션 2 회로를 이용해 처리된다.

결과가 표시된 창을 보게 되면, 수신된 신호는 상단 창에 표시되고 FFT는 하단에 표시되며 가장 중요한 f1 주파수는 15.1kHz로 표시되는 것을 볼 수 있다. 측면 박스에는 ENOB은 9비트이며 SNR은 61dB라는 결과가 기록된다. 이러한 결과들은 입력 신호가 디지털 신호로 우수한 분해능과 SNR을 통해 성공적으로 변환되었음을 나타내 준다.

<이번호 저널 2010년 5월>호에서 이 기사 및 다른 기사들도 찾아볼 수 있습니다.

본 기사는 http://www.eetkorea.com/ART_8800605154_839591_NT_52a2da9b.HTM에 있는 전자 엔지니어 기사에서 인쇄한 것입니다.

2010년 5월 2일 일요일

Xilinx revisits the embedded-CPU FPGA

Wednesday, April 28, 2010

Nearly a decade ago Xilinx and Altera set a new direction for the FPGA industry, each announcing a high-end FPGA sitting beside a powerful CPUs on one die. Enticed by what had been explosive growth in a networking industry that was in fact using MPUs and high-end FPGAs side by side on their boards, the programmable-logic leaders poured development and marketing dollars into their new flagship ICs, Altera Excalibur and Xilinx Virtex-II Pro.

If this story doesn't sound familiar, it's because the two chips were both doomed to vanish. Within about a year both chips were no longer actively marketed, though you could still buy them. Quiet settled over the scene of the revolution, dust gathered on the engineering notebooks, and both companies silently pledged not to try that again.

Exactly what went wrong is a difficult question. There is always enough blame to go around when an entire product category fails. Certainly the issue was not silicon execution: both the chips were heavily used in the academic community, as the platforms for research that became much of the foundation of today's heterogeneous multicore embedded computing.

Rather, the issues were more practical. By the time they were shipping, Excalibur and Virtex-II Pro were comparatively expensive ways to buy what had become a mature microprocessor. So the significant added cost of the FPGA-based parts was hard to justify for production. There was also the problem of configuration. As any product manager can attest, anything you integrate into a chip is the wrong choice for the next customer you talk to. You have the wrong CPU, or the wrong memory architecture, or not the right peripherals, or not enough or too much FPGA fabric. Finally, and perhaps the most serious problem for both chips, the interface between the CPU and FPGA sides of the die is always problematic. An interface powerful and flexible enough for experienced SoC architects is incomprehensible to traditional FPGA users.

All this notwithstanding, yesterday ARM and Xilinx announced another cut at the challenge: the Extensible Programming Platform (or EPP, if you will allow.) With perhaps a nervous glance over the shoulder to check for the spectre of Virtex-II Pro, the company is positioning this product not as an FPGA with an on-chip CPU, but as a software execution platform that happens to facilitate configurable hardware accelerators and peripherals. The difference may sound like words, but it is more than marketing-program deep.

The EPP is architected somewhat differently from the earlier chips. Like them, it is divided into a processor portion and an FPGA portion. But the EPP's processor side is nearly self-contained, comprising a pair of ARM Cortex-A9MP CPU cores, along with the NEON media engine, the debug core, the recently-released AXI-4 interconnect IP, caches, DRAM controller, and typical peripherals. Xilinx senior vice president of marketing Vincent Ratford pointed out that the CPU side of the chip is sufficiently autonomous that it can boot Linux before the programmable fabric is even configured. The FPGA side will apparently look a lot like a moderate-sized Virtex-6, with fabric, block RAM, probably DSP blocks, and, in some versions, fast SerDes.

The interconnect between the two sides is a more interesting subject. Ratford said that about 2500 signals will cross the boundary between the CPU and FPGA regions. That apparently includes both the high-bandwidth main bus and the peripheral bus of the AXI network. It is not clear just how the multi-layer nature of AXI will be propagated into the FPGA fabric. ARM's multicore coherency bus also will extend into the fabric, according to ARM Physical IP Division executive vice president and general manager Simon Segars. So it should be possible for sophisticated users to implement coherent caches and local memories for accelerators in the FPGA Block RAM.

The chip will use TSMC's 28HPL process, and Xilinx plans to sample at least one version sometime in 2011—a pretty big window. Ratford said there would be several versions of the die with different processor subsystems.

The user design flow will be quite different from the traditional FPGA flow. Ratford said "This product targets the software developers." The concept is that developers—presumably starting with a reference design—would use ARM's RealView Development System to bring up an application in C/C++. Then they would profile the code execution, identify hot spots and critical sequences, and call in the hardware team with behavioral synthesis tools to massage the underperforming C into RTL. From there, the RTL would go into Xilinx's ISE 12 tool chain, eventually becoming a configuration file for the FPGA side of the chip. There are plans to link RVDS and ISE at some critical points to allow debug in both environments at once. Xilinx is also exploring Matlab and Labview as design-origination tools.

So are there enough fundamental differences to predict a better fate for the EPP than overtook the Virtex-II Pro? Some things are indeed profoundly different this time. First, you can put vastly more hardware into a large 28nm die than you could into a big chip ten years ago. That means more performance, a please-almost-everyone selection of peripherals at a decent cost point, room for more capable accelerators, and—desperately important—much more on-chip memory. Second, the ARM architecture is far more ubiquitous today than the PowerPC was then. So even if the big networking vendors are once again unimpressed, many other applications are still available. These two facts should substantially reduce barriers to market acceptance of the new architecture.

Third, EPP will probably be one of the first implementations of Cortex-A9 in 28nm to be available to the general market, not a late-coming and expensive alternative to a two-chip approach. Even though the A9 has been announced for about a year now, many users may find the EPP a very accessible way to get at one. If users see value in the FPGA portion of the die as well, the EPP could look like a good deal. And finally, the EPP is addressed to a very different market than Virtex-II Pro. The earlier chip was aimed at FPGA experts. EPP is addressed to software-dominated design teams in which hardware engineers play a supporting role.

Will it work? There remain two major questions. First, can the kind of software-first methodology Xilinx envisions successfully produce a working SoC with today's tools, or will the design require early engagement by FPGA experts, careful system modeling and parallel hardware and software development? If the latter is the case, much of the advantage of the EPP is lost. Second, can Xilinx hide from designers the complexity of the interface between the CPU and FPGA sides of the die, without obscuring the power of the architecture? Neither software developers nor traditional FPGA users are going to cope successfully with the interface in all its riches. Yet the advantage of the EPP over a commodity microprocessor used with an inexpensive FPGA rests in users' ability to exploit that interface. Only time can answer these two questions.

© Reed Business Information, a division of Reed Elsevier Inc. All rights reserved.

==========

추천: http://www.edn.com/blog/1690000169/post/110054211.html?rid=#EDNRegVisitorID#&nid=2435