Custom AXI-Lite Peripheral

SungchulCHA·2024년 4월 25일
0

Vivado

목록 보기
4/6

HW Configuration

  1. Create Slave AXI Peripheral

  2. testbench 같이 생성

    • testbench 구경

    • 해석하기

  3. AXI Custom 하기 - Edit in IP Packager

  4. AXI Custom 하기

  5. Customize 한 AXI 저장 - Merge changes from File Groups Wizard


  6. Vivado Project Settings에서 IP Repository 경로 지정

  7. 이후 과정


C code 해석

#include <stdio.h>
#include "xparameters.h"
#include "xil_io.h"

int main()
{
    short operand1, operand2;
    int data, quit, operand;
    printf("\n\nMultiplier_Test!!\n\r");

    while (1)
    {
        printf("Please Enter Operand 1. \n\r");
        scanf("%hd", &operand1);

        printf("Please Enter Operand 2. \n\r");
        scanf("%hd", &operand2);

        operand = (operand1 << 16) | operand2;

        // Write multiplier inputs to register ADDRESS 0
        Xil_Out32((XPAR_MY_MULTIPLIER_V1_0_0_BASEADDR), (u32)operand);
        // Read multiplier outputs from register ADDRESS 4
        data = Xil_In32((XPAR_MY_MULTIPLIER_V1_0_0_BASEADDR) + 4);
        printf("output=%d \n", data);

        printf("Do you want to quit? (0: quit, 1: resume)\n");
        scanf("%d", &quit);

        if (!quit)
            break;
    }
    printf("End of Test!!\n\n\r");
    return 0;
}

전체 요약

사용자로부터 두 개의 피연산자를 입력받아 이를 곱하는 작업을 반복적으로 수행하는 프로그램입니다.

  1. 프로그램이 시작되면 "Multiplier_Test!!"라는 메시지를 출력합니다.

  2. 그 다음 무한 루프(while (1))가 시작되며, 이 루프는 사용자가 종료를 원할 때까지 계속됩니다.

  3. 루프 내에서는 먼저 "Please Enter Operand 1."이라는 메시지를 출력하고, 사용자로부터 첫 번째 피연산자를 입력받습니다.

  4. 그 다음 "Please Enter Operand 2."라는 메시지를 출력하고, 사용자로부터 두 번째 피연산자를 입력받습니다.

  5. 두 피연산자는 operand라는 변수에 저장되며, 이 때 첫 번째 피연산자는 16비트 왼쪽으로 시프트되고 두 번째 피연산자와 비트 OR 연산이 수행됩니다.

  6. operandXil_Out32 함수를 통해 특정 레지스터에 쓰여집니다. 이 함수는 FPGA와 같은 하드웨어 장치와 통신할 때 사용되며, 이 경우에는 곱셈 연산을 수행하는 하드웨어에 입력값을 제공하는 역할을 합니다.

  7. 그 다음 Xil_In32 함수를 통해 레지스터에서 결과값을 읽어옵니다. 이 함수 역시 FPGA와 같은 하드웨어 장치와 통신할 때 사용되며, 이 경우에는 곱셈 연산의 결과를 가져오는 역할을 합니다.

  8. 결과값은 "output=%d \n" 형식의 메시지로 출력됩니다.

  9. 그 다음 "Do you want to quit? (0: quit, 1: resume)\n"라는 메시지를 출력하고, 사용자로부터 종료 여부를 입력받습니다. 사용자가 0을 입력하면 quit 변수는 0이 되어 if (!quit) 조건이 참이 되고 루프가 종료됩니다.

  10. 루프가 종료되면 "End of Test!!\n\n\r"라는 메시지를 출력하고 프로그램이 종료됩니다.


헤더 파일

  1. xparameters.h : 이 헤더 파일은 Xilinx의 자동화 도구인 Vivado HLS가 생성합니다. 이 파일은 FPGA 디자인에 포함된 모든 하드웨어 IP의 주소 및 설정 정보를 포함하고 있습니다. 예를 들어, XPAR_MY_MULTIPLIER_V1_0_0_BASEADDR는 Vivado HLS 도구가 생성한 특정 하드웨어 IP의 기본 주소를 나타냅니다.

  2. xil_io.h : 이 헤더 파일은 Xilinx의 라이브러리에서 제공하며, FPGA의 특정 주소에 데이터를 읽고 쓰는 기능을 제공합니다. Xil_Out32Xil_In32 함수는 이 파일에서 정의됩니다. Xil_Out32 함수는 특정 주소에 32비트 데이터를 쓰는 역할을 하고, Xil_In32 함수는 특정 주소에서 32비트 데이터를 읽는 역할을 합니다.


형식 지정자

  • %hd :C 언어의 형식 지정자입니다. 이 형식 지정자는 printfscanf와 같은 함수에서 사용되며, short int 형식의 변수를 10진수 형태로 출력 또는 저장합니다.

함수 설명

  1. Xil_Out32() 함수

Xilinx의 xil_io.h 헤더 파일에서 정의된 함수로, FPGA의 특정 메모리 주소에 32비트 데이터를 쓰는 역할을 합니다.

이 함수는 두 개의 매개변수를 받습니다.

  • 첫 번째 매개변수는 데이터를 쓸 메모리 주소입니다. 이 주소는 xparameters.h 헤더 파일에서 정의된 상수를 통해 얻을 수 있습니다.

  • 두 번째 매개변수는 쓸 데이터입니다. 이 데이터는 32비트 정수여야 합니다.

예를 들어, Xil_Out32((XPAR_MY_MULTIPLIER_V1_0_0_BASEADDR), (u32)operand); 코드는 operand의 값을 XPAR_MY_MULTIPLIER_V1_0_0_BASEADDR 주소에 씁니다. 이 주소는 xparameters.h에서 정의된 FPGA의 특정 하드웨어 IP의 기본 주소입니다.

  1. Xil_In32() 함수

Xilinx의 xil_io.h 헤더 파일에서 정의된 함수로, FPGA의 특정 메모리 주소에서 32비트 데이터를 읽는 역할을 합니다.

이 함수는 하나의 매개변수를 받습니다.

  • 매개변수는 데이터를 읽을 메모리 주소입니다. 이 주소는 xparameters.h 헤더 파일에서 정의된 상수를 통해 얻을 수 있습니다.

예를 들어, Xil_In32((XPAR_MY_MULTIPLIER_V1_0_0_BASEADDR)) 코드는 XPAR_MY_MULTIPLIER_V1_0_0_BASEADDR 주소에서 데이터를 읽습니다.

이 함수는 읽은 데이터를 반환합니다. 따라서 이 함수를 사용하여 FPGA의 특정 주소에서 데이터를 읽어 변수에 저장할 수 있습니다.

profile
Myongji UNIV. B.S. in Electronic Engineering

0개의 댓글

관련 채용 정보