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으로 입력하고 시뮬레이션 돌려보자.


오케이 잘 나온다.

댓글 없음:

댓글 쓰기