2024.9.5 수업날
SoC: System on Chip
< Vivado: IP INTEGRATOR >
새로운 주제로 수업을 진행하므로 Vivado에서 새로운 project를 만들어준다.
새롭게 지정해야하는 것은 project 이름, RTL 설정, 보드를 Basys3으로 설정하는 것이다.
vivado의 왼쪽 메뉴에서 Create Block Design->이름을 설정한다.
그러면 두번째 사진처럼 Diagram 창이 나타난다.
다음으로 아래의 순서와 같이 진행하면 된다.
Source에서 방금 만든 Design Sources의 우클릭을 하여 Create HDL Wrapper를 클릭한다.
그러면 이렇게 자동으로 코드가 만들어지는 것을 확인할 수 있다.
자동적으로 set as top이 되어있으므로 이 코드로 bitstream을 실행한다.
그리고 bitstream이 완료되었다고 해서 바로 hardware manager를 선택하지 않고 cancel를 선택한다.
ram에 정보 올리는 것을 먼저 해야하기 때문이다.
다음으로 .xsa 파일을 만들어야한다.
두번째 사진에서는 꼭 Include bitstream을 체크표시한다.
< Vitis 실행 >
vivado에서 vitis를 실행한다.
하드웨어 플랫폼을 생성한다.
vivado에서 export한 하드웨어를 가지고 플랫폼을 생성하는 것이다.
다음으로 hardware platform 위에 파일을 만들고 구동시키면 된다. -> 어플리케이션 프로젝트를 생성한다.
그러면 아래와 같이 코드가 추가된다. helloworld.c가 메인파일이다.
Mblaze_hello_app을 build project 하고 run as-> Launch on hardware를 실행하면 comportmaster에 글이 출력되는 것을 확인할 수 있다.
이번에는 comportmaster에 1초마다 문구가 출력되는 것을 해보자.
자동완성을 하려면 ctrl+spacebar를 하면 된다.
< Button 제어 >
위에서 했던 방식으로 이번에는 Basys3의 button을(Reset 제외) 누를 때 comportmaster에 숫자가 뜨게 해보자.
Vivado 진행 순서
vitis 진행 순서
Mblaze_button_app -> helloworld.c 소스코드
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"
#define BTN_ID XPAR_AXI_GPIO_0_DEVICE_ID
#define BTN_CHANNEL 1
int main()
{
init_platform();
print("Start!\n");
XGpio_Config *cfg_ptr;
XGpio btn_device;
u16 data = 0;
cfg_ptr = XGpio_LookupConfig(BTN_ID);
XGpio_CfgInitialize(&btn_device, cfg_ptr, cfg_ptr->BaseAddress);
XGpio_SetDataDirection(&btn_device, BTN_CHANNEL, 0b1111);
while(1){
data = XGpio_DiscreteRead(&btn_device, BTN_CHANNEL);
xil_printf("Button : %d \n", data);
print("Hello World!\n");
MB_Sleep(1000);
}
cleanup_platform();
return 0;
}
< led&switch 제어 >
vivado 진행 순서
vitis 진행 순서
Mblaze_led_sw_app -> helloworld.c 소스코드
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"
#define GPIO_ID XPAR_GPIO_0_DEVICE_ID
#define LED_CHANNEL 1
#define SW_CHANNEL 2
int main()
{
init_platform();
print("start!\n");
XGpio_Config *cfg_ptr;
XGpio gpio_instance;
u32 data;
cfg_ptr = XGpio_LookupConfig(GPIO_ID);
XGpio_CfgInitialize(&gpio_instance, cfg_ptr, cfg_ptr->BaseAddress);
XGpio_SetDataDirection(&gpio_instance, LED_CHANNEL, 0);
XGpio_SetDataDirection(&gpio_instance, SW_CHANNEL, 0xffff);
while(1){
data = XGpio_DiscreteRead(&gpio_instance, SW_CHANNEL);
XGpio_DiscreteWrite(&gpio_instance, LED_CHANNEL, data);
print("Hello World\n");
MB_Sleep(1000);
}
cleanup_platform();
return 0;
}
Vitis 사용법, button 제어, led_switch 제어 끝!
'Harman 세미콘 아카데미 > SoC를 위한 Peripheral 설계' 카테고리의 다른 글
2024.9.12 [SoC를 위한 Peripheral 설계]6 - dht11_lcd(myip) (1) | 2024.09.15 |
---|---|
2024.9.12 [SoC를 위한 Peripheral 설계]5 - btn_intc(myip), iic(myip) (0) | 2024.09.12 |
2024.9.11 [SoC를 위한 Peripheral 설계]4 - stopwatch_btn(myip), pwm_servo(myip) (0) | 2024.09.11 |
2024.9.10 [SoC를 위한 Peripheral 설계]3 - bcd_fnd, stopwatch(myip) (0) | 2024.09.10 |
2024.9.6 [SoC를 위한 Peripheral 설계]2 - led 제어2, fnd, fnd cntr(myip) (0) | 2024.09.06 |