2016년 2월 5일 금요일

Xilinx System Generator -- 08. Lab 5 - Multi-Rate Systems

오늘은 Up/Down Sampling과 Serial to Parallel and Parallel to Serial을 해보자.

첫번째 예제를 만들어보자.


이렇게 연결하고 Counter Limit 블럭의 Upper limit을 10으로, Gateway In을 fix 8 0 로 해두자.

시뮬레이션 돌리면 이렇게 나온다.


시뮬레이션 Stop time을 30으로 해서 돌린거다.


다음은 Gateway In과 Out 사이에 Down Sample과 Up Sample을 넣고 돌려보자.

먼저 Down Sample



샘플링 레이트가 2로 기본 설정되어있어서 두번에 한번 샘플링을 한다.

Up Sample은 에러가 난다.


"시스템 제너레이터 토큰의 period 설정이 적절치 않다. 1에서 1/2로 바꾸기 바람"
이렇게 친절히 알려주는군.

바꾸고 돌려보자.


헛 이게 머냐?



Up Sample 앞뒤 신호를 확인해보자.


이거 먼 의미가 있는 짓거린가 모르겠네...
getting_started_training을 계속 해야되나 말아야되나
시간낭비하는거 같기도 하고...


Serial-to-Parallel 시스템 만들어보자.


이렇게 만들고 Counter Limited의 Upper limit를 1로, Serial to Parallel의 설정을 Least significant word first, Unsigned, Number of bits를 8로, Binary point를 0으로 설정하자.


Serial to Parallel의 설정 중 Least significant word first를 Most significant word first로 바꾸고 돌려보자.


Counter Limited 블럭에서는 0 1 0 1을 끝없이 쏟아낸다. 이걸 Serial to Parallel이 받아서 8비트의 unsigned 정수로 바꿔준다. 0101 0101 -> 85로
Most significant word first로 해야 제대로 출력이 되네. 당연하게도.



자 슬슬 지겨워진다. 이짓거리도...

2016년 2월 3일 수요일

Xilinx System Generator -- 07. Lab 4 - System Control

이번 예제는 MCode를 이용해서 FSM을 만드는거다.

MCode는 Xilinx Blockset의 Index 라이브러리에 있다.
오른쪽 클릭해서 Help 함 읽어보자.

=======================================================
MCode
Xilinx Blockset의 Control Logic, Math, 그리고 Index 라이브러리에서 찾을 수 있다.


MCode 블럭은 시뮬링크내에서 매트랩 함수를 실행하기 위해 사용한다.
블럭에 표시된 파라미터는 M-펑션 네임이다. 실제로 MCode 블럭을 더블클릭하면


MATLAB fuction에 xImax가 기본으로 연결이 되어있다. Edit M-File...로 편집하거나 Browse...로 아예 다른 파일로 변경도 가능한 모양이다.

이 블럭은 시뮬링크로 시뮬레이션시 출력을 계산하는 M-code를 실행한다.
하드웨어 제너레이트시 동일한 기능을 하는 VHDL이나 Verilog로 변환된다.

...

그외 매우 내용이 길지만 지금은 읽어봐도 무슨 내용인지 잘 모르니까 여기까지...
=======================================================

검색해보니까 주로 FSM을 만들기 위해 쓰는 블럭인거같다.

일단 블럭 불러 올려서 시스템을 만들어보자.


이렇게...

M-code는 아래와 같이 만들자.

function matched = state_machine(din)

persistent state, state = xl_state(0,{xlUnsigned, 3, 0});

switch state
    case 0
        if din == 1
            state = 1;
        else
            state = 0;
        end
        matched = 0;
    case 1
        if din == 0
            state = 2;
        else
            state = 0;
        end
        matched = 0;
    case 2
        if din == 1
            state = 3;
        else
            state = 0;
        end
        matched = 0;
    case 3
        if din == 1
            state = 4;
        else
            state = 2; 
        end
        matched = 0;
    case 4
        if din == 0;
            state = 0;
        else
            state = 1;
        end
        matched = 1;
    otherwise
        state = 0;
        matched = 0;
end

state variable을 선언하는 부분
persistent state, state = xl_state(0,{xlUnsigned, 3, 0}); 은 persistent로 선언되어야 하고 첫번째 인자는 초기값, 두번째 인자는 정밀도라고 한다.
근데 두번째 인자는 정확히 멀 말하는건지 모르것네...state가 0에서 4까지니까 3비트라는거 말고는...

Repeating Sequencer Stair는 아래와 같이


값을 넣어주면 된다.

시뮬레이션 Stop time을 20으로 입력하고 시뮬레이션 돌려보자.


오케이 잘 나온다.

2016년 2월 2일 화요일

Xilinx System Generator -- 06. Lab 3 - Signal Routing

오늘도 간단한 예제를 실행해보자.

실제 Xilinx Blockset사이에 신호가 어떻게 넘어가는지 확인해봅시다.

만들어볼 첫번째 시스템은


자 시작해보자.

시뮬링크 source 블럭셋에서 Constant 불러와서Contant Value를 .5로 하고
자일링스 블럭셋에서 Gateway In 불러와서 Num of bits : 8, Bin of bits : 6으로
Gateway Out과 System Generator token, Display도 불러와서 아래와 같이 연결하자.


0.5를 signed xx.xx xxxx 이진수로 받으면 00.10 0000 으로 입력된다. 고대로 출력하면 0.5로 출력됨.


다음은 이걸 만들어보자.


아까 만들어놓은 시스템에서 Constant Value를 ,007813으로 바꾸고
Gateway In을 Num of bits : 12, Bin of bits : 12로 바꾸면 된다.


0.007813을 signed .xxxx xxxx xxxx 이진수로 받으면 .0000 0010 0000으로 입력된다. 고대로 출력하면 0.007813으로 출력됨. 실제로 .0000 0010 0000은 0,0078125지만 Display의 포맷을 short으로 해서 0.007813으로 출력된다. 포맷을 long로 바꾸면 원래값으로 출력된다.


마지막으로 만들건 이거다.


자일링스 블럭셋에서 Convert를 불러와서 Num of bits : 8, Bin of bits : 0으로
Reinterpret 불러와서 Signed, Output Binary Point : 0로 해서 연결해주자.


첫번째 시스템과 비슷한데, 일단 00.10 0000로 입력받고
Convert에서 Quantizaton 설정이 Truncate다. 표현가능한 소수 자리보다 오른쪽에 있는값은 버린다는건데 표현가능한 소수가 0이니까 소수값을 없애버린다. 걍 0이 출력되는거지.

Reinterpret는 입력받은 이진수는 손대지 않고 값의 형태를 실수에서 정수로 바꿔버린다. 설정을 그렇게 했으니까. 0010 0000로 걍 32가 출력되는거지.

이번 실습은 심플해서 좋네.

Xilinx System Generator -- 05. System Generator Compilation Types

There are different ways in which System Generator can compile your design into an equivalent, often lower-level, representation. The way in which a design is compiled depends on settings in the System Generator dialog box. The support of different compilation types provides you the freedom to choose a suitable representation for your design's environment.
For example, an HDL or NGC netlist is an appropriate representation when your design is used as a component in a larger system. If, on the other hand, the complete system is modeled inside System Generator, you may choose to compile your design into an FPGA configuration bitstream. Sometimes you may want to compile your design into an equivalent high-level module that performs a specific function in applications external to System Generator (e.g., ModelSim hardware co-simulation).

시스템 제너레이터를 컴파일하는 몇가지 방식이 있다. 시스템 제너레이터 다이얼로그 박스에서 설정할 수 있는데 디자인 환경에 따른 적합한 방식을 선택할 수 있다.
예를들어, HDL이나 NGC 넷리스트는 대형 시스템의 일부인 컴포넌트 개발에 적합하다. 반대로 전체 시스템을 개발하려고 할때는 비트스트림을 선택할 수 있다. 시스템 제너레이터 외부의 어플리케이션과 연동되는 특정 기능을 수행하는 고수준의 모듈 개발에 적합한 방식도 있다. (ModelSim hardware co-simulation)


System Generator token을 더블클릭하면 보이는 이부분이다.
용도별 차이가 있는데
1. 시스템의 일부분 설계
2. 전체 시스템 설계
3. softcore 포함 설계
4. 하드웨어 연동 시뮬레이션
5. 타이밍, 파워 분석
등이 있는거같다.

- HDL Netlist Compilation
  -> 대형 시스템의 일부 컴포넌트 설계시 사용. HDL을 만들어주는거 같다.

- NGC Netlist Compilation
  -> 대형 시스템의 일부 컴포넌트 설계시 사용. NGC를 만들어주는거 같다.

- Bitstream Compilation
  -> 전체 시스템을 설계시 사용. 걍 다 만듬.

- EDK Export Tool
  -> 마이크로블레이즈 블럭 사용시 쓰는거 같은데...

- Hardware Co-Simulation Compilation
  -> 타겟 보드와 시뮬링크가 통신하면서 시뮬레이션 한다는거 같은데...

- Timing and Power Analysis Compilation
  -> 이건 논외로 치자 머리아프다...


난 심히 Hardware Co-Simulation을 해보고 싶은데 방법을 모르겠다. 아직은