2013년 1월 12일 토요일

Plunify : Cloud Accelerated(?) FPGA Compile

이번 글에서는 재미있는 SaaS(Software as a Service) 형태의 Cloud 서비스인 Plunify를 소개하려고 합니다. 언젠가 Cloud9이라는 Cloud 환경하에 있는 IDE(Integrated Development Environment) 서비스에 대한 이야기를 들었을 때, 재미있는 개념이라고 생각하면서도 Cloud9이 지원하는 Javascript나 Ruby 등의 언어는 관심사가 아니었기 때문에 깊이 생각해 보지 않았습니다. 다만 embedded software 분야에서도 비슷한 것을 만들면 어떨까 생각을 해보다가, build는 가능할 지 모르지만 target board에 download하거나 debugger를 연결할 필요가 있으므로 쉽지 않겠다 싶었습니다. 그로부터 몇개월 후에 mbed라고 NXP의 LPC(ARM Cortex를 사용한 MCU) board를 팔면서 C/C++ Cloud IDE를 제공하는 site 소식을 듣게 되면서 내 생각이 짧았다는 것을 알게 되었습니다. Cloud IDE에서 build한 binary를 받아서 USB를 통해 disk drive 형태로 연결된 board에 복사하면 download가 끝나는 형태라고 합니다. 물론 debugger 장비의 연결과 같은 것은 지원하지 않지만, cross compiler 등의 tool setting과 같은 귀찮은 작업 없이 개발을 시작할 수 있다는 것은 상당히 매력적이라 볼 수 있습니다. 또한 online 상에서 작업을 하게 되면 협업을 하기 쉽고 다른 서비스와의 연결도 쉽게 접근할 수 있는 이점도 생깁니다. mbed에 대한 내용을 접하고 나서는 FPGA나 Chip 개발에도 비슷한 서비스를 만든다면 어떤 모습일까 생각을 하게 되었는데, Plunify 라고 그런 것을 표방하는 서비스를 알게 되었습니다.


http://www.plunify.com/

Plunify는 Cloud Accelerated Chip Design이라는 모토를 가지고 있습니다. 하지만 사이트를 살펴본 결과 아직까지는, 다음과 같은 FPGA compile에 관련된 3가지 서비스만을 제공하는 것으로 보입니다.

- FPGAAccel Web
Cloud 위에 있는 머신에서 Altera Quartus II Web Edition을 돌리는 것으로, 사용자는 web browser로 해당 작업을 제어할 수 있게 만든 서비스입니다.

- Explorer++(Beta)
Xilinx ISE의 SmartXplorer의 동작을 cloud 상의 여러 머신에 나누어 돌릴 수 있게 하는 기능입니다. Xilinx ISE가 제공하는 SmartXplorer는 조건(?)을 바꾸어 가며 compile을 여러번 돌려서 좋은(timing/area 등의 측면에서) 결과를 찾는 기능인데, 당연히 여러 머신에 나누어 돌릴 수 있으면 더 빠른 결과를 볼 수 있겠습니다. Plunify는 이 서비스를 위해 별도의 client software를 제공하고, 그 client software가 사용자의 머신에 있는 Xilinx ISE와 연동하여 동작하는 형태를 가집니다.

- FPGAAccel Client
Client software를 통해 shell 환경에서 Altera Quartus II Web Edition을 돌릴 수 있게 하는 서비스입니다. Shell 환경을 web browser 위에서 제공하지 않고 왜 별도의 client software로 처리하는지는 알 수 없지만, SmartXplorer와 마찬가지로 shell 환경으로 option을 바꾸어 가며 compile을 여러번 수행하여, 원하는(좋은) 결과를 찾는 것을 목적으로 하는 것으로 보입니다.

FPGA 설계를 하다 보면 timing이나 area 문제로 인해 고통 받는 경우가 종종 있습니다. 보통의 경우 설계해야 하는 기능이 빡빡하게 들어갈 만한 크기(LUT 갯수)의 FPGA를 선택하게 되므로, area의 여유가 많이 있을 수가 없습니다. 그런데 a
rea의 여유가 줄어들게 되면, 자연스럽게 timing 문제가 생기는 경우가 많습니다. FPGA는 특성상 대부분의 timing delay가 logic cell이 아니라 routing에서 발생하는데, 설계가 커질수록 routing resource가 줄어들어 delay가 커질 가능성이 크기 때문입니다. 아주 이상한 경우에는 critical path에 logic은 두어 단계만 존재하고 routing delay만 매우 커서 해당 부분의 rtl을 변경해도 줄일 수 없는 경우도 있습니다.
위와 같은 문제가 있는 경우 컴파일 옵션을 변경하거나 RTL의 일부를 변경하며 컴파일을 여러번 돌려 해결을 시도하게 됩니다. Plunify는 이런 경우 작업자의 머신이 아니라 cloud위에 있는 머신에서 병렬적으로 돌릴 수 있게 해주는 서비스라고 할 수 있습니다.

그런데 아직까지는 사용하는 데 여러 제한 사항이 있어 보입니다. 우선 Software license 문제로 추측됩니다만, Xilinx ISE에 대한 지원이 Altera Quartus II와는 달리 부족합니다. 그나마 Altera Quartus II 조차도 Web edition 뿐으로 사용할 수 있는 FPGA가 제한 받습니다. 또한 3rd parity IP를 구매하여 사용할 경우, 일반적인 경우 개발 머신의 hostid를 이용하여 license file을 받게 되는데, Plunify에서는 어떻게 할 수 있는지 모르겠습니다.

위와 같은 제한 사항의 해결뿐 아니라, Plunify모토대로 Chip 설계 분야로 진입하기 위해서는 EDA tool vendor(FPGA vendor 포함), IP provider 등과 협상을 해야 할 것 같은데, 쉽지 않을 것 같습니다. EDA tool vendor의 경우에는 오히려 Plunify 경쟁 서비스를 직접 만들 수도 있기 때문입니다. 결국 사용자를 많이 확보하여 협상력을 키우는 수 밖에 없을 텐데, 현재 제공되는 서비스만으로는 뭔가 부족한 느낌입니다. 어떻게든 가치 있는 여러 서비스들을 추가하면서 입소문을 내고 사용자를 모을 필요가 있어 보입니다. 어떻게 할 지 지켜볼 일입니다.



2011년 12월 30일 금요일

안드로이드 4.0, 아이스크림 샌드위치는 790MB의 메모리가 필요한가?

개인적으로 정말 오랜만에 글을 올리는데, 몇가지 글을 적어보려고 한 적은 있었는데 매번 완성도 있는 글이 되지 않았다. 이번 글은 그냥 가볍게 써 본다.


며칠전에 삼성전자가 스마트폰 갤럭시S의 안드로이드 4.0(아이스크림 샌드위치) 업그레이드를 해 주지 않는다고 밝혀 많은 비난을 받고 나서, 다시 밸류팩을 검토중이니 하며 결론을 유보하고 있다. 그 와중에 다음과 같은 기사가 있었다.

삼성 갤럭시S 업그레이드 논란 '구글 변수'

아시아경제라는 곳의 12월 28일자 기사인데, 바로 요약하면 글의 의도를 왜곡할 수 있으므로 일부분을 그대로 옮겨오면 아래와 같다.

========================================
(앞부분 생략)
28일 본지가 구글로부터 입수한 '안드로이드 4.0 호환성 정의' 가이드라인에 따르면, 논란이 되고 있는 구글의 새로운 OS '아이스크림 샌드위치(ICS)'가 원활이 작동하려면 메모리(램) 용량이 790MB 이상이 필요한 것으로 확인됐다. 


구체적으론 커널 등 운영체제의 기본 요소에 340MB, 응용 프로그램 구동에 350MB, 파일 다운로드에 100MB가 요구된다. 


구글 가이드라인을 검토한 국내 스마트폰 업계의 한 개발자는 "메모리 용량이 790MB 이상이어야 운영체제가 무리없이 작동한다"며 "이 기준에 미치지 못하는 스마트폰은 운영체제를 업그레이드한들 성능이 나아지지 않는다"고 지적했다. 


현재 삼성전자의 갤럭시S는 메모리 용량이 512MB로 구글의 권장 기준에 밑도는 것이다. 또 다른 개발자는 "500MB는 운영체제를 구동시키는 최소 사양"이라며 "이런 상태에서 운영체제를 해봤자 성능이 나아질 것은 없다"고 밝혔다. 


결국 삼성전자가 업그레이드를 하지 않기로 한 것은 이같은 한계에 따른 불가피한 선택이었다는 설명이다. 


(뒤부분 생략)
========================================

"아이스크림 샌드위치로 업그레이드 하려면 메모리(램)이 790MB가 필요한데, 갤럭시S는 메모리가 512MB밖에 없어서 문제"임 정도로 이해할 수 있다.

갤럭시S와 비슷한 사양인 넥서스S는 동일한 512MB의 램을 가지고 있지만, 구글에서 아이스크림 샌드위치로 현재 업그레이드 중이라고 알려져 있다. 그런데 아이스크림 샌드위치가 790MB의 램이 필요하다니, 구글이 앞뒤가 안맞는 일을 벌이고 있다는 이상한 결론에 도달할 수 밖에 없는데, 좀 이상하다는 생각이 들어 직접 구글로 찾아 봤다.



위에서 보이는 것처럼 기사에서 언급한 "안드로이드 4.0 호환성 정의"라는 문서가 있었고, 내용을 살펴보니 7.6.1절 "Minimum Memory and Storage"라고 하는 부분이 아래와 같이 있었다.

========================================
7.6.1. Minimum Memory and Storage


Device implementations MUST have at least 340MB of memory available to the kernel and userspace. The 340MB MUST be in addition to any memory dedicated to hardware components such as radio, video, and so on that is not under the kernel's control.


Device implementations MUST have at least 350MB of non-volatile storage available for application private data. That is, the /data partition MUST be at least 350MB.


The Android APIs include a Download Manager that applications may use to download data files [ Resources, 56]. The device implementation of the Download Manager MUST be capable of downloading individual files of at least 100MB in size to the default "cache" location.
========================================

요약하면 커널이 관리할 수 있는 메모리가 최소 340MB가 있어야 하고, /data 파티션으로 최소 350MB가 cache 영역으로 100MB가 필요하다는 것이고, 이것은 위에서 인용된 기사에서 지칭한 340, 350, 100과 정확하게 일치한다.

하지만 340MB만 메모리(특별히 램)이고 350MB와 100MB의 경우에는 램이 아니라, 스토리지(위에서는 non-volatile storage 또는 cache location으로 나옴) 즉, flash 영역의 크기를 의미하고 있는데, 이 부분은 기사의 내용과 일치하지 않는다. 기사의 경우 모두 790(340+350+100)MB전부를 램으로 이해하고 작성한 것으로 보인다. 그렇게 오해를 했으니 갤럭시S의 flash 영역의 크기가 아니라 램 크기 512MB와 비교를 하고 있는 것이다.

아무튼 위의 기사는 사실 관계를 정확하게 확인하지 않은 상태에서 작성되었다는 것은 분명하고, 안드로이드 개발자에게 직접 사실 관계를 확인하지 않은 것으로 보인다. 기사는 업그레이드를 하지 않기로 한 삼성에 대한 두둔과, 사실상 기사와 직접적인 관계가 없는 LG의 업그레이드도 약간의 문제가 있을 것이라는 결론을 내고 있는데, 결론이 맞을 수는 있을 지언정 결론까지 도달하는 과정은 상당히 문제가 있다고 할 수 있다.

위의 예와 같이 오류가 있는 기사가 IT 쪽에 조금 있는 것 같다. 위의 예처럼 메모리라고 하면 RAM과 Storage를 구분하지 않는다거나 하는 것은 매우 흔한 것 같고, bit와 byte의 단위를 잘못 사용하는 것도 매우 흔한 편이라고 느낀다. 정확하게 모든 기사를 조사해 본 것이 아니므로 얼마나 흔한지는 모르겠지만, 읽으면서 뭔가 잘못됐다라고 느끼는 기사들이 종종 있었던 것으로 기억된다.

이렇게 오류가 있는 기사가 더욱 나쁜점은 현재와 같이 인터넷이 발달한 상태에서는 계속 재생산이 된다는 점이다. 예를 들어 아래와 같이 다른 언론사 기사에서는 "업계에 따르면 790MB가 필요하다"는 식으로 재생산되었다.

ICS 적합 메모리 790MB…512MB 갤럭시S "어쩌나"
삼성, '갤럭시S'도 ICS 업그레이드 검토

또한 Blog나 심지어 네이버 지식인의 질문에서도 등장한다. 사실이 아닌 것이 인터넷을 통해 계속 재생산되어 사실인 양 돌아다닐 수 있다는 점이다.

결론은 다른 모든 기사도 마찬가지겠지만, IT 기사를 쓸 때 사실을 잘 확인하고 써야 한다는 것이다. IT 분야가 상당히 넓고, 빨리 변하는 만큼, 기자가 모든 기술을 정확하게 알아야 하는 것은 말이 안된다. 따라서 올바른 전문가에게 사실 확인을 받아서 기사를 써야 할 것이다.


=====
참고로 지금 글의 마지막을 작성하려고 재생산 관련한 내용을 찾기 위해, 네이버를 통해 "갤럭시S 790MB"를 검색했더니, 그 기사가 잘못되었다고 지적하는 아래의 글(몇시간전에 작성된)을 찾을 수 있었다.
기사에 나온 안드로이드 4.0 호환성 정의
네이버의 카페(구글 레퍼런스 넥서스 포럼) 글이므로 위의 링크로는 직접 볼 수 없고, 네어버 검색을 해서 들어가야 보일 것이다. 호환성 정의를 직접 찾아 보는등 동일한 내용의 글이라서  지금 작성된 내용을 올리지 않을까도 싶었으나, 결론이 다르므로 그냥 올린다.

2010년 9월 25일 토요일

Nokia 5800 XpressMusic 사용기

얼마전에 휴대폰을 하나 새로 추가로 샀습니다. 기존에 사용하던 휴대폰은 삼성 m4655라고 하는 아래 사진과 같은 녀석이었습니다.


Windows Mobile로 구동되고 full touch되는 스마트폰이라고 볼 수 있는데, WiFi도 없고 GPS도 없는 무늬만 스마트폰이라고 볼 수 있는 녀석입니다. 하지만 기존까지 유지하던 011번호를 유지할 수 있고, 버스타고 다니면서 동영상이나 보려고, 2년쯤전에 LGT(이제는 LG U+가 됐죠)에서 개통하여 계속 사용하고 있었습니다. WiFi가 안되므로 network 접속은 휴대전화망을 이용할 수 밖에 없는데, 아무래도 데이터 요금이 무서우므로 재미있는 application(요즘말로는 앱)을 설치하거나 할 수는 없었습니다. 설치한 application으로 생각나는 것은 달랑 두 개로 하나는 배경화면 꾸미는 것하고 나머지는 TCPMP라는 동영상 player였습니다.


그런데 얼마전부터 touch sensor에 문제가 있는지 touch가 동작하지 않는 경우가 많이 생기더군요. Touch는 사실 새로 받았을 때 부터 아주 잘 동작한다고 볼 수도 없었는데, 인터넷을 돌아다녀보면 이 모델이 가지는 고질적인 문제라고 합니다. A/S 센터에 들고 가자니, 무상 보증 기간이 지났고, LGT 약정(2년)은 남았고 해서 이 전화는 받는 전화로만 쓰면서 약정을 넘기고, 그 기간동안 발신을 주로할 휴대폰을 새로 장만했습니다.


장만한 휴대폰은 Nokia 5800 XpressMusic, 일명 익뮤라고 하는 휴대폰입니다. Symbian 운영체제, 정확하게는 Symbian S60 5th edition을 사용하는 풀터치 스마트폰입니다. Wifi, GPS, 가속도 센서(중력 센서) 등을 지원합니다.


올 봄에 익뮤대란이라고 무약정으로 KT에서 많이 팔았던 휴대폰인데, 대란때 산 것은 아니고  6월 말쯤에 더이상 m4655로 전화를 거는 것이 힘들다고 생각했을 때 12개월 약정으로 구매했습니다. 익뮤는 3G 폰이므로 방통위 정책에 따라서 010 번호를 받았습니다. 익뮤를 사용해보고 괜찮다 싶으면, 기존 011 번호를 번호 연결 서비스로 연결하여 주 휴대폰으로 사용할 계획을 잡고 구매하게 되었습니다. 구매한 후 얼마 지나지 않아 익뮤의 업그레이드라고 볼 수 있는 X6가 비슷한 조건으로 시장에 팔려 약간은 속이 쓰렸습니다.


전반적으로 익뮤는 훌륭한 휴대폰이라고 볼 수 있습니다. 우선 전화 기능에서 불만은 전혀 없고, 터치도 훌륭합니다. 7월말에 있었던 공식적인 펌웨어 업데이트 전에는 스크롤을 위해서는 꼭 스크롤바를 사용해야 했는데, 업데이트 후에는 일명 키네틱 스크롤이 지원되어 매우 편해 졌습니다. 기본적으로 LG 휴대폰에서 사용하는 ez한글 입력기를 지원 하는 것도 매력적이고, 약간은 독특하게 동작하여 당황스럽기는 하지만 전화번호부 초성 검색도 가능합니다. 그리고 크기도 적당해서 전화기로서의 그립감이 상당히 좋은 편입니다.


완성도도 높은 편으로 m4655와 같은 Windows Mobile 폰에서 볼 수 있는 일명 똥침같은 것은 존재하지도 않고 당연히 리셋이 필요한 경우가 없었습니다. 개인적으로 막귀라서 잘 모르겠지만, 다른 사람들의 평가에 따르면 이름(XpressMusic)에 걸맞게 MP3 음질도 훌륭하다고 합니다. 당연히 3.5파이 이어폰 단자가 있습니다. 또한, 카메라 화질도 좋은 것 같습니다. 3.2메가픽셀에 자동 촛점(auto focus), 플래쉬를 지원하는 카메라가 달려 있는데, 예전에는 "휴대폰 카메라에 무슨 플래쉬가 필요한가?"라는 생각이 있었는데 어두운 환경에서 찍어보니 나름 플래쉬 기능도 꽤 쓸만했습니다.


개인적으로 m4655의 사용에 비해 익뮤를 사용할 때 가장 차이가 나는 부분은, Wifi를 이용하여 gmail의 연락처, 캘린더 등을 동기화를 사용하는 것이었습니다. 별도의 케이블 연결도 필요 없이 Wifi가 되는 곳이면 언제든지 동기화가 가능하므로 상당히 편리했습니다.


하지만 사용하면서 아쉬웠던 점이 몇가지 있었습니다. m4655에 설치한 앱이 달랑 두 개밖에 없을 정도로, 스마트폰의 heavy user는 아니므로 그것을 감안한고 읽어 주시기 바랍니다.


  • 발신 제한 없음
집에 네살배기 아들 녀석이 있는데, 이 녀석이 아빠가 가지고 노는 것은 모두 직접 해보려고 합니다. 그래서 아들 녀석이 만족할 수 있게끔 어느 정도 동작은 되면서, 다른 사람에게 폐가 되지 않도록 전화는 걸리지 않도록 세팅할 수 있어야 합니다. 그런데 익뮤에서는 그것이 불가능합니다. 분명 휴대폰의 설정 메뉴에는 발신 제한뿐 아니라 국제전화 제한도 있지만 동작하지 않습니다. 이 기능들은 휴대폰 자체 기능이 아니라, 통신 사업자(즉 KT)와 연동되어 동작해야 하는 것으로 보이는데, KT에서 지원하지 않는 것으로 보입니다. 당연히 앱을 설치하면 가능할 것으로 보고, call block 기능이 있는 symbian 앱을 많이 찾아 봤는데, 모두 발신이 아니라 수신 전화를 필터링하는 것 뿐이었습니다. 그럼 취미 삼아 그런 앱을 만들어 보자 싶어, symbian에서 제공하는 API에 관련된 문서까지 살펴 봤는데, 전화가 발신 되는 것을 감지하여 hook하는 API는 찾을 수 없었습니다. API 문서를 보면 발신을 감지하여 자동으로 끊게 할 수는 있을 것 같은데, 암호 화면을 띄워서 인증이 될 때까지 발신을 보류할 수는 없어 보입니다. 결국 아들에게 미안하지만, 휴대폰 전체를 잠그는 방법을 사용하고 있습니다. 여기서 또 약간의 문제가 발견되었는데, 기본 제공되는 전체 잠금은 잠금 화면에서 현재 시각이 화면에 표시 되지 않습니다. 시각을 확인하려면 암호를 넣어 잠금을 풀어야 하는 불편함을 감수해야 합니다. 새벽에 잠이 깼을 때 옆에 있는 휴대폰을 집어 시각을 확인하려고 할 때, 크흐~

전화 발신 제한 뿐 아니라, 데이터 통신 제한도 없습니다. 웹브라우저 등을 띄우면 현재 가능한 인터넷 접속 방법 중에 하나를 고를 수 있는 다이얼로그박스 같은 것이 뜰 뿐, 3G 데이터 통신을 완전히 제한하거나 암호등을 이용하여 제한하는 기능은 없습니다. Exchange Server 동기화를 위해서 사용하는 Mail for Exchange와 같은 앱은 정기적으로 인터넷 접속을 하도록 세팅할 수 있는데, 접속할 때 접속 방법을 선택하는 다이얼로그박스가 뜨지도 않고 마음대로 접속을 하는 것으로 보입니다. 다행히 데이터 통신 제한은 앱을 설치하면 가능한 것으로 보입니다.


  • 충전 문제
또 하나의 커다란 불편한 점은 충전입니다. 익뮤를 사면 5V 아답터(일반 5파이가 아니라 2파이 형태의 가는 단자를 사용)가 딸려오고 이것을 연결하여 충전을 할 수 있습니다. 하지만 익뮤는 micro USB 포트가 있어서, 당연히 micro USB를 이용하여 PC로도 충전이 가능할 것이라고 생각했었습니다만, micro USB 포트로는 충전이 되지 않습니다. micro USB 포트를 이용할 수 없기 때문에 집과 회사, 두 곳에서 충전을 하려면 아답터를 들고 다니거나 하나 더 구매할 수 밖에 없습니다.
이런 불편 때문에, 3rd party에서 USB를 2파이 아답터 소켓으로 변환하는 젠더등을 팔고는 있습니다만, 그렇게 널리 사용되는 젠더는 아니라서 가격이 비싼 편입니다. micro USB 포트를 이용하여 충전이 가능하면 24 pin 표준형 충전기에 맞는 젠더도 구하기 쉽고, 정 문제가 되면 PC를 이용하여 충전이 쉬운데 아쉬운 점입니다.
다행한 점은 배터리 소모가 크지 않아 매일 집에서 꼬박꼬박 충전을 해 주면 하루 정도 사용에는 큰 문제가 없다는 점입니다.

  • 동영상 지원 빈약
m4655를 사용할 때는 TCPMP를 이용하여 왠만한 동영상은 별도의 인코딩 없이 재생하고 smi 형태의 자막도 오버레이를 할 수 있었습니다만, 익뮤의 경우에는 그것이 불가능합니다. 익뮤는 real player를 내장하여 사용하는데 이 녀석이 MP4와 H.264만 지원하고 자막의 오버레이는 지원하지 않습니다. 자막 오버레이를 지원하고 avi 형태의 파일도 지원하는 3rd party 앱이 있는 것 같습니다만 이 앱의 성능이 그다지 좋지 않은 것으로 알려져 있습니다. 결국은 PC에서 자막까지 오버레이해서 인코딩을 거쳐야 제대로된 동영상을 감상할 수 있습니다. 
익뮤가 640x360 크기의 16:9 LCD를 지원하기 때문에 화면은 m4655(QVGA 지원)보다는 훨씬 좋기는 합니다.

  • ovi store의 빈약한 앱
개인적으로 볼 때 익뮤의 가장 큰 문제는 우리나라에서 ovi store를 통해서 구할 수 있는 앱이 너무 적다는 점입니다. ovi store는 Nokia가 만든 symbian용 app store입니다. 사실 symbian은 가장 오래된 스마트폰 platform이라 시중에 돌아다니는 앱은 정말 많은 것 같습니다. torrent를 통해서 mega pack과 같은 형태로 수천 개의 앱이 들어 있는 파일을 다운로드 받을 수 있기도 합니다. 하지만 symbian platform이 오래된 만큼, 스마트폰에서 동작하는 악성 코드가 처음 발견된 platform도 symbian입니다. 사용자는 안전하다고 확신할 수 있는 앱을 쉽게 다운로드 가능해야 합니다. 그런 통로 중에 가장 우선시 되어야 하는 것이 Nokia에서 직접 운영하는 ovi store 여야 한다고 생각합니다.
그런데 ovi store에서 구할 수 있는 앱이 너무 적습니다. 우리나라에서는 무료 앱만 다운로드 가능한 것으로 보이는데, 등록되어 있는 무료 앱이 너무 적습니다. 유료 앱의 경우에는 우리나라에서 어떤 것이 있는지 조차 확인할 수 없습니다. Proxy 서버를 이용하여 외국으로 경유하면 확인할 수 있겠지만, 그래 봤자 구매를 하려면 상당히 번거러운 절차를 거쳐야 할 것으로 보입니다.
스마트폰이 일반 피쳐폰과 다른 가장 큰 것이 앱의 설치 가능 여부라고 봤을 때, 안전한(?) 앱의 갯수가 적다는 점은 큰 문제입니다. 더군다나 이런 상황이 미래에도 크게 바뀔 가능성도 없습니다. 얼마전에 Nokia에서 N8이라고 하는 Symbian^3 platform(익뮤가 사용하는 S60 5th edition의 업그레이드 판)의 스마트폰을 출시하기는 했지만, Nokia가 주력으로 삼을 platform은 Intel과 같이 하고 있는 Meego로 보여집니다. 따라서 익뮤가 많은 지원을 받을 가망이 별로 없습니다.


현재는 m4655의 2년 약정이 끝난 상태로, 고민 중이기는 하지만 m4655를 대체할 휴대폰으로 익뮤를 계속 사용하지는 않을 것 같습니다. 나름 괜찮은 스마트폰을 사용할 수 있는 기회를 준(?) KT에는 미안한 일이지만, 위약금을 내고 해지할 예정입니다. 그동안 발신은 계속 익뮤를 통해서 KT에 전화요금을 납부했으므로 약간은 죄책감(?)을 덜 느끼기는 합니다.

m4655를 대체할 휴대폰을 장만해야 하는데, 스마트폰을 장만한다면 아마도 안드로이드폰을 사지 않을까 싶습니다. 아니면 011 번호를 유지할 수 있는 2G 피쳐폰을 사는 것도 고려하고 있는데, 여러모로 고민을 하고 있습니다.



2010년 5월 5일 수요일

Altera Cyclone III, NIOS2 간단 사용기

현재 일하고 있는 회사에서는 사용하고 개발하는 대부분의 FPGA Board는 Xilinx의 FPGA를 사용하고 있고, 개인적으로도 Xilinx FPGA를 많이 사용해 봤습니다. 하지만 최근에 어떤 IP를 개발하고 테스트하는데 Altera Cyclone III FPGA를 사용해 봤습니다. Xilinx FPGA를 사용한 Board를 직접 개발해서 할 수도 있었지만, 범용으로 사용할 것도 아니고 IP 테스트용이므로 off-the-shelf board를 사서 쓰는 편이 좋다는 판단이었습니다. Verilog RTL을 구현하는데는 Xilinx나 Altera나 별 차이가 없겠지만, IP 테스트를 위해서 Board가 몇가지 기능을 지원해야 하는데, Altera Cyclone III FPGA Develpment Kit과 3rd party daughter board를 연결하면 그런 기능이 모두 해결되어서 선정하게 되었습니다.

Cyclone III series의 FPGA 중에서 가장 큰 FPGA가 달려 있는 board입니다.

이 보드는 USB 지원에 약간 문제가 있었습니다. 원래의 계획은 USB를 이용하여 PC에서 test data를 전달하고 그것을 board에서 동작시키는 것이 목적이었습니다만, USB 지원이 쉽게 되지 않았습니다. Board 설명에서는 FPGA Configuration을 위한 USB Blaster도 지원하고, 일반 USB를 지원하여  PC와 연결할 수 있다고 나오는데, 정작 Board에는 USB Type-B connector가 하나 뿐입니다. Board 내부의 Altera Max CPLD를 이용하여 USB Blaster 기능과 사용자의 USB 기능을 switching할 수 있도록 되어 있는 것 같은데, 정작 USB를 직접 사용하는 design example을 제공해 주지도 않습니다. 어떻게든 가능하게 만들 수는 있겠지만, 시간이 없어서 USB를 사용하겠다는 생각은 포기하고 다른 방법을 사용했습니다.

Altera FPGA는 수년 전에 Startix II를 한번 사용해 봤을 뿐인데, 그 때도 그다지 자세히 살펴보지는 않았습니다. Cyclone III를 사용하면서 좀 자세히 살펴 봤는데, Xilinx의 Spartan-3에 비해 아래와 같은 장점이 있는 것 같습니다.

(1) Hardwired multiplier 갯수
Xilinx의 Spartan-3의 경우 18x18 multiplier와 accumulator 등이 내장된 DSP block이라는 hardwired logic이 있는데 Cyclone III는 18x18 multiplier만 hardwired logic으로 들어 있습니다. 대신 비슷한 가격대의 device를 비교하면 Cyclone III가 월등히 많은 multiplier가 들어 있습니다. 이번에 테스트한 IP도 FIR Filtering이 필요해서 multiplier를 사용했는데 Cyclone III가 이런 부분의 사용에서는 유리할 것으로 보입니다.

(2) PLL
FPGA에는 clock에 관련된 hardwired module을 제공해서 clock synthesize나, delay 조정등을 할 수 있도록 되어 있습니다. Altera와 Xilinx에서 제공하는 clock module의 기능이 너무 복잡해서 모든  feature를 비교할 경우는 모르겠지만, 단순히 입력 clock의 frequency를 multiply하고 divide하는 기능만 보면 Altera의 cyclone III가 Xilinx의 spartan-3보다 뛰어납니다. Cyclone III의 경우 512배의 multiply와 divide를 지원하는데 반해 Spartan-3는 32배씩만 지원합니다. 물론 Cyclone III의 경우도 PLL의 동작 조건 등을 만족시키려면 512배를 완전 자유롭게 사용하지는 못합니다만, 좀 더 자유로운 편임은 분명합니다. 이번 테스트에서도 clock divide 값으로 143을 써야하는 경우가 있었는데, PLL 한 개만 사용해서 깔끔하게 끝나더군요.

  • SOPC를 이용한 NIOS II system
테스트를 위해서 사용할 외부 chip 하나가 SPI를 이용하여 레지스터 셋팅을 필요로 해서 Altera NIOS II를 이용해 봤습니다. SPI를 통해서 레지스터 세팅하는 부분도 hardware RTL로 coding하면 되지만, 셋팅값을 이리 저리 바꾸는데는 아무래도 software를 이용하는 편이 좋을 것 같아서 한 번 사용해 봤습니다.
Xilinx에서는 "따라해 보세요" 스타일의 문서를 제공해서 그것만 읽으면 쉽게 따라할 수 있는데, Altera는 그런 문서가 없어서 Altera에서 제공하는 video를 보고 따라해 봤습니다.

(1) SOPC Builder
Xilinx에서 제공하는 Platform Studio와 비슷한 기능이 있는 tool입니다. NIOS II CPU Subsystem을 GUI 환경에서 만들 수 있도록 합니다. 다른 점이 있다면 Platform Studio는 FPGA Top을 만들어 주는 대신 SOPC는 module을 만들어 줍니다. 즉, FPGA Top은 Schematic Editor를 사용하거나 아니면 HDL을 이용하여 사용자가 직접 묶도록 되어 있습니다. 불편한 대신 장점이 있는데 FPGA 하나에 서로 다른 CPU Subsystem을 여러개 넣는 것도 가능한 것으로 보입니다. 즉 NIOS II CPU를 여러개 독립적으로 넣어서 구동하는 것도 쉽게 가능한 것으로 보입니다.

약간 불편한 점이라고 하면 MegaWizard와 같이 project를 만들지 않고 그냥 IP 형태로 만들어 두는 것은 지원하지 않는 것 같습니다. Quartus II에서 project를 만들어야 SOPC를 띄울 수 있도록 되어 있습니다. 사용한 버젼이 9.1이었는데 추후 버젼에서는 개선될 지 모르겠습니다.
 그리고 사용자 IP를 BUS(Altera는 Avalon이라는 BUS 사용)에 붙이려면 어떻게 해야 하는지, Wizard나 아니면 쉬운 예제같은 것을 찾기 힘들었습니다. 모든 문서 자료를 꼼꼼하게 살피면 당연히 가능하겠지만, 쉽게 찾을 수는 없었습니다. 대신 IP 테스트를 위해서 필요했던 enable/reset 관련 몇개의 signal을 BUS에 붙이는 대신 그냥 GPIO에 연결해서 가볍게 해결했습니다. 이런 부분은 Top을 사용자가 만들수 있으므로, Xilinx에 비해서 훨씬 쉽게 느껴졌습니다.

(2) NIOS II EDS(Embedded Design Suite)
Xilinx SDK와 동일한 기능을 제공하는 tool로, NIOS II CPU용 software를 만들 수 있도록 해 줍니다. Xilinx와 마찬가지로 Eclipse 기반으로 동작하고, JTAG(USB Blaster)을 이용하여 debugging합니다. Eclipse 기반의 IDE를 사용해 본 사람이라면 크게 문제 없이 적응할 수 있습니다. EDS만 관련된 것은 아니지만, 콘솔로 UART를 사용하지 않고, JTAG(USB Blaster)를 사용하도록 되어 있다는 점이 독특합니다. Software에서 printf 등으로 출력한 결과를 eclipse 환경에서 창이 하나 열리면서 보여주는 형태로 되어 있습니다. 따라서 보드에 시리얼 연결 등의 기능이 없어도 디버깅에 무리가 없습니다.
사용하는 중에 약간의 문제가 있었는데, EDS를 이용하여 build한 software binary와 FPGA configuration bitstream을 어떻게 합치는지 찾을 수 없었습니다. Xilinx SDK에서는 기본적으로 software binary와 bitstream을 합쳐서 FPGA download하는 방법으로 진행되므로 합쳐진 bitstream을 쉽게 찾을 수 있는데, NIOS II EDS는 hardware bitstream을 별도로 download한 후에 software binary는 추후에 download하는 방식이라서 합치려면 별도의 작업을 통해서 해야 할 것 같습니다. 그런데 몇가지 문서를 살펴 봐도 software binary를 bitstream(sof 파일)과 합치는 방법에 대해서는 자세히 나와 있지 않는 것 같습니다. 좀더 깊게 조사하면 방법을 찾을 수 있었겠지만, 결국에는 합치지 못했습니다. 어짜피 IP 테스트용이니까 별로 상관이 없었습니다.

  •  기타
사용한 board에서 LVDS와 같은 differential I/O로 연결해야 하는 부분이 있었는데, 이 부분에서 문제가 있었습니다. Differential I/O 핀이 Single Endede I/O(LVTTL 같은 애들) 핀과 가까이 있으면 Signal Integrity에 문제가 있다고 하면서 Quartus II에서 routing을 하지 못하더군요. 당연히 핀 사이에 노이즈가 문제가 될 수 있으므로 그것을 막고자 한 것 같은데, digital logic만 주로 설계한 사람으로서 처음 보는 에러였습니다. Xilinx FPGA에서도 비슷한 문제가 생길 수도 있을 것 같은데, LVDS를 많이 사용해 보지 않아서 확실하지는 않습니다. 아무튼 Altera FPGA에서 LVDS와 같은 differential I/O를 사용하는 경우에는 아무 pin이나 마구 쓰면 안되므로, Board 설계할 때 신경을 좀 써야 할 것 같습니다.

  • 마치며
Altera FPGA및 tool이 불편하다는 식의 이야기를 주로 한 것 같은데, Xilinx FPGA를 주로 사용했던 사람으로 느끼는 어쩔 수 없는 것일 뿐이고, Altera FPGA가 나쁘다는 이야기는 아닙니다. Altera에서 제공하는 모든 문서 자료나 video 등을 살펴보면 불편하거나 잘 안되는 부분도 해결할 수 있었을 겁니다. 다만, Altera website에서 빠른 시간 안에 딱 필요한 자료를 찾는 것이 쉽지는 않았습니다. 역시 Xilinx FPGA를 주로 사용했던 사용자라서 느끼는 점인지도 모르겠습니다.
참고로 개발한 IP는 Cyclone III FPGA Development Kit에서 잘 동작했습니다.