2016년 1월 29일 금요일

Xilinx System Generator -- 04. Lab 2 - Design Creation Basics

오늘은 Lab 2다.

C:\Xilinx\14.7\ISE_DS\ISE\sysgen\examples\getting_started_training\lab2\lab2.mdl 파일을 열어보자.



설정 변경없이 시뮬레이션을 돌려서 파형을 확인해보자.


일단 여기까진 별거없음. 일반적인 시뮬링크 시뮬레이션인데 이걸 자일링스 블럭을 사용해서 똑같이 만들어보자.

FPGA 블럭의 시작과 끝에 Gateway In/Gateway Out이 있어야 한다는것과 Xilinx System Generator token이 꼭 있어야 한다는걸 생각하면서 아래와 같이 만들어보자. 블럭의 기본설정은 변경하지 않아도 된다.


자일링스 블럭의 출력을 확인해보면


이런식으로 discrete 신호 파형이 나온다.


일반 시뮬링크 블럭셋과 시스템 제너레이터 블럭셋의 출력신호 비교를 위해서 시뮬링크 모델을 살짝 수정하자.


그리고 위쪽 Scope 파형을 보자구.


확실히 출력이 다르다.



다음은 이렇게 만들어 보란다.

Compare the result from the executable spec vs. the Xilinx implementation using a Subtractor from the "Simulink/Math Operations" library.

executable spec이 일반 시뮬링크 블럭셋을 사용한거고
Xilinx implementation이 시스템 제너레이터 블럭셋을 사용했다는 의미인거 같은데...


출력 파형 함 보자.


1번 파형 : executable spec(일반 시뮬링크 블럭 사용)
2번 파형 : Xilinx implementation(시스템 제너레이터 블럭 사용)
3번 파형 : 1 - 2(1번 파형을 discrete 샘플링한 오차값)

머 이런식을 나온다.

Add 뒤에 Unit Delay를 3개 연결해서 테스트를 해보자.


이런식으로...

파형을 확인해보면


먼 상황인지 파악이 안되는데...

그럼 시그널을 모조리 확인해보자.


Unit Delay 단계별 파형을 확인해보면...


Unit Delay는 one sample period 신호 지연 출력이다. 더불어 discrete sampling까지...
3 unit delay를 해야 Xilinx implementation 출력과 비슷해진다. 자일링스 블럭 내부 전달 지연과 관계있는듯. 


자 다음은 합성을 해보자. 문서대로 진행하면 에러가 난다는걸 기억해두고 진행하자.


중간 부분의 System Generator Token을 더블클릭하면 이런 창이 뜬다.


Generate 눌러보자.

아 아니 아직 누르지 말고...

보통 Xilinx ISE 라이센스 파일은 C:\.Xilinx 폴더에 위치한다.
이걸 C:\Xilinx 폴더로 복사해라.

그다은 Xilinx ISE를 실행시켜서 Help의 Manage License를 실행해서XILINXD_LICENSE_FILE 항목을 C:\Xilinx\Xilinx.lic으로 설정하고 옆에 Set 버튼을 눌러라.


이거 하고나서 난 시원하게 재부팅을 했다.


이제 드디어 Generate를 눌러보자.


이게 나오면 성공했다는거다.

원래 Generate를 누르면 Gateway In 관련 fatal error이 뜨는데 이게 라이센스 파일 위치 관련 문제다. 이것에 대한 error report는 아래와 같다.

=======================================================
Description
While generating a netlist, a "Fatal Internal Error" occurs, reported by a simple model (eg constant).  
This issue does not occur every time.
After the error is received I cannot generate a netlist or run Hardware Cosim for a very simple design.
Restarting Matlab will sometimes fix the issue.
What is the cause of this problem?
This issue only affects 64bit Sysgen.

Sysgen encounters problems with the license file when it is located under C:\.Xilinx.
 
It can be fixed by leaving C:\.Xilinx empty, saving Xilinx.lic to a different location (for example C:\Xilinx_license\Xilinx.lic), and pointing to it by using the environment variable XILINXD_LICENSE_FILE
=======================================================

매트랩은 기본적으로 파일 패스에 매우 엄격한거같다. 파일의 경로 중 특수문자로 시작되거나 한글이거나 겁나게 길거나 하는 폴더명이 있으면 심각한 에로사항이 발생하는거 같으니 명심해두고 폴더명은 무조건 영문으로 심플하게 만들자. 머 이건 Matlab만의 문제는 아니지.


다음 단계로 넘어가보자.

시스템 제너레이터 토큰 포함해서 Gateway In과 Gateway Out 사이의 컴포넌트를 선택한 후 Create Subsystem from Selection을 해라.


이렇게 바뀐다.

만들어진 서브시스템을 복사해서 아래와 같이 만들어라.


이렇게 되면 각 서브시스템마다 시스템 제너레이터 토큰을 가지게 된다. 시스템 제너레이터 토큰은 해당 연동된 서브시스템의 top-level entity를 생성하므로 FPGA 두개를 의미하거나 하나의 FPGA에 두개의 블럭이 있다는것을 의미한다. 

Subsystem을 더블클릭해보자.


이걸 Xilinx DSP48 2.1 매크로 블럭을 사용해서 이렇게 바꿔라.


DSP48 이건 먼가...계산을 겁나 빠르게 해줄거같은 느낌이 드는데!!! 이름이 DSP니까!!!

DSP48 Macro 2.1의 c 포트는 입력 범위가 a, b와 다르다.
Gateway In2 더블클릭해서 이 부분을 바꿔주자.


Display 탭의 Signals & Ports에서 Port Data Types와 Signal Dimensions를 활성화시키면


오...보기 좋군...

이 다음은 DSP48 Macro 2.1을 더블 클릭해서 Pipiline Options로 가보자.


Pipeline Options를 Expert로 바꾸고 아래와 같이 세팅해라.


Subsystem과 Subsystem1 내부의 System Generator Token을 둘 다 제거하고 상위 시스템에 System Generator Token을 추가한다.


그리고 시뮬레이션 돌리고 파형 함 보자.


5번 파형이 DSP48 매크로블럭을 적용한거고 6번 파형이 그렇지 않은거다. 파형상으로는 약간 다르긴 하다.

System Generator Token을 더블클릭해서 Bitstream을 Generate 해보자.
ISE에서 합성할때 콘솔에 출력되는 로그들이 주루루룩 나오면서 합성이 진행된다. 

한참 합성하다가 pin loc 관련 에러가 뜬다...



아...

댓글 1개: