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 관련 에러가 뜬다...



아...

2016년 1월 28일 목요일

Xilinx System Generator -- 03. Lab 1 - Using Simulink

ISE 설치 폴더(보통 C:\Xilinx\14.7\ISE_DS\ISE)내에 sysgen 폴더로 가보자.
\examples\getting_started_trainin 폴더에 lab1~lab7까지 실습해볼 수 있는 자료가 있다.
일단 Lab 1 내용부터 읽어보자.


내용을 요약하자면 :
========================================================


Step 1: 이걸 해보면서 매트랩/시뮬링크와 친숙해지세요.

1. Simulink로 아래와 같이 새로운 모델을 만들어라


   Display탭의 Signals & Ports에서 Port Data Types를 선택하면 신호타입이 표시된다.




2. Sine Wave 블럭을 더블클릭하면 설정창이 뜬다. Frequency를 2*pi*(1/150)으로 바꿔라.



3. Simulation탭에서Model Configuration Parameters를 선택해서 Solver 항목을 아래와 같이 수정한다.
  - Stop time : 150
  - Type : Fixed-step
  - Solver : discrete(no continuous states)
  - Tasking mode for periodic sample times : SingleTasking



4. Simulation을 Run 시킨 후 Scope 블럭을 더블클릭하면


짜잔

lab1.pdf 의 내용은 약간 올드한 버전을 기준으로 작성된거 같다. 툴의 메뉴명이나 위치가 조금씩 다르다.

여기까지가 Step 1 이다.



Step 2: 시뮬레이션 설정에 따른 변화를 살펴봅시다.

1. Sine Wave 블럭 더블클릭해서 샘플 타임을 5로 변경후 시뮬레이션 돌려라.



이렇게 출력되던게



이렇게 바뀐다.



2.Simulation Stop Time을 150에서 500으로 바꾸고 시뮬레이션 돌려봐라.

  이 부분을 500으로 바꾸면 된다.



  이렇게 바뀐다.


여기까지가 Step 2.



Step 3: 간단한 필터를 만들어 봅시다(Y(n+1) = X(n+1) + 3 * X(n-1)).

1. Simulink/Discrete 라이브러리의 Delay 추가. Simulink/Math 라이브러리의 Add와 Gain 추가.

2. 아래와 같이 배치하고


  Delay를 더블클릭해서 Delay length를 2로 변경
  Gain을 더블클릭해서 Gain을 3으로 변경
  그리고 시뮬레이션을 돌린다.

3. 그럼 이런 파형이 나온다.



여기까지가 Step 3.



Step 4: 만든 필터로 서브시스템을 생성해 봅시다.

1. Sine Wave 블럭과 Scope 블럭 사이를 마우스로 전부 선택한다.

2. Diagram탭의 Subsystem & Model Reference에서 Create Subsystem from Selection을 선택한다.


3. 아래 그림과 같이 서브시스템이 생성이 된다.



========================================================
여기까지다.


















2016년 1월 27일 수요일

Xilinx System Generator -- 02. 그러니까 System Generator가 도대체 머냐고

매트랩 깔고 ise 깔고 System Generator를 실행했지만 내가 지금 멀 하고있는건지 모르겠다. 아니 지금 System Generator를 실행했는데 왜 Simulink Library 창이 떠있는지도 이해가 안된다.

그래서 일단 System Generator 관련 자료를 찾아봤다.

맘에 드는 자료는 일단 이거...
Xilinx System Generator tips and tricks - Part 1: An introduction

내용을 요약하자면 :
========================================================
자기 자신에 대한 소개 ->
나는 System Generator를 사용한지 10년 정도 되고 매우 다양한 개발 경험이 있다.
기업이나 대학에서 알고리즘 구현에 대한 자문을 담당한다. 이런 일들은 대체로 표준 소프트웨어 언어로 구현할 수 없고 FPGA를 사용한다. 자일링스 System Generator는 DSP 알고리즘을 FPGA상에 HDL로 구현하는 매우 쉬운 방법이며, Matlab 상에 이미 구현된 알고리즘을 사용하는 자연스러운 방법이다.
나 또한 아직 배울게 많지만 내 경험을 공유하고 조심해야할 부분을 알려주는것은 조금이라도 유익할 것이라 생각한다.
그런고로 일단 System Generator가 어떤건지 소개하고, 어떠한 장점이 있는지 간단한 예제를 보여줄 것이다.

System Generator에 대한 소개 ->
System Generator는 자일링스가 개발한 고수준의 개발툴이며 Matlab Simulink와 완벽히 통합되어있다. Xilinx/Simulink Blockset는 기본 함수부터 신호 처리를 위한 복잡한 함수를 광대역으로 지원한다. 이걸 사용해서 원하는 알고리즘을 매트랩 상에서 쉽고 매우 효과적으로 디자인하고 테스트를 할 수 있다.

주요 특징은 다음과 같다.
- DSP modeling : Xilinx blockset은 모델링에 필요한 모든 함수를 가지고 있다.
  @ Signal processing (e.g. CORDIC, CIC and FIR filters, FFTs, Viterbi decoder)
  @ Arithmetic and logic (e.g. multiplier, adder, comparator, shift)
  @ Memories (e.g. registers, FIFO, ROM)

- Bit and cycle-accurate floating and fixed-point implementation
  System Genegator는 Simulink와 FPGA의 출력이 동일하다는 것을 보장한다.

- Easy path to FPGA
  Simulink에서 HDL 코드를 바로 출력할 수 있다.

- Hardware co-simulation
  400 페이지짜리 Xilinx System Generator for DSP User Guide에 잘 설명되어있다.
  읽어봐라. 하지만 웹상의 튜터리얼을 찾아서 돌려보면 금방 삘이 올것이다.
========================================================
내용 요약은 여기까지...

System Generator가 독립적인 툴이 아니구나...라는 생각이 드는구나...

긍께 Simulink의 일부분으로 포함된거고 System Generator라고 부를수 있는 부분은 Simulink의 Xilinx blockset 몇개와 HDL 생성부, 그리고 Hardware 연동 부분까지라고 생각된다.

제대로 이해를 한건지 모르겠네 ㅡㅡ;

Simulink의 기존 라이브러리와 Xilinx blockset을 연동해서 알고리즘을 구현하고 그걸 보드에서 구동시켜서 검증을 할 수 있다는 말인거 같은데...

그럼 System Generator를 잘 써먹기 위해선 Simulink를 잘 쓸줄 알아야된다는 결론이다.
Simulink를 잘 쓸려면 Matlab을 잘해야 되는거고...

점점 산넘어 산인거지...나 집에 갈란다...

Xilinx System Generator -- 01. 시작

내 시스템은 아래와 같다.

Windows 버전 : Windows 7 Ultimate K Service Pack 1
프로세서 : Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz 2.30GHz
설치된 메모리(RAM) : 8.00 GB
시스템 종류 : 64비트 운영체제

매트랩 버전은 R2012b (8.0.0.783) 64-bit(win64) 버전이다.

현 시점에서 R2015b가 가장 최신이나 ise 14.7의 system generator를 지원하는게 R2012a, R2012b, R2013a, R2013b 버전이다. 내가 매트랩을 하는 목적이 결국은 system generator로 알고리즘을 구현하는거니까 이 중 가장 쉽게 구할수 있는 버전이 저거네...

일단 매트랩 R2012b를 깔고 ise 14.7을 설치하면 System Generator 메뉴가 생성된다.


참고로 매트랩보다 ise를 먼저 설치하면 System Generator 메뉴가 생성되지 않는다. 꼭 매트랩 -> ise 순서로 설치를 하자.

Xilinx Design Tools의 System Generator를 실행시키면 일단 매트랩이 실행된다.


그리고 창이 하나 더 뜨는데 Simulink Library Browser가 뜬다.


나도 여러 개발툴을 다뤄봤다고 생각했지만 이런 뜬금없는 시작화면은 처음이네...
System Generator는 어딨냐??? 난 분명 System Generator를 실행했는데 매트랩과 시뮬링크만 실행된다.

난 어디서 무엇을 어떻게 해야하나...

일단 F1 눌러서 헬프로 가보자




딱히 System Generator 관련 항목은 없다. 조금씩 불안해진다...

.
..
...
....

중간과정 싹다 생략하고 Matlab과 ISE 14.7의 Help는 System Generator를 사용하는데 하등의 도움도 되지 않을거 같다. 내가 현재 매트랩과 시뮬링크는 아무것도 모르고, ISE도 능숙하진 않지만... 두 tool의 Help 파일은 과감히 없는셈 친다.

유일하게 Matlab Help 중 볼만한 내용은 HDL Coder 부분인거같다.

System Generator의 설명은 그냥 google에서 검색하는게 더 나을거 같다.