반응형

02_Create project under VIVADO.pdf 를 참고하였다.

 

첫 번째로, 설치한 VIVADO 2018.3 을 실행한다.

 

프로젝트 설치를 위해 File > Project > New 를 선택한다.

 

New Vivado Project Wizard 가 나올 텐데, Next 를 누르고 

Project name 을 정해보도록 하자.

Project name : fpga_01_pl_led_stream
Project location : <use your own path>

 

Project location 같은 경우, 너무 깊게 Path 를 설정하면 오류가 날 수도 있다고 했으니 적당하게 C 드라이브에 폴더를 하나 생성하자. 예를 들자면 C:\VivadoProjects 같은게 좋겠다. 다음과 같은 경로로 설정한다.

 

 

다 했으면 Next 를 누른다.

 

 

이번에 Verilog 파일을 이용해 보드를 세팅할 계획이므로 RTL Project 로 만든다.

 

Add Sources, Add Constraints (optional)

: Skip (Next 누르기)

 

 

우리가 쓰는 칩을 고른다.

셀러가 친절하게도, 선택 기준에 대해 알려주고 있다.

Family : Zynq - 7000

Package : clg400

Speed : 7010은 -1, 7020은 -2

 

결론은 

Ver 7010 : xc7z010clg400-1

Ver 7020 : xc7z020clg400-2

 

지금 봤는데 7010이 LUT 나 FF 나 개수가 역시 적긴 하다. 7020이 7010에 비해 약 3배 정도 차이나는 듯 하다.

Next 선택하면 프로젝트 요약을 보여준다.

확인하고 Finish 를 선택해 프로젝트를 생성하자.

 


 

 

현재 프로젝트는 생성되었지만 프로젝트 내의 소스 파일이 없기 때문에 아무것도 실행할 수 없다.

좌측 상단 Project Manager > Add sources 를 선택해 소스 파일을 추가하자.

 

 

새로 디자인 소스를 추가한다. Next 선택

 

 

새로 파일 생성을 해야 하므로 Create File 을 선택

 

 

새 파일의 이름은 led_stream 으로 한다. OK > Finish 선택

 

끝나면 Define Module 창이 나올텐데, 그냥 OK > YES 로 넘기도록 하자.

간단하게 input / output 설정을 할 수 있는 창이라 넘겨도 무방하다.

 

 

그러면 led_stream.v 파일이 디자인 소스에 추가된 것을 확인할 수 있다.

더블클릭을 해서 파일을 연다.

 

 

Verilog 파일 하나가 생성되어 있는 것을 볼 수 있다.

이후 다음과 같은 코드를 붙여넣는다.

 

module led_stream(
    input i_Clk,          // 클럭 입력
    input i_Rst,          // 리셋 입력
    output reg [3:0] o_LED // LED 출력
);

// 카운터와 LED 번호를 저장하는 레지스터 변수 정의
reg [31:0] cnt;
reg [1:0] led_on_number;

// 클럭 주파수와 카운터의 최대 카운트 값을 설정하는 매개변수
parameter CLOCK_FREQ = 50_000_000;
parameter COUNTER_MAX_CNT = CLOCK_FREQ/2 - 1;

// 클럭 신호의 상승 에지와 리셋 신호의 하강 에지에 반응하여 동작하는 블록
always @(posedge i_Clk, negedge i_Rst) begin
    if (!i_Rst) begin
        // 리셋 신호가 활성화되면 카운터와 LED 번호를 초기화
        cnt <= 0;
        led_on_number <= 0;
    end else begin
        // 그렇지 않으면 카운터를 증가시키고 최대 카운트에 도달하면 리셋
        cnt <= cnt + 1;
        if (cnt == COUNTER_MAX_CNT) begin
            cnt <= 0;
            led_on_number <= led_on_number + 1;
        end
    end
end

// LED 번호에 따라 LED 출력을 설정하는 블록
always @ (led_on_number) begin
    case(led_on_number)
        0: o_LED <= 4'b0001; // LED 번호가 0이면 0001
        1: o_LED <= 4'b0010; // LED 번호가 1이면 0010
        2: o_LED <= 4'b0100; // LED 번호가 2이면 0100
        3: o_LED <= 4'b1000; // LED 번호가 3이면 1000
        default: o_LED <= 4'b1111; // 그 외의 경우 모든 LED가 꺼짐
    endcase
end

endmodule

 

모두 작성했다면 저장한다. (Ctrl + S)

 

 

이후 SYNTHESIS 항목의 Run Synthesis 를 선택하면 다음과 같은 창이 나온다.

OK 를 눌러 다음으로 넘어가면 자동으로 디자인 합성을 시도한다.

 

 

합성이 성공하면 다음과 같은 창이 나온다.

I/O 포트를 지정해 줘야 하므로 Cancel 을 눌러 나온다.

이후 RTL ANALYSIS > Open Elaborated Design 을 선택한다. 창 나오면 OK 눌러준다.

 

 

그럼 우리가 짠 Verilog 파일에 대응하는 회로도가 나온다.

오른쪽 위를 보면 현재 Default Layout 이라고 나와 있는데 이걸 눌러 I/O Planning 으로 바꿔준다.

 

 

그럼 핀 설정 창이 나오게 되고, 아래 콘솔이 있던 부분에 I/O Ports 라는 새 창이 나오게 된다.

I/O std 를 전부 LVCMOS33 으로 설정해주고

대응하는 패키지 핀만 넣으면 나머지는 자동으로 채워진다.

 

 

현재 코드와 대응하는 ZYNQ_MINI 보드의 I/O 는 그림과 같다.

다른 핀들에 대해 궁금하다면, 이 보드를 만든 사람이 친절하게도 핀 넘버와 기능에 대해 설명한 자료가 있다.

01_Schematic\ZYNQ_MINI_REVB Schematic.pdf 파일을 한번 구경해 보자.

 

등등 대략적으로 알려주고 있다.

이번에 사용한 핀들을 보면 

K17 : PL_CLK_50M

M19 : FPGA_PL_KEY2

T12 : FPGA_PL_LED1

U12 : FPGA_PL_LED2

V12 : FPGA_PL_LED3

W13 : FPGA_PL_LED4

로 구성된 것을 볼 수 있다.

 

LVCMOS33 은 3.3V 전압 레벨에서 작동한다는 의미라 생각하면 될 것 같다.

 

핀 설정이 끝났다면 저장을 해 준다.

 

 

다음과 같은 화면이 나오는데, File name 만 적당히 수정해 준다. 현재 모듈과 같은 이름이면 될 것 같다.

타이핑 후 OK 버튼을 선택하자.

 

그리고 비트스트림이라는 파일을 생성하기 위해

PROGRAM AND DEBUG > Generate Bitstream 을 클릭한다.

 

 

이런 창이 뜰 텐데 그럼 Yes 를 누르고 다시 합성을 진행한다.(I/O 핀 매핑을 했기 때문에 달라짐)

그리고 비트스트림도 합성이 끝난 뒤에 자동으로 진행된다.

 

 

끝나면 Open Hardware Manager 을 누르고 OK 을 누른다.

 

 

Hardware Manager 창이 열리면, 아직 우리가 보드를 툴과 연결하지 않았기 때문에 하드웨어가 잡히지 않는다.

HW 연결 전, 보드와 PC를 연결하는 과정을 한다.

 

 

[중요] Boot 가 00 상태여야 한다. {ON / KE} 방향이 0이고 {1, 2} 방향이 1이다.

Boot 모드가 총 3개로 나뉜다.

* 만약 QSPI 모드로 바꾸고 싶다면 1을 1 방향으로, 2를 KE 방향으로 스위치 조정을 하고 전원을 인가한다.

Boot ON KE
JTAG 0 0
QSPI 1 0
SDCARD 1 1

 

JTAG 에 USB-C 케이블을 연결하고, PC와 연결한다.

 

이후 Vivado 로 돌아와 Open Target > Auto connect 를 선택한다.

 

 

그러면 이렇게 칩이 잡힌다. FPGA 용 칩과 ARM 코어가 잡힌 모습이다.

그럼 우리가 만든 Verilog 파일(현재 bitstream 으로 만듦) 을 보드에 올려볼 차례이다.

Program Device 를 누른다.

 

 

비트스트림 파일에는 우리가 만든 비트스트림 파일의 경로를 넣어 준다.

기본으로는 자동으로 잡힌다.

그리고 Program 버튼을 선택한다.

동작하는 것을 확인한다.

 

 

분명 처음 했을 때는 에러가 나지 않았는데 지금은 에러가 난다........

더 알아보고 고쳐봐야겠다.

 

[추가]

재부팅 하니 정상작동을 한다.

localhost 에서 Auto connect 로 XADC 를 못 잡아서 프로그램 실행이 되지 않은 것 같다.

그 전까지 로컬 서버 리스타트 등을 해도 효과가 없고, 재부팅 해야 되는 듯 하다

 

 

이런 식으로 PL LED쪽 제어를 해 보았다.

(코드는 위에 제공해준 것과 달라 LED 켜지는 모습이 다름)

반응형

+ Recent posts