ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [3]
----------------------------------------------
III. 기능 시뮬레이션(Functional Simulation)
기능 시뮬레이션은 구현 하려는 알고리즘과 HDL 로 기술된 행위의 등가성을 확인 하는 절차다. 알고리즘의 입출력 사양을 높은 추상화 수준의 C/C++로 기술하고 이를 실행시켜 얻는다. 이를 실행형 사양( executable specification)이라 한다. RTL 베릴로그 모델의 시험 기준(golden reference)이 된다.
ALU를 DUT(Design Under Test)로 하는 SystemC 테스트벤치를 작성 하고 이를 시뮬레이션을 통해 기능을 검증 한다. 사용할 시뮬레이션 도구는 앞서 설치한 SystemC와 OSS Cas Suite 와 함께 배포된 VERILATOR 다. 시뮬레이션을 위해 설정해 줘야 할 환경변수는 아래와 같다.
SystemC 소스 컴파일과 실행을 위한 환경변수들:
export SYSTEMC_HOME=$SYSTEMC
export SYSTEMC_INCLUDE=$SYSTEMC_HOME/include
export SYSTEMC_LIBDIR=$SYSTEMC_HOME/lib-linux64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SYSTEMC_LIBDIR
VERILATOR의 실행할 환경변수들은 OSS Cad Suite에 포함된 설정을 불러 쓴다.
source /usr/local/oss-cad-suite/environment
환경 설정을 일괄하여 모아 놓은 cad_env [download] 불러쓰면 편리하다.
III-1. SystemC 테스트 벤치
ALU를 DUT(Design Under Test)로 하는 SystemC 테스트벤치는 테스트 신호를 생성하는 쓰레드 Gen_Test_Thread()와 DUT로부터 출력을 검사하는 쓰레드 Monitor_Thread()를 포함한다. 베릴로그 RTL의 ALU는 베릴레이터를 사용하여 SystemC로 변환 하였다. SystemC 테스트벤치를 구성하는 파일은 다음과 같다.
- def_commands.h: 테스트벤치에서 사용하는 각종 상수들 정의
- sc_gen_test.h: 테스트 입력 신호 생성 쓰레드
- sc_monitor.h: DUT: 출력 검사 쓰레드
- sc_ALU_wrapper_top.h: 테스트 벤치 구성
- sc_main.cpp: sc_main()
RTL의 베릴로그 HDL 에서 SystemC 모델로 변환하는 베릴레이터의 명령은 아래와 같다. 현재 폴더에서 하위폴더 obj_dir에 변환된 C++ 코드가 가 저장된다.
위의 명령줄에서 --build 옵션의 사용으로 테스트벤치와 변환된 DUT의 SystemC 모델은 GNU C++ 컴파일러를 사용하여 실행 파일이 만들어진다. 이때 SystemC의 라이브러리를 링크하는데 환경변수로 그 경로가 미리 지정되어 있어야 한다. 환경변수 LD_LIBRARY_PATH 는 동적 연결 실행 라이브러리 .so (리눅스에서는 shared-object로 윈도우즈의 DLL, Dynamic Linking Library와 같다.)의 경로다. 컴파일 된 모델을 실행 시키면 이 경로상에서 SystemC.so를 찾아 시뮬레이션 엔진을 불러온다.
III-2. 기능 시뮬레이션
기능 시뮬레이션은 구현 하려는 알고리즘과 HDL 로 기술된 행위의 등가성을 확인 하는 절차다. 베릴레이터로 컴파일 한 SystemC 테스트 벤치는 obj_dir에 놓인다. 이를 실행하는 것으로 ALU의 기능을 검증한다.
두 레지스터 A 와 B에 각각 0xAA와 0x55를 적재시켜 놓고 OR 연산을 실시하여 그 결과는 0xFF가 나왔다. 이어 논리연산 AND 및 XOR, 그리고 산술 연산으로 덧셈 ADD 과 뺄셈 SUB을 실시한 결과를 볼 수 있다. 연산 결과와 함께 연산기의 상태를 보여주는 플래그 값도 출력시켰다.
----------------------------------------------
댓글 없음:
댓글 쓰기