Visual Studio Express 2008에서 OpenGL 사용

간단한 것이지만, 포맷 할 때마다 까먹는 내용이라서..

 

  1. Freeglut와 GLUT를 받아서 압축을 푼다.
  2. 모든 h 파일은 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include 에 복사한다.
  3. 모든 lib 파일은 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib 에 복사한다.
  4. 모든 dll 파일은 C:\Windows\system32 에 복사한다.

 

* 당연히 설치되어 있는 Microsoft SDK 버전이나 설치 경로에 따라 디렉토리는 약간씩 다를 수 있다.

 

OpenVG 관련되서 이런 저런 일을 하다보니 OpenGL을 사용할 일이 많습니다. 참조 구현(reference implementation)이 OpenGL 기반(이라고 하기도 그렇지요. 윈도우 띄우고 점 찍는데만 쓰고 있으니..)이라 관성이 생겨서 계속 쓰게 됩니다. Visual Studio Express는 MS에서 무료로 제공되는 툴이고, OpenGL도 이곳 저곳에 무료 구현이 많이 개발에 필요한 모든 것은 무료로 얻을 수 있지요.

일단 알고리즘 만들고, 검증차원에서 RI와 같이 돌리면서 이것 저것 헤집고 있는데, OpenVG RI는 일부러 이렇게 만든 것인지 몰라도, 정말 이해하기 쉽게 기본 알고리즘만으로 만들어져서 비효율적입니다. ^^; RI니까 기본적인 알고리즘에 충실하고 결과를 잘 보여주는 것이 목적이었을 테고, 그래서 소기의 목적을 달성한 것이지만, 가끔은 좀 심하다는 생각도 들죠. 혹시라도 이대로 구현하는 분이 있으면 망할 것 같다는 생각.

이미지 처리 알고리즘도 마찬가지.

사실 이미지 처리 하드웨어는 많은 회사에서 하고 있기는 한데, 가끔은 알고리즘을 그대로 구현하는 경우가 있습니다. 하드웨어에는 하드웨어에 적합한 알고리즘과 아키텍쳐가 있기 마련인데, 그냥 좋은 알고리즘이니 좋은 하드웨어가 나올 것이라 생각하는 경우가 예상외로 상당히 있습니다(특히 요즘엔, CAD툴들이 좋아져서 behavioral 기술에 아주 가까운 HDL코드도 잘 컴파일을 하니까 이런 경향이 커지는 것이겠지요). 예를 들어 많은 이미지 필터링과 관련 처리가 systolic array같은 간단한 아키텍쳐만 고려해서 알고리즘을 변경하면 상당히 효율적인 경우가 많은데, 프로세서로 처리하듯 연산기를 사용하고, 메모리 접근을 반복하도록 만드는 경우가 생각보다 많습니다. (생각하기야 간단 간단하게 만드는 것이 편하니 이렇게 하는 것이겠지만, 요구되는 메모리 대역폭과 하드웨어 소모를 생각하면 알고리즘을 이해하고 하드웨어로 최적화 할 수 있는 엔지니어를 채용하거나, 알고리즘 작성하시는 분들에게 다양한 하드웨어 아키텍쳐를 이해하도록 하는 것이 필요하겠습니다.

에구.. 항상 제목과 관계없는 이야기네..

 

에.. 엇나간 김에 하나 더.. 괜찮은 무료 음악 사이트… 인디 음악이긴 하지만, 좋은 곡이 많습니다. http://www.blayer.co.kr/

Synchronizer 시뮬레이션 문제

디지털 로직하는 사람들한테 타이밍 관련된 문제에서 가장 골치 아픈 것이 metastable 문제이라고 말씀 드렸었습니다. 사실, metastable을 피하는 방법은 예전에 한번 posting한 적이 있는데요.

요즘 IT-SoC의 온라인 강의를 듣다 보니 관련 내용이 있어서 간단한 팁을 하나 올립니다.

Metastable을 피하는 가장 머리가 편한 방법은 2개의 F/F을 직렬로 사용하는 2-flop 방법입니다. 저렴한 방법으로는 하나의 F/F을 사용하는 1-flop 방식도 있습니다만, 1-flop 방식은 첫 번째 F/F이 공교롭게 meta level에 걸리는 경우 뒷부분의 회로가 영향을 받아서 망가질 수 있는 단점이 있지요.

여하튼, 비동기적인 방법(stoppable clock과 같은 방식)을 사용하지 않는 경우에는 F/F을 부가하는 것이 가장 간단한 방법이라는 것이죠.

그런데, 1-flop이던 2-flop이던 F/F을 이용하여 동기화기(synchronizer)를 만들고 이 회로에 대한 타이밍 시뮬레이션 할 때, 동기화기로 사용한 F/F이 setup/hold timing을 만족하지 못하는 경우 F/F의 출력이 unknown으로 되어 전체 시뮬레이션이 망가지는 경우가 있다는 점이지요.

이 부분에 대하여 요즘 듣고 있는 강좌에서는 해당 Synchronizer를 instance할 때 특별한 이름(synchronizer)을 주고 이 부분에 대한 SDF를 조작해 주는 방법을 이야기했는데요.. 사실 좀 귀찮죠.. SDF 뽑은 다음에 조작하려면 손으로 하던지(설마요..^^;), scripting을 해야 하는데 말이죠.

쉬운 방법은 system_task를 사용하는 겁니다.

VerilogXL이나 NCverilog에서는 다음과 같은 명령이 있습니다. (Modelsim은 안써봐서 모르겠습니다.)

$disable_warnings(“timing”, hierarchy_path);

 

잠시 구글링 해보니 Modelsim에서는 다음과 같이 하면 되는 군요.

tcheck –off hierarchy_path

 

실제적으로 사용할 때는 synchronizer에 대하여 timing체크를 안하도록 하는 명령을 disable_path같은 곳에 주욱 나열하고 필요한 경우에 include해서 사용하는 거죠. 사실 이 disable path list는 false_path 잡을 때도 사용이 되겠지요.

`ifdef TIMING_SIM

`include “disable_path.v”

`endif

 

상당히 간단한 TIP입니다만, 모르면 고생하는 그런 내용이죠. ^^;

Cygwin에서 RXVT를 default terminal로 사용하는 방법

매우 간단한데 비교적 많은 분들이 모르는 듯 하여서..(회사 친구들도 제법 모르고..)

 

  1. cygwin 설치시 rxvt를 같이 설치합니다. (뭐, 나중에 setup 에서 추가 설치해도 관계 없습니다.
  2. cygwin.bat을 수정한다.

@echo off

 

C:

chdir C:\cygwin\bin

set TEXMFCNF=/usr/share/texmf-local/web2c

set CYGWIN=tty

C:\cygwin\bin\rxvt.exe -bg black -fg white -fn *바탕체-*-16-* -mcc -ls -g 100×55 -e bash –login -is

  1. 위의 부분에서 핵심은 –login 을 사용한다는 것. 폰트는 편한거 골라쓰세요.

 

rxvt를 현재 디렉토리에서 다시 띄우는 경우에는 .bash_profile에서 다음과 같이 설정하면 된다.

alias rxvt=’rxvt -bg black -fg white -fn *바탕체-*-16-* -mcc -ls -g 100×55 -e bash -i’

 

뭐, 위와 같이 별다를 것 없다.

RXVT는 cygwin 기본 터미널보다 유연합니다.. 이런건 많은 이야기가 필요없고, 단지 써보시면 아십니다. ^^;