ASIC SoC2010. 11. 13. 10:26
이전에 정리한 글에서 tesebench에 해당하는 부분을 정리합니다.

verilator를 거쳐서 빌드한 소스코드에는 다음과 같은 파일들이 생성됩니다.

GUNDAM-NT:obj_dir kevinim$ ls
Vdff_sync_reset.cpp           Vdff_sync_reset.mk            Vdff_sync_reset__Syms.h       Vdff_sync_reset__verFiles.dat
Vdff_sync_reset.h             Vdff_sync_reset__Syms.cpp     Vdff_sync_reset__ver.d       Vdff_sync_reset_classes.mk

위의 코드에서 중요한 것은  헤더 파일인 Vdff_sync_reset.h 파일입니다.
내용을 보면

#ifndef _Vdff_sync_reset_H_
#define _Vdff_sync_reset_H_

#include "verilated.h"
class Vdff_sync_reset__Syms;

//----------

VL_MODULE(Vdff_sync_reset) {
  public:
    // CELLS
    // Public to allow access to /*verilator_public*/ items;
    // otherwise the application code can consider these internals.

    // PORTS
    // The application code writes and reads these signals to
    // propagate new values into/out from the Verilated model.
    VL_IN8(clk,0,0);
    VL_IN8(data,0,0);
    VL_IN8(reset,0,0);
    VL_OUT8(q,0,0);

    // LOCAL SIGNALS
    // Internals; generally not touched by application code

    // LOCAL VARIABLES
    // Internals; generally not touched by application code
    VL_SIG8(__Vclklast__TOP__clk,0,0);
    //char      __VpadToAlign13[3];
....

코드의 중간에 입출력 신호로 clk,daa,reset,q가 선언되어 있는 것을 볼 수 있습니다.
대략 통밥으로 굴리면 매크로만 보아도 8비트  char 타입으로 선언된것을 알 수 있습니다. ㅋㅋ
전체적으로는 클래스를 선언하고 입출력 포트는 해당 타입에 맞는 변수로 선언하는 것을 알 수 있습니다.
-  원래 C++로 하면 이렇게 밖에 할 수 없죠..
입출력 변수들은  public 에 위치시키고 있습니다.

그러면 이렇게 선언된 입출력 변수들을 main에서 access하기위해서는
class의 public 변수 참조 방식을 그대로 사용합니다.

#include "Vdff_sync_reset.h"
...
Vdff_sync_reset *dff_sync_reset;
...
 dff_sync_reset = new Vdff_sync_reset;
....
                if (( main_time % 10) == 1) {
                    dff_sync_reset->clk = 1;       // Toggle clock
                }
                if (( main_time % 10) == 6) {
                    dff_sync_reset->clk = 0;
                }
...

위와 같이 합니다. 일단 header파일을 인쿨루드 한 후에
module의 포인터를 선언하고
new로 해당 모듈을 생성합니다.

나머진 모듈(클래스)의 public값 쓰듯이 작업하면 됩니다.

testbench 격인 C++코드는 아래와 같은 구조로 되어 있습니다.

double sc_time_stamp () {       // Called by $time in Verilog
        return main_time;
}
        
int main(int argc, char** argv) {
            Verilated::commandArgs(argc, argv);   // Remember args
            dff_sync_reset = new Vdff_sync_reset;             // Create instance
            
......
            cout << "Start Simulation" << endl;  

            while (!Verilated::gotFinish()) {
  ........
                main_time++;            // Time passes...
            }
            dff_sync_reset->final();               // Done simulating
            //    // (Though this example doesn't get here)
            cout << "End Simulation" << endl;
}

main_time 변수는 verilog에서 $time을 호출할 때 반환되는 변수입니다.
verilog에서 $time을 호출하면 sc_time_stamp를 호출하게 되고 이때 main_time을 반환합니다.

main함수는
  초기화 블럭과
  무한 루프 블럭으로 나누어집니다.
   
  초기화 블럭은 시스템의 입출력 값을 초기화 시키는 것을 먼저 하고
  무한 루프 블럭에서 이리저리 한 작업을 계속 하게 됩니다.
  지정된 조건에 부합되면 무한 루프를 빠져나오면 되고요,
  만약 Verilog 에서 $finish를 호출하게 되면

  Verilated::gotFinish()

  에서 true를 돌려주게 되어 루프를 빠져나가게 됩니다.
  이후 작업은 finsh작업에 해당합니다.








Posted by GUNDAM_IM
ASIC SoC2010. 11. 13. 10:11
맥을 가진자의 숙명으로 그런 저런 불편함을 감수하면서 살아가고 있는 중에
몇일전에 날라온 메일을 보다가 발견한것이 Verilog 시뮬레이터인 Verilator입니다.
VCS라던가 다른 넘들처럼 Cycle Based Simulation 을 진행하여
엄청 빠른것을 자랑하고 있습니다. 흠...
여타 RTL 시뮬레이터 보다 2~30배 빠르다는 둥 하여튼 열심히 이야기하고 있길래 한번 사용해보고 사용법을 정리하였습니다.

Verilator는 엄밀하게는 시뮬레이터가 아니고 Verilog, SystemVerliog 등을 SystemC나 C++등으로 변환시켜주는 툴입니다. 실행파일로 만들어주니까 빠르게 된다는 것을 장점으로 삼고 있습니다.


(1) 설치하기
   
     설치하려면 gmake등이 필요합니다.
     일단 gmake는
 
     su port install gmake

    하고 루트 암호를 넣어주면 잘 설치가 됩니다.
 
    verilator는 아래 사이트에서 다운 받습니다.

   http://www.veripool.org/

   압축을 풀고 다음과 같이 진행합니다.

   ./configure
   gmake
   make test
   sudo make install

   차례로 치면 컴파일과 설정이 됩니다.

   체크는  
   
   verilator --help

   하면 쭈욱 화면에 프린트가 됩니다.

(2) 빠른 부분에 대한 설명

   홈페이지에 보면 아래와 같이 되어 있습니다. VCS대비 1.5배 NC-Verilog 대비 3배 빠르다고 나옵니다.

  • Verilator is 90x faster than Icarus Verilog.
  • Verilator is 10-40x faster than Modelsim SE.
  • Verilator is 3x faster than NC-Verilog.
  • Verilator is 1.5x faster than VCS.
  • VTOC is 4x faster than Verilator.
  • VTOC is 50x faster than NC-Verilog.
  • VCS is 3x faster than Verilator.
  • VCS is 3x faster than NC-Verilog.
  • VCS is 10x faster than NC-Verilog.
  • VCS is the same speed as NC-Verilog.
  • CVer is the same speed as Icarus Verilog.
 
   이렇게 빠른것은 Verilog Simulator가 아니라 Verilog Compiler입니다.
   verilog 코드를 받아 들여서

   C++이나 SystemC, SystemPerl ( 이건 왜나오는건지.. ) 등으로 바꾸는 역활을 합니다.

(3) 사용법에 대해서는....
    
    두단계로 나누어서 작업합니다.
   
    일단 Verilog Code가 완성 된 뒤에
    testbench에 해당하는 main.cpp를 만들어 둡니다.

    (1) C++ 코드로 만들기
         verilator는 시뮬레이터가 아니라 verilog를 c++등으로 바꾸어주는 translator에 가깝습니다.
        
         verilator를 이용해서 C++을 만들어 가는 것이 첫번째 작업입니다.

    (2) C++ 코드 빌드하기
        만들어진 코드는 obj_dir 이라는 폴더에 생깁니다.
        이 폴더에 보면 make파일이 생성되는데 이 make파일을 이용해서 실행 화일을 빌드하는 것이
       두번째 작업입니다.
        
    
  사용될 verilog code는 아래와 같습니다.
  간단한 DFF의 예제입니다.

//-----------------------------------------------------
// Design Name : dff_sync_reset
// File Name   : dff_sync_reset.v
// Function    : D flip-flop sync reset
// Coder       : Deepak Kumar Tala
//-----------------------------------------------------
module dff_sync_reset (
data   , // Data Input
clk    , // Clock Input
reset  , // Reset input
q        // Q output
);
//-----------Input Ports---------------
input data, clk, reset ;

//-----------Output Ports---------------
output q;

//------------Internal Variables--------
reg q;

//-------------Code Starts Here---------
always @ ( posedge clk)
if (~reset) begin
  q <= 1'b0;
end  else begin
  q <= data;
end

endmodule //End Of Module dff_sync_reset

 인터넷에서 구할 수 있는 간단한 dff의 예제입니다.
 
 자세한 설명은 나중에 하고 testbench에 대한 코드는 아래와 같습니다.

#include <verilated.h>          // Defines common routines
#include "Vdff_sync_reset.h"               // From Verilating "top.v"

Vdff_sync_reset *dff_sync_reset;                      // Instantiation of module
unsigned int  main_time = 0;     // Current simulation time

double sc_time_stamp () {       // Called by $time in Verilog
        return main_time;
}
        
int main(int argc, char** argv) {
            Verilated::commandArgs(argc, argv);   // Remember args
            dff_sync_reset = new Vdff_sync_reset;             // Create instance
            
            dff_sync_reset->reset = 0;           // Set some inputs

            cout << "Start Simulation" << endl;  

            while (!Verilated::gotFinish()) {
                if (main_time > 10) {
                    dff_sync_reset->reset = 1;   // Deassert reset
                }
                if (( main_time % 10) == 1) {
                    dff_sync_reset->clk = 1;       // Toggle clock
                }
                if (( main_time % 10) == 6) {
                    dff_sync_reset->clk = 0;
                }
                dff_sync_reset->eval();            // Evaluate model
                //cout << "Output : " << hex << dff_sync_reset->q << endl;       // Read a output
                printf("SIM %010d : (reset) %d, (clk) %d, (data) %d , (q) %d\n", main_time ,                                                    dff_sync_reset->reset ,  
                                                  dff_sync_reset->clk,
                                                  dff_sync_reset->data,
                                                  dff_sync_reset->q );
                main_time++;            // Time passes...
 
                if( main_time == 20) dff_sync_reset->data = 1 ;
                if( main_time == 80) dff_sync_reset->data = 0 ;
                if( main_time > 100) break;

            }
            dff_sync_reset->final();               // Done simulating
            //    // (Though this example doesn't get here)
            cout << "End Simulation" << endl;
}

 verilog code의 파일명은 dff_sync_reset.v 이고
c++ 테스트 벤치 코드는 dff_sync_reset_main.cpp 으로 지정해 둡니다.

그리고 make파일을 만드는 명령은 아래와 같습니다.

verilator --cc  -exe dff_sync_reset_main.cpp  dff_sync_reset.v

--cc 옵션은 c++ 형태로 코드를 만들어 돌라는 의미입니다.
-exe 옵션은 실행 파일로 만들어 돌라는 옵션입니다.
       이 옵션이 없으면 .a 파일인 라이브러리 파일로 만들어집니다.
       이 옵션을 주게 되면 main() 함수를 찾게 되는데 이 것으 없으면 나중에 컴파일 시에 오류가 발생합니다.
       따라서 main()함수가 포함된 .cpp파일을  --exe 옵션 뒤에 명시합니다.

그러면 obj_dir 폴더가 만들어집니다.

GUNDAM-NT:test kevinim$ cd obj_dir/
GUNDAM-NT:obj_dir kevinim$ ls
Vdff_sync_reset.cpp           Vdff_sync_reset.mk            Vdff_sync_reset__Syms.h       Vdff_sync_reset__verFiles.dat
Vdff_sync_reset.h             Vdff_sync_reset__Syms.cpp     Vdff_sync_reset__ver.d        Vdff_sync_reset_classes.mk

해당 되는 폴더에 들어가면 위와 같은 파일들이 있습니다.

나머지 파일은 넘어가고 .mk 파일이 make 파일입니다.

빌드는 아래와 같이 수행합니다.


GUNDAM-NT:obj_dir kevinim$ make -f Vdff_sync_reset.mk
g++  -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVL_PRINTF=printf -DVM_TRACE=0 -DVM_COVERAGE=0        -c -o dff_sync_reset_main.o ../dff_sync_reset_main.cpp
g++  -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVL_PRINTF=printf -DVM_TRACE=0 -DVM_COVERAGE=0        -c -o verilated.o /usr/local/share/verilator/include/verilated.cpp
/opt/local/bin/perl /usr/local/share/verilator/bin/verilator_includer Vdff_sync_reset.cpp > Vdff_sync_reset__ALLcls.cpp
g++  -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVL_PRINTF=printf -DVM_TRACE=0 -DVM_COVERAGE=0        -c -o Vdff_sync_reset__ALLcls.o Vdff_sync_reset__ALLcls.cpp
/opt/local/bin/perl /usr/local/share/verilator/bin/verilator_includer Vdff_sync_reset__Syms.cpp > Vdff_sync_reset__ALLsup.cpp
g++  -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVL_PRINTF=printf -DVM_TRACE=0 -DVM_COVERAGE=0        -c -o Vdff_sync_reset__ALLsup.o Vdff_sync_reset__ALLsup.cpp
      Archiving Vdff_sync_reset__ALL.a ...
ar r Vdff_sync_reset__ALL.a Vdff_sync_reset__ALLcls.o Vdff_sync_reset__ALLsup.o
ar: creating archive Vdff_sync_reset__ALL.a
ranlib Vdff_sync_reset__ALL.a
g++    dff_sync_reset_main.o verilated.o Vdff_sync_reset__ALL.a    -o Vdff_sync_reset -lm -lstdc++  2>&1 | c++filt

  이상 없이 빌드 되었으면 실행하면 됩니다.

GUNDAM-NT:obj_dir kevinim$ ./Vdff_sync_reset
Start Simulation
SIM 0000000000 : (reset) 0, (clk) 0, (data) 0 , (q) 0
SIM 0000000001 : (reset) 0, (clk) 1, (data) 0 , (q) 0
SIM 0000000002 : (reset) 0, (clk) 1, (data) 0 , (q) 0
SIM 0000000003 : (reset) 0, (clk) 1, (data) 0 , (q) 0
SIM 0000000004 : (reset) 0, (clk) 1, (data) 0 , (q) 0
SIM 0000000005 : (reset) 0, (clk) 1, (data) 0 , (q) 0
SIM 0000000006 : (reset) 0, (clk) 0, (data) 0 , (q) 0
....

대충 움직이는 것을 확인해 볼 수 있습니다.

다음번에는 wave로 덤프하는 것을 추가해보도록 하겠습니다.


        

    

Posted by GUNDAM_IM
ASIC SoC2010. 10. 30. 20:39
간만에 다시 하는 코딩을 위해서
이번에는 Emacs에서 Verilog 를 사용하고 해보기로 했습니다.
- 작년에는 거의 Verilog Template language + Perl Stript Compiler만을 사용해서 이넘을 사용해 보고 싶었지만, 사용해볼 기회가 별로 없었기 때문입니다.


Emacs에서 Verilog Mode를 사용하는 것은
VHDL Mode보다는 조금 불편한데요.. 특히 Template기능이 VHDL에 비해서 약해서 그렇습니다.

VHDL은 거의 Editer + Template수준으로 만들어 내었는데 Verilog는 Syntax Highlite 기능으로만
버텨왔기 때문입니다.

요새는 많이 좋아져서 어느정도 자동화 기능을 백그라운드로 돌리면서 에디팅을 할 수 있도록 지원해주고 있습니다.

그런 기능을 활용하기 위해서는 verilog mode를 설치해야 합니다.

http://www.verilog.com/emacs_install.html

위 사이트에 가면 알수 있습니다.
최신 Linux에서는 verilog mode를 디폴트로 가지고 오는데 MAC은 없는 관계로 위의 사이트의 내용을 참조로 해서 수정해야 운용이 가능합니다.

루트 폴더에서 .emacs 파일을 만들어서
다음과 같은 내용을 넣어 둡니다.

------------- BEGIN ----
(defun prepend-path ( my-path )
(setq load-path (cons (expand-file-name my-path) load-path)))

(defun append-path ( my-path )
(setq load-path (append load-path (list (expand-file-name my-path)))))
;; Look first in the directory ~/elisp for elisp files                                                                        
(prepend-path "~/elisp")

;; Load verilog mode only when needed                                                                                        
(autoload 'verilog-mode "verilog-mode" "Verilog mode" t )

;; Any files that end in .v, .dv or .sv should be in verilog mode                                                            
(add-to-list 'auto-mode-alist '("\\.[ds]?v\\'" . verilog-mode))

;; Any files in verilog mode should have their keywords colorized                                                            
(add-hook 'verilog-mode-hook '(lambda () (font-lock-mode 1)))

;;; User customization for Verilog mode                                                                                      
 (setq verilog-indent-level             3
       verilog-indent-level-module      3
       verilog-indent-level-declaration 3
       verilog-indent-level-behavioral  3
       verilog-indent-level-directive   1
       verilog-case-indent              2
       verilog-auto-newline             t
       verilog-auto-indent-on-newline   t
       verilog-tab-always-indent        t
       verilog-auto-endcomments         t
       verilog-minimum-comment-distance 40
       verilog-indent-begin-after-if    t
       verilog-auto-lineup              'declarations
       verilog-highlight-p1800-keywords nil
       verilog-linter                   "my_lint_shell_command"
       )
---------------- END ------------
Verilog-linter는 아직 LINT해주는 툴을 OSX에서 최근에 발견했지만, 아직 테스트 하지 못해서 그냥 냅두었습니다.

사용법은 생각보다 쉽습니다.

중요한 요소에다가 Comment 처리된
/*AUTOXXXX*/
를 넣어두고

코딩이 끝나면

Control-C Control-Z

를 하면 됩니다.

예는 아래와 같습니다.
사용자 삽입 이미지












위와 같이 중요 포인트에 /*AUTOXXX*/ 를 넣고
Ctrl-C Ctrl-Z
를 넣으면

아래와 같이 변합니다.

사용자 삽입 이미지




























위에서
always @ (/*AUTOSENSE*/)
를 하여지만 약어로
always @ (/*AS*/)

하여도 됩니다.

위에서 안보이는 것으로는 /*AUTORESET*/ 기능입니다.

   always @ (posedge clk)
   if ( reset ) begin
       /*AUTORESET*/
   end
   else begin
      a <= b;
   end

위의 코드를 가지고 Ctrl-C Ctrl-Z를 하면

   always @ (posedge clk)
   if ( reset ) begin
       /*AUTORESET*/
       // Beginning of autoreset for uninitialized flops                                                                      
       a <= 1'h0;
       // End of automatics                                                                                                  
   end
   else begin
      a <= b;
   end

으로 뒤져서 초기화가 안되는 변수에 대해서 리셋 구문을 자동으로 해줍니다.

그외에


AUTOASCIIENUM

AUTOINOUTMODULE

AUTOTIEOFF

AUTOUNUSED

AUTOINSERTLISP

AUTO_TEMPLATE

AUTOINSTPARAM


과 같은 AUTOx가 있습니다.


이중에서 AUTOASCIIENUM이 좋은넘인데요

Verilog는 VHDL과 틀려서 변수를 Char로 표시하는 것이 만만찮습니다.

ENUM String을 지원하지 않아서 생긴 문제입니다.

이것때문에 디버깅시에 머리속에서 상수값을 다시 ASCII로 변환하면서 일일이 디버깅해야 하는데

요런 문제를 해결하기 위해서 나온 AUTOx가 AUTOASCIIENUM 입니다.


//== State enumeration
parameter [2:0] // synopsys enum state_info
SM_IDLE = 3'b000,
SM_SEND = 3'b001,
SM_WAIT1 = 3'b010;

//== State variables
reg [2:0] /* synopsys enum state_info */
state_r; /* synopsys state_vector state_r */
reg [2:0] /* synopsys enum state_info */
state_e1;

//== ASCII state decoding
/*AUTOASCIIENUM("state_r", "_stateascii_r", "sm_")*/

위의 코드를 AUTOx로 변환시키면


//== ASCII state decoding
/*AUTOASCIIENUM("state_r", "_stateascii_r", "sm_")*/
// Beginning of automatic ASCII enum decoding
reg [39:0] _stateascii_r; // Decode of state_r
always @(state_r) begin
casex ({state_r}) // synopsys full_case parallel_case
SM_IDLE: _stateascii_r = "idle ";
SM_SEND: _stateascii_r = "send ";
SM_WAIT1: _stateascii_r = "wait1";
default: _stateascii_r = "%Erro";
endcase
end
// End of automatics


위와 같이 됩니다. 따라서 state_r이라는 값을 모니터링하면 현재 상테를 추적해 갈 수 있습니다.


--------------------------------


요새 거의 뜸했던

간만에 하는 ASIC 관련 포스팅이었습니다.


'ASIC SoC' 카테고리의 다른 글

맥에서 Verilog Simulation 하기 (2)  (0) 2010.11.13
맥에서 Verilog Simulation 하기  (0) 2010.11.13
사상 최강의 보드  (2) 2010.04.18
[MIPS] MIPS assembler simulator XSPIM  (8) 2010.03.21
HD Quad Display/Processing Engine  (1) 2010.03.12
Posted by GUNDAM_IM
Life is ..2010. 9. 20. 07:55
남자의 자격의 넬라판타지아 입니다.


요새 무한도전과 함께 최고 이슈인 프로그램입니다.
아시는 바와 같이 넬라판타지아를 불렀습니다.

넬라판타지아는 저도 CD를 가지고 있는데 그것을 샀을때 기억이 납니다.
예전에 종로 지하상가에서 이 노래를 사라브라이트만것을 틀어주었는데,
노래가 너무 이뻐서 길가던 모든 사람들이 멈추어서 노래를 듣고, 노래가 끝나자마자 노래를 듣던 사람들이 CD를 샀었습니다. 저도 그떄 샀었죠..
집에서 틀었는데 음색이 그때 느김이 안나서 Audio System을 업그레드 하곤 했었습니다.
나중에 그 지하상가 스피커 가격을 알아보고는 입이 떡 벌어졌었습니다.
TT_TT
지금 보유한 A/V 시스템의 3배 정도 가격이더군요

아래는 사라브라이트만의 공연 동영상입니다.

분장이 키메라 삘이 나는것도 흥미이지만, 정말 노래는 정말 이쁩니다.

요샌 저도 글을 안올리고 동영상만 올리며 땜빵하고 있네요 ^^

Posted by GUNDAM_IM
MAC Life2010. 9. 15. 05:09
서버 설정에 대한 자료가 있는 사이트입니다.

따라해보세요 정도의 수준이어서 쉽습니다.

http://www.wazmac.com/servers_network/fileservers/osxserver_setup/osxserver106_setup.htm
Posted by GUNDAM_IM
MAC Life2010. 9. 12. 20:13

Apple Mac mini server part 2 - basic installation/configuration



Apple Mac mini server - Part 3 Introduction to server admin


Apple Mac mini server - Part 4 Users and file sharing


Apple Mac mini server - Part 5 OSX server remote install






Posted by GUNDAM_IM
MAC Life2010. 9. 12. 10:11
장난감 들어와서 이걸 가지고 밤새 서버 설치하고 닥질했습니다.
내부 내트웍에서 접속하면 잘 되는데 외부 내트웍으로 들어오면 Ping은 잘 되는데
HTTP는 안되는 문제가 있어서 이것을 고치는 중이었습니다.

그러다가 문제를 생각해낸게 DMZ  서버랑 내부 할당 DHCP IP랑 틀리면 안될 거라는 생각이 팍 들면서
이걸 수정하니까 잘 되네요 TT_TT

아...
이것 땜에 서버를 2번 설치하다니 TT_TT

나중에 또 닥질하기 전에 일단 기록을 해 놓습니다.

1. DMZ 서버 설정

사용자 삽입 이미지
2. DHCP 고정 할당
사용자 삽입 이미지
이걸루 일단 외부에서 접속하는 것이 가능해졌습니다.
이제 다음은 메일 서버 설정으로 도전을..

Posted by GUNDAM_IM
Computer Vision2010. 9. 4. 10:59
오래간만에 시간이 조금 나서 OpenCV 2.1을 빌드해보았습니다.

크게 바뀐점은 이전에는 make로 했지만 지금은 cmake로 한다는 점입니다.

우선 아래사이트에서 소스 코드를 다운 받습니다.

   http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.1/

그리고 카피해서 압축을 풉니다.

   GUNDAM-NT:OpenCV kevinim$ cp ~/Downloads/OpenCV-2.1.0.tar.bz2 .
   GUNDAM-NT:OpenCV kevinim$ bzip2 -d OpenCV-2.1.0.tar.bz2
   GUNDAM-NT:OpenCV kevinim$ tar xvf OpenCV-2.1.0.tar  

일단 머신에 cmake가 없다면 설치를 합니다.
    http://www.cmake.org/cmake/resources/software.html
에 가면 소스랑 바이너리가 있는데 일단 귀찮으니까 바이너리를 받아서 설치합니다

빌드는 아래와 같은 순서로 합니다.

mkdir release
cd release
GUNDAM-NT:release kevinim$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..

이후에 make 를 하면 됩니다.

GUNDAM-NT:release kevinim$ make
Scanning dependencies of target zlib
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/adler32.o
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/compress.o
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/crc32.o
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/deflate.o
[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/example.o
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/gzio.o
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/infback.o
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/inffast.o
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/inflate.o
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/inftrees.o
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/trees.o
[  1%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/uncompr.o
[  2%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/zutil.o
Linking C static library ../lib/libzlib.a
[  2%] Built target zlib
Scanning dependencies of target cxcore_pch_dephelp
[  2%] Building CXX object src/cxcore/CMakeFiles/cxcore_pch_dephelp.dir/cxcore_pch_dephelp.o
Linking CXX static library ../../lib/libcxcore_pch_dephelp.a
[  2%] Built target cxcore_pch_dephelp
.......

마지막으로

sudo make install

을 하면 설치 완료

흠.. 이전보다는 쉬워졌습니다.

테스트는 간단한 샘플 프로그램을 실행하면 됩니다.

OpenCV src 폴더에서
cd samples/python

GUNDAM-NT:python kevinim$ python delaunay.py

을 하면 됩니다.

우선 에러가 발생하는데

Traceback (most recent call last):
  File "delaunay.py", line 9, in <module>
    import cv
ImportError: No module named cv

opencv 라이브러리 모듈을 찾지 못해서 발생한 오류입니다.
귀찮으니 소스 코드를 수정해 줍니다.

vi delaunay.py

파일의 시작 부분에 아래 행을 추가합니다.

import sys
sys.path.append("/usr/local/lib/python2.6/site-packages")

그런 뒤에 실행하면 됩니다.

사용자 삽입 이미지
사용자 삽입 이미지



'Computer Vision' 카테고리의 다른 글

OpenCV 2.3 Computer vision (2)  (0) 2011.09.05
OpenCV 2.3 Computer vision (1)  (2) 2011.09.05
SURF Lib  (3) 2010.06.22
Rob Hess의 SIFT [8]  (7) 2009.06.21
Rob Hess의 SIFT [7]  (1) 2009.04.30
Posted by GUNDAM_IM
Hobby2010. 7. 25. 18:56
동인게임이란 게임을 좋아하는 사람 혹은 사람들이 동호회처럼 팀을 짜서 만드는 게임을 말합니다.
장르에 동인 이라는 괜스레 19금을 연상시키는 단어가 쓰여있지만, 그렇다고 항상 그런 19금게임이 나오는게 아니라 정말 게임을 만들고 싶어하는 사람들이 만드는 게임입니다.  요즘같이 온라인 MMORPG가 세상을 뒤덮은 시대에 이런 게임 장르가 나온다는 것이 신선합니다.  

이웃나라 일본에서는 나름 큰 시장을 형성 하지만 우리나라에서는 아직 제대로 시장이 개화되어 있지 않아서 동인 게임을 만드는 대부분의 사람들은 포트폴리오를 구성해서 대형 게임 회사에 들어가는 하나의 수단으로 만들어지곤 합니다. 그래서 좀 아쉬운 부분도 있는 그런 게임 장르입니다. 그리고 아무래도 게임을 좋아하는 사람이 모이다 보니 인원과 재원의 문제로 복잡한 게임 보다는 비쥬얼 노블 형태의 게임으로 제작되는게 일반적인 경향입니다. 더구나 우리나라는 시장 규모가 작아서 더욱 비쥬얼 노블화로 흐르는 경향이 있습니다.

어찌되었건 시장의 규모 문제로 우리나라에서는 흔치 않은 장르의 게임인데 이번에 우연히 별견한 게임이 바로 이 동인 게임입니다.  

인테르메디오 프레스토 라는 동인 게임은 인테르메디오 씨리즈의 두번째 게임입니다. 정귀옥이라는 분이 혼자서 만드는 동인 게임입니다. 아니 정확하게는 곧 나올겁니다.  7월 발매인데 요새 불의의 사고(?)로 8월 발매로 미뤄졌군요

동인 게임이 국내에서는 몇 백장 팔리면 많이 팔린다고 하던데 이분은 1천장을 넘기는 것 같습니다.
대단하죠. 동인게임은 가장 큰 관건은 현재 만든 게임으로 다음 게임을 만들 수 있는 자원을 확보하는가가 관건입니다. 아무리 게임에 대한 열정은 무시무시하더래도, 금전적인 부분은 결국 벽으로 다가올 수 밖에 없기 때문이죠.  우리나라에도 동인 게임의 시장이 활성화 되길 바랍니다. 그래서 한분 한분이 장인으로 대접 받을 수 있는 세상이 오면 좋겠네요
 
 

"별의 목소리"라는 대단한 애니를 만든 일본의 신카이 마코토도 혼자서 스토리부터 작화까지 만드는 사람인데 일본에서는 정말 장인 대접 받고 있습니다. 사실 신카이 마코도의 애니는 다 가지고 있는데 애니를 보면 정말 대단하다는 생각이 들정도로 잘 만들었습니다. 애니란것도 혼자 만들 수 있구나 하는 생각이 들었으니까요. 내게도 그런 열정이 있었으면 반도체 안만들었을 텐데 라는 생각이 듭니다.

하여튼 고생한 만큼 성공하시길 바랍니다.
2탄의 예약 마감은 18일이라고 합니다. 어여 예약을....
했는데 초회 한정판은 예약 마감 되었네요
다음은 일반 한정판을 예약 하고 있습니다.

흠.. 이글의 초안을 쓸때가 월 초였는데 그동안 게을러서 차일 피일 정리하는 것을 미루다가 보니 마감일을 넘겼습니다.

지금은

쩝..


아래는 게임 오프닝 영상입니다.



제 친구들도 게임만드느라 청춘을 다 불살르고 있고, 또 아직도 열혈 게임 자작자라서 그런지
이렇게 게임에 열정을 가진 사람들 보면 한편으로는 부럽습니다.

무엇 하나에 이렇게 까지 열정을 바칠수 있는 분들이니까요
모쪼록 좋은 결과 있으시길 바랍니다.

아래는 체험판 그림입니다.
사용자 삽입 이미지

사용자 삽입 이미지

'Hobby' 카테고리의 다른 글

타이페이 공항에서 본 건담  (0) 2011.04.24
다시 와우의 세계로  (0) 2011.02.25
TRON Legacy  (0) 2010.04.07
AileStrike GUNDAM 실사판 합성  (2) 2010.03.17
GANTZ 레이카 피규어  (2) 2010.02.09
Posted by GUNDAM_IM
Life is ..2010. 7. 19. 02:51
인터넷 웹서핑 하다가 발견한 만화 씨리즈에서 정말 공감가는 카툰을 몇개 옮겨 봤습니다.
지나보면 저도 이런 식으로 커뮤니케이션을 많이 하는데...
하는 사람도 괴롭고 시키는 저도 괴롭고.. 쩝
개선해야 할텐데.. 하면서 안되는 부분도 많네요


사용자 삽입 이미지
    예전에 내가 제일 싫어하는 말이 "경험으로 보면 이게 맞아" 라는 말이었다.
    상사께서 그런 말을 자주 하는 편이었는데 그분도 그게 의식적으로 그런 말을 하는지 모르고 계속 쓰는것
    이라 생각했다.  하지만 지금은 내가 이 말을 가장 자주 쓰고 있는것 같다.
    그만큼 내가 빈약한 커뮤니케이션을 하고 있다는 의미이다. TT_TT

    
사용자 삽입 이미지
            다 먹고 살자고 하는것인데로...
            하는 말이지만, 저 조인트를 풀기가 정말 쉽지가 않은 상황에 많이 처하게 된다.
            알기 때문에 시키지 말아야 할 일들이 너무 많지만, 알면서도 시켜야 하는 것도 많다.
 
            
사용자 삽입 이미지
       이런 분 밑에서 일하는 것 보다는 뛰어내리고 싶은것이 더 많았다.
       불행인지 다행인지 이런 분들이 있는 곳은 언제나 오래 가지 못하고 붕괴되었다.
       결국 인사가 만사인데.. 정말 신기한 것은 저런 분들은 조직이 붕괴되어서 폐허가 되어도
       그 폐허 속 에서도 윗사람들과
       잘 붙어 다닌다는 것이다.  그런 재주를 누군가가 "수청" 든다고 하였던가....

       나에게는 정말 없는 재주이다. 그런 재주를 어찌... 아니 부럽다고 할 수 있겠는가 ?



      
사용자 삽입 이미지
         어떻게 하는 것이 맞는것인지 알면 얼마나 좋을까 ?
         노스트라다무스가 아니기에 하는 고민들..
         결국 많이 걸어 넣고 확률로 버티기를 하는 것이 아닐까?
 
         나도 초기에는 네모이면서 세모난 구멍을 많이 원했었다. 모르니까...
         지금도 모른다. 다만 네모이면서 세모난 구멍은 없다는 것을 알게 된 것이 차이점일 뿐이다.
         하지만 맘속으로는 아직 네모+세모난 구멍을 파는 것을 원하고 있다.
         "안되면 내가 팔거야" 하면서....
        
    
사용자 삽입 이미지
          수정쟁이 그것이 나의 직업...
          BJR족     그것이 나의 생활 방식
          
          좀더 차분히 갈 수 는 없을까 ?
          사람과 돈과 시간의 3차 변수 문제를 언제쯤 풀수 있을까 ?


Posted by GUNDAM_IM