반응형

(추후 수정 예정)

HDMI 띄우기 세팅은 완료했으므로 본격적으로 Linaro LINUX 를 설치해보도록 한다.

먼저, petalinux 가 필요한데, 이는 전에 

[ZYNQ MINI] 보드로 petalinux 돌려보기 - [1] :: 블러그 (tistory.com)

 

[ZYNQ MINI] 보드로 petalinux 돌려보기 - [1]

petalinux 2018.3 버전을 사용하였음 Linux 설치에 앞서, 새로 Vivado Project 를 먼저 생성 해 준다. Project name 은 그림과 같이 설정하고, 나머지는 이전과 동일하게 한다. 물론 소스코드는 생성하지 않는다

hipenhw.tistory.com

 

에서 설명했으므로 생략한다.

다음으로 

 

Linaro Releases

 

Linaro Releases

 

releases.linaro.org

에 접속해 debian > images > alip-armhf > latest > linaro-jessie-alip-20161117-32.tar.gz 를 다운 받는다.

 

그리고 처음으로 나와서, archive > ubuntu > images > gnome > latest > linaro-vivid-gnome-20151215-714.tar.gz 도 다운받는다.

 

 

 

그리고 이전까지 사용했던 arm_fpga_hdmi_output 프로젝트를 살짝 수정해서 사용한다.

블록 디자인을 열어 주고, ZYNQ PS를 더블클릭 해 준다.

 

 

다음 그림에 해당하는 항목을 체크 해 준다.

 

 

 

 

아마 여기까지는 다 되어 있을 확률이 높다.

다음은 안 되어있을 것이므로 체크해 준다.

 

 

 

다음은 MDIO를 배치해야 인터넷이 정상적으로 동작한다고 한다.

이쪽에서는 주의해서 볼 필요가 있다.(아마 다 되어 있을 것임)

 

 

 

 

 

 

클럭도 확인해 준다. 아마 값이 같게 설정되어 있을 것이다.

 

 

 

클럭설정까지 마쳤다면 다시 MIO 설정으로 돌아와 USB reset 세팅을 다시 해 준다.

 

 

GPIO는 아마 되어 있을 것이다.

DDR 세팅도 봐 준다.

 

 

다음은 인터럽트 세팅이다.

다음과 같이 설정 해 준다.

 

다 했다면 OK를 눌러 나온다.

 

이후 기타 설계 변경 사항으로, AXIGPIO 모듈과 HDMIHPD 신호를 삭제해 HDMI 삽입을 능동적으로 감지를 없애고 인터페이스가 능동적으로 출력하게 한다. HDMI은 원래 32비트인데 우리는 데이터를 정렬해서 24비트로 변환했으므로 axi-streamsubset converter 모듈도 함께 삭제한다.

 

 

AXI GPIO를 in0 으로 받던 Concat은 input 라인을 2로 줄여 준다.

 

이후 초기화 된 in2를 다시 in0에 연결해 준다.

 

AXI4-Stream to video out 출력 video out을 RGB_DVI에 직접 연결했고, axi-stream subsetconverter 를 삭제해 더 이상 변환이 불필요하다.

그리고 AXI-GPIO를 삭제했기 때문에 AXI Interconnect 모듈에 인터페이스가 하나 부족해진다.

따라서 다음과 같이 설정한다.

 

AXI Interconnect 모듈을 더블클릭해 마스터 인터페이스를 3으로 조정 해 준다.

여기서 RGB 픽셀 위치를 전환해야 한다.

 

사람마다 링크는 다를텐데, 나는 이쪽에 파일이 들어 있었다.

D:\ZYNQ_MINI\ZYNQ_MINI_ New\03 Sample Projects\7010\LINUX部分\02运行带图形界面的linux系统\zynq_linux_desktop\repo\ip\rbg_rgb

 

대충 보면 알 것으로 생각하고 넘어가겠다.

해당 폴더(rbg_rgb)를 현재 내 프로젝트에 복사해 온다.

RBG 배열을 RGB 로 reordering 할 뿐인 별 것 없는 코드이다.

내 프로젝트의 repo > ip 에 넣어 준다.

 

그리고 IP를 불러 와야 한다.

단순히 Refresh 를 했을 때 IP 추가가 자동으로 되지 않아 내 repo 링크를 삭제하고 다시 추가해서 불러오는 데 성공했다.

Custom IP를 불러오는 것은 

[ZYNQ MINI] Linaro LINUX 사용해 보기 + HDMI 세팅 - [1] :: 블러그 (tistory.com)

 

[ZYNQ MINI] Linaro LINUX 사용해 보기 + HDMI 세팅 - [1]

이번에도 셀러가 제공해준 파일을 참고한다. Vivado를 실행시켜 준다. 프로젝트 생성 전,셀러는 Linaro LINUX를 사용하기 위해 arm_fpga_hdmi_output 프로젝트를 가져왔다고 한다.우리는 아직  HDMI 를 해

hipenhw.tistory.com

의 초반 부분에 기록해 두었다.

 

아무튼 RBGtoRGB IP를 불러 온다.

 

이 세 모듈에 대해서 처리를 해 준다.

Output 핀에 있는 + 를 누르면 세부적으로 볼 수 있다.

 

다음과 같이 연결 해 준다.

연결을 다 했다면 저장하고, Wrapping 하고(아마 되어 있을 것임) 합성을 진행한다.

I/O 핀은 아마 다 되어 있을 건데 확인만 한 번 한다.

 

이후 Bitstream 까지 생성 해 준다. Export Hardware(include bitstream) 해 주고

다 했다면 SDK를 켜 준다.

 

다음으로, petalinux 를 설치했을 때 처럼 hdf 파일이 필요하다.

design_1_wrapper_hw_platform_0 에 있는 system.hdf 를 백업 해 둔다.

 

이제 다시 VM을 켜 준다.

Ubuntu 16.04 버전으로 키는 것을 잊지 말자

 

VM 으로 와서 먼저 

source settings.sh

로 petalinux 툴을 init 한다.

다음으로 프로젝트에 system.hdf 를 추가해 준다.

 

$ petalinux-create --type project --template zynq --name petalinux_desktop

으로 새로 프로젝트를 하나 생성한다.

 

생성한 petalinux_desktop 프로젝트에 system.hdf 파일을 넣어 준다.

 

$ petalinux-config --get-hw-description=.

 

을 이용해 설정에 들어간다.

다음 과정을 따른다.

 

 

Image Packaging Configuration > Root filesystem type > SD card 선택 > 아래 Save > OK > Exit > Esc 두번 눌러서 다시 메인 화면으로 > Linux Components Selection > linux-kernel > ext-local-src > External linux-kernel local source settings > External linux-kernel local source path > /petalinux_prj/linux_kernel 기입(사진참고, petalinux_prj 소스는 자기 환경에 맞게 설정하기) > OK > 아래 Save > OK > Exit > Esc 또는 Exit 계속 해서 나가기

 

 

아까 지정했던 /petalinux_prj/linux_kernel 을 만족하기 위해 /petalinux_prj 위치에서

$ mkdir linux_kernel

 

을 사용해 폴더를 하나 생성 해 준다.

이후 Linaro LINUX 파일을 모두 VM으로 옮겨 온다.

 

 

추가로 셀러가 제공해 준 5) linux software 의 linux-4.14.0-v2018.3.tar.gz 도 가져 와야 한다.

 

 

그럼 파일이 이렇게 3개 남게 된다. 

그런데 나는 조금 불안해서 petalinux_prj 하위에 kernel_software 라는 폴더를 만들어 이 3개를 거기에다가 저장했다.

 

$ tar --gzip -zxvf <linux-4.14.0-v2018.3.tar.gz 있는 위치>

실행해 준다.

 

 

다시 petalinux_desktop 프로젝트로 돌아가서 

$ petalinux-config -c kernel 

 

을 완료해 준다.

(오류가 나면 linux-4.14.0 파일의 owner, group 을 자기 자신으로 세팅하고 다시 해보자)

 

진행되다 보면 커널 설정이 나온다.

 

 

아래 쭉 내려서 Device Drivers > Graphics support > Digilent VGA/HDMI DRM Encoder Driver, Xilinx LCD/HDMI driver support 두 항목이 체크되어 있는지 확인한다.(기본값은 체크 되어 있음.)

 

 

다 했다면 Exit 로 나오자. 만약 수정 사항이 있다면 save 해야 한다.

 

뭐 다운받을게 이렇게 많은지 모르겠는데, 계속 나온다.

셀러가 제공해 준 파일에서, 3)sample projects > 7010 > linux 어쩌고 > 02 (내 임의로 linarolinux라 이름붙임) > system-user.dtsi 파일을 vm으로 옮겨 주자.

 

 

다운받은 이 파일은 좀 복잡한 폴더로 넣을 예정이다. 내 경우 경로가

/peta/petalinux_prj/petalinux_desktop_project-spec/meta-user/recipes-bsp/device-tree/files
내에 있는 system-user.dtsi 파일을 교체해 준다.

 

교체했다면 petalinux_desktop 프로젝트 폴더에서 

$ petalinux-build

 

로 빌드를 시작한다.

오류 메세지가 하나 나왔지만 일단 진행 해 본다.

 

 

 

TFTPBOOT 폴더에 접근을 할 수 없어서 카피를 건너뛰었다고 나온다.

컨픽에서 설정을 다시 해주기는 귀찮다.

일단 BOOT.BIN 은 생성되었으니 사용해 본다.

 

- 추후 수정 예정 -

 

 

 


 

일단 먼저 진행했는데

 

유선 라인으로는 잘 동작하긴 하는데 디스플레이 되는 화면에 아무것도 나타나지 않아 해결을 좀 해야 할 것 같다..

설정 상에서 뭔가 잘 못 건든 것 같다. 셀러가 제공해 준 BOOT.BIN, image.ub 는 정상인걸 보면 말이다.

 

 

 

 

반응형
반응형

 

이번에도 셀러가 제공해준 파일을 참고한다.

 

Vivado를 실행시켜 준다.

 

프로젝트 생성 전,

셀러는 Linaro LINUX를 사용하기 위해 arm_fpga_hdmi_output 프로젝트를 가져왔다고 한다.

우리는 아직  HDMI 를 해 보지 않았기 때문에 이번에 같이 진행하도록 한다.

ZYNQ_MINI_New > 02 Tests(중국어를 임의로 번역했다. 2번 폴더다) > ARM + FPGA > 04 ZYNQ HDMI 어쩌고 pdf파일을 열어준다.

 

 이 파일을 먼저 선행 학습해 본다.

 

이제 프로젝트를 생성한다.

프로젝트 이름 : arm_fpga_04_hdmi_output

나머지는 전에 했던 설정들과 동일하다.

 

 

프로젝트를 생성했다.

Create Block Design > ZYNQ7 Processing System을 바로 추가해 준다.

 

 

이전에 했던 것과 비슷하게 세팅을 진행한다.

 

 

체크 된 상태여야 한다.

GP0는 slave고, 다른 모듈에 의한 비디오 전송은 비디오 스트림을 제어해 데이터 전송을 시작한다고 한다.

 

 

S AXI HP0 Interface를 새로 체크해 준다. 

 

Peripheral I/O의 이더넷, usb, sd, 시리얼 포트를 조정한다.

 

 

다음은 MIO 설정을 본다.

 

 

HDMI만 하는 프로젝트에서는 이더넷을 사용하지 않지만, 우리가 하려는 Linaro LINUX를 구동하기 위해 켜는 옵션이다. 위의 I/O MIO16..27 도 설정해야 하고, Bank 1 I/O Voltage 도 LVCMOS 1.8V 로 고쳐줘야 한다.

그리고 속도를 모두 fast로 고쳐준다.

 

다음은 USB 0 을 고쳐준다.

 

전압은 이미 모든 I/O 타입의 전압을 바꿨기 때문에 속도만 바꿔준다.

 

다음은 SD0 이다.

 

 

마찬가지로 속도만 바꿔준다.

시리얼 포트는 기본으로 놔둔다.

 

다음은 클럭 세팅이다.

두 개의 클럭을 가져야 하는데, 한쪽은 100Mhz, 다른 한 쪽은 140Mhz를 가진다.

100Mhz는 AXI 버스와 타이밍 컨트롤에 사용되고, 

140Mhz 는 HP0 포트 비디오 데이터 스트림의 DMA 부분이다.(?)

 

 

 

아무튼 바꿔준다.

 

VDMA 모듈을 사용한다고 한다.

 

이거 때문에 100Mhz, 140Mhz 두개를 만들었다고 한다.

 

다음은 DDR 세팅을 한다.

 

 

두 부분을 수정해 준다.

 

마지막은 인터럽트 설정이다.

인터럽트는 PL-PS 인터럽트를 필요로 하는데, FPGA부분이 제공하기 위함이다.

프로세서는 HDMI insert detection interruptions, VDMA image transfer interruptions, image timing interruptions 에 사용된다고 한다.

 

세팅은 다음과 같다.

 

다 했으면 OK를 눌러 준다.

 

IP가 이렇게 변한 것을 볼 수 있다.

 

다음은 프로세서의 로직 부분에 대해 설명한다.

자일링스에서 제공하지 않는 IP를 사용해야 한다.

셀러가 제공해준 파일에

03 sample projects > 7010 > arm+fpga > 04_hdmi_output > repo > ip

axi_dynclk_v1_0

rgb2dvi_v1_2 

두 개의 폴더가 존재한다.

 

 

설명은 이렇다.

axi_dynclk_v1_0: IP module that generates corresponding display clock signals according to different resolutions, and AXI for ARM total
The line is configured.And we have used HDMI interface in the previous "HDMI interface using VGA display" tutorial, careful friends
You may also have the impression that HDMI requires two clocks, one is a pixel clock and the other is 5 times the HDMI encoded clock.This one.
The module also plays this role here, except that the output clock is configurable and uses ARM to pass through the AXI bus.
Configured. That is, ARM can configure the clock frequency of the output image through software code.

rgb2dvi_v1_2: Convert VGA display drive signal to TMDS HDMI encoded signal output to HDMI connector
Port. Same as the module used in the FPGA section "HDMI Interface Using VGA Display".

 

아무튼 이 IP를 추가하도록 한다.

추가하는 방법은 다음과 같다.

 

 

나의 경우 경로가 다음과 같다.

 

 

repo 전체를 select 해준다.

 

그럼 IP 2개, Interface 1개가 추가된다.

Apply > OK 를 눌러 나온다.

 

추가한 IP를 보기 위해 IP Catalog 를 선택해 준다.

User Repository 가 새로 생성되있는 것을 볼 수 있다.

UserIP, Video & Image Processing 에 각각 IP 가 들어있다.

 

 

기본적인 준비가 끝났다.

다음으로, AXIVideo Direct Memory Access 모듈을 추가한다.

다이어그램에서 + 를 눌러 추가한다.

 

 

추가한 뒤, 기본 ZYNQ PS를 다음과 같이 연결 해 준다.

 

 

 

새로 추가한 VDMA 를 더블클릭 해 본다.

 

 

 IP 설정 창이 나온다.

이를 다음과 같이 고쳐준다.

 

 

그리고 Advanced 옵션에 들어가 GenLock Mode를 Master 로 바꿔준다.

 

 

다 했다면 Ok를 눌러 나온다.

 

 

동그라미 친 Run Connection Automation 을 클릭한다.

 

모두 선택해 준다.

 

그럼 자동으로 연결이 된다.

그리고 VDMA(axi_vdma_0) 모듈의 왼쪽에 있는 두 개의 클럭을 수동으로 연결하고, 두 클럭은 모두 동일 클럭을 사용한다.

 

 

다음으로, AXI Stream Subset Converter 모듈을 추가한다. 

이 모듈은 32비트 데이터를 24비트 데이터로 변환하는데,

ARM은 32-bit 지만 데이터는 오직 24비트만 사용한다.

RGB 각각이 1 바이트씩 차지해 24비트가 됨.

 

다이어그램에서 subset 을 검색해 추가해 준다.

 

 

위쪽에 모듈이 하나 추가된 것을 볼 수 있다.

그리고 더블클릭 해 설정에 들어간다.

 

 

다음과 같이 설정해 준다.

이 모듈에 대한 자세한 설명은 arm_fpga_hdmi_output\related IP module documentation 에 있다

우리는 이 설정으로, RGB 데이터 배열을 설정한다.

왜냐면 이 이미지 배열은 DDR3에 저장되어 있고, 각각의 픽셀은 BGR로 배열되어 있지만 우리가 필요한 HDMI 출력 데이터는 RBG이기 때문이다.

 

설정이 끝난 이후, 다음과 같이 연결해준다.

 

 

그리고 새로운 모듈을 하나 더 추가해 준다.

+ 를 누르고 const 를 검색하자

 

 

추가를 해 준다.

마찬가지로 설정을 바꿀 것이므로 더블클릭 해 설정창에 들어간다.

 

 

1, 1 로 되어 있으면 된다.(기본값이기도 하다.)

그리고 다음과 같이 연결해준다.

 

 

다음은 AXI4-Stream to Video out 모듈을 추가해 AXI 인터페이스를 사용해 데이터를 읽은 값을 비디오 스트림으로 변환한다.

+ 표시를 눌러 vid를 검색 > AXI4-Stream to Video out 을 더블클릭 해 준다.

 

마찬가지로 설정에 들어간다.

 

 

다음과 같이 설정을 바꿔준다.

그리고 나와서 다음과 같이 연결해 준다.

 

 

연결을 완료했다면 모듈을 하나 더 추가한다.

+ 버튼 > timing 검색 > Video Timing Controller 추가한다.

 

 

 

추가한 모듈 설정에 들어가서 다음 그림과 같이 바꿔준다.

 

 

여기까지 완료했다면, Run Connection Automation 을 선택한다.

 

 

 

위 그림과 같으면 OK를 누른다.

 

그리고 수동으로 Video timing controller 의 vtiming_out 을 AXI4-Stream to Video out 모듈의 vtiming_in 에 연결한다.

 

연결했다면 다음은 AXI4 모듈의 vtg_ce 를 VTC의 gen_clken 에 연결한다.

 

 

연결을 완료했다면 HDMI 를 위한 인코딩 모듈을 추가한다.

+ > rgb2dvi 

 

 

추가한 뒤 더블클릭해 설정에 들어가 다음과 같이 만든다.

 

 

여기서 클럭을 2개로 나눠 쓰는 이유를 설명하고 있다.

720p@30hz는 클럭을 74.25Mhz를 사용하지만, 우리는 1080p@60Hz를 사용할 것이기 때문에 클럭을 120Mhz 이상으로 만든 것이다.

 

설정을 끝내고 나왔으면 수동으로 선을 연결해 준다.

 

 

연결을 완료했다면 클럭 생성 모듈을 추가한다.

+ > dynclk 검색

 

추가하면 이런 모듈이 생성된 것을 볼 수 있다.

 

따로 설정은 하지 않고, Run Connection Automation 을 선택한다.

 

rgb2dvi 를 제외하고 모두 선택해준다.

 

다 했다면 나와서 두 모듈을 이렇게 연결해 준다.

 

 

소프트웨어가 100Mhz 클럭에 자동으로 연결되므로 이전에 자동으로 연결된 v_tc_0의 클럭 및 s_axi_acl_axik 와 v_axi4s_vid-out0 모듈의 vid_io_out_clk 신호를 수동 분리한다.

 

 

위처럼 분리하고, 하나만 하는게 아니라 총 3개의 핀을 분리해 줘야 한다.

 

그리고 다음 그림과 같이 연결 해 준다.

 

 

 

연결이 마무리 되었다면 GPIO 모듈을 추가해준다.

+ > GPIO

추가하고 설정에 들어가 다음과 같이 설정해 준다.

 

 

OK를 누르고 나와 Run Connection Automation 을 눌러 자동으로 연결되게 한다.

 

 

전부 선택하고 OK 눌러준다.

끝난 후에 블럭을 보면(Zoom fit 상태) 이따구로 되어 있다.

 

 

좀 정렬을 해 준다.

 

 

Optimize routing 옵션을 이용해 최적화를 해 봤다.

다음은 EN 핀을 추가한다.

+ > const 검색

 

만들어진 모듈의 output 핀을 누르고 Make External 옵션을 선택한다.

 

이렇게 꼬리가 생긴 것을 볼 수 있다.

 

그리고 이름을 바꿔준다.

 

 

기존 dout > HDMI_EN 으로 이름을 변경해 주었다.

 

그리고 인터럽트 제어 모듈을 하나 더 추가한다.

+ > concat

 

 

이런 모듈이 하나 더 생겼다.

더블클릭 해 설정에 들어간다.

 

 

Number of Ports 를 3으로 조정해 주고 OK 를 누른다.

각 포트를 연결한다.

 

 

AXI Video Direct Memory Access의 mm2s_introut 과 Concat의 In1을 연결

 

 

Input은 이렇게 연결해 주고 남은 Output은 ZYNQ PS에 연결한다.

 

연결이 끝난 후, Run Block Automation 을 실행시킨다.

 

OK를 누른다.

다음은 RGB to DVI Video encoder 의 output 을 외부와 연결해 준다.

 

 

 

완료했다면, 만든 디자인을 한 번 검증 해 보자.

 

 

다음과 같은 메세지가 나온다.

 

 

지금은 크게 신경쓰지 않아도 되는 듯 하다. OK를 눌러 무시한다.

이렇게 하면 디자인 생성이 완료다.

 

HDMI 검증도 해 볼 필요가 있기에 비트스트림까지 생성해 보도록 한다.

합성을 하려는데 top 모듈이 없다고 하면, 이름을 design_1 이라고 칭하고 생성한다.

 

I/O 포트가 중요하다.

 

전압이 1.8V로 되어 있는 부분들을 3.3V로 고쳐준다(LVCMOS33)

핀은 위 사진과 같이 할당해준다.

저장하고, 다시 합성부터 비트스트림 생성까지 진행한다.

 

비트스트림까지 생성이 완료되었다면, SDK를 켜 준다.

(전에 HW Export 과정이 필요하다. 그냥 File > Export 에서 진행해 주면 된다.)

 

SDK를 켰다면, 새로운 프로젝트를 만든다.

file > new > application project

 

 

프로젝트 이름은 다음과 같다.

일단 wrapping 안 하고 진행해 보도록 한다.(뭐에 쓰는건지 아직도 모르겠다)

저대로 했다면 Finish 를 눌러 준다.

 

셀러가 SDK 소스 코드를 이미 파일 안에 넣어 줬다고 한다.

 

arm_fpga_04_hdmi_output.sdk > hdmi_test > src 에서 찾도록 하자.

폴더 째로 옮겨와야 한다.

hdmi_test 폴더와 hdmi_test_bsp 폴더를 둘 다 가져오자.

 

그리고 JTAG 와 UART 에 연결해 디버깅 하면 완료 라고 하는데..

디버깅 하는 방법은 ARM 의 03_AXI_GPIO 파일을 보라고 한다. 후..

일단 모르니까 보도록 한다.

다 필요없고 SDK 사용 부분만 본다.

 

 

Debug 설정으로 들어간다.

 

 

뭔 이상한 리눅스 어플리케이션 디버깅으로 잡혀있다.

FPGA 상에서 디버깅 환경을 만들기 위해 Debug type를 Standalone application debug 로 고친다.

 

 

추가로 뜨는 창에서는 Hardware platform 을 설정 해 준다.

그리고 Reset entire system, Program FPGA 를 체크 해 준다.

 

하고 Application 에서 프로세서를 선택하라고 하는데 나는 그게 안 뜬다(Hardware platform 을 design_1_hw_platform_0 으로 설정시)

 

그래서 비트스트림 파일을 저걸 쓰는 대신에 HW platform 은 ZC702_hw_platform 으로 변경한다.

 

그리고 Application 에서 ps7_cortexa9_0을 선택한다.

 

 

이랬는데 디버그가 비활성화 된 상태다. 일단 문제를 모르겠으니 sdk 폴더를 한 번 싹다 비운다.

그리고 다시 design_1 을 Wrapping 해준다.

 

wrapping 하고 나서 Export 하면 Wrapping 된 design_1이 아닌 그냥 design_1 만 내보낸다.

뭐지 제대로 한 것 같은데 싶어서 다시 비트스트림 생성을 한다.

 

역시 비트스트림 생성 과정에서 뭔가 있었던 것 같다.

다시 하니까 Wrapper 생성을 잘 한다.

 

그래도 혹시 모르니까 다시 hdmi_test 생성부터 한다.

셀러 hdmi_test 폴더를 다시 가져온다(hdmi_test_bsp 도 가져와야 함!)

 

가져 왔으면 바로 반영이 되는 시스템이 아니라 File > Refresh 를 꼭 해줘야 반영이 된다.

참고로 디버그 표시가 보이지 않는다면 위쪽 탭의 Run > Debug Config 로 들어가면 된다.

들어가서 실행시킨다.

 

 

아무튼 디버깅은 정상 작동한다.

아마도

근데 HDMI output이 아무것도 없는건가 화면이 왜 안나오는지는 잘 모르겠다

 

일단 동작은 확인했으니 HDMI 은 이까지 하고 본래 목적인 linaro linux 를 진행한다.

 

 

---------------------------------

추가

셀러가 제공해 준 소스로 debug 시는 동작하지 않았지만, Run으로는 60Hz 상에서 동작하는 것을 확인 가능했다. 참고로 30Hz로도 시험해 봤는데 현재 사용하는 모니터 출력모드는 지원하지 않아 출력이 되지 않았다.

 

Debug만 해봤기 때문에 기존 나의 코드로도 Run을 해 보았다.

잘 된다. 그냥 실행시키지 않아 화면이 출력되지 않던 것이다.

해결!

반응형
반응형

프로젝트 생성부터 시작한다.

Project name : pll_clock

Project type : RTL

Source : X

 

 

프로젝트를 생성 후 pll_clock_top.v 파일을 생성해 준다.

코드는 다음과 같다.

module pll_clock_top(
    input i_Clk,
    input i_Rst,
    output reg [3:0] o_LED
    );
    
parameter CLOCK_FREQ = 1_000_000_00;
parameter COUNTER_MAX_CNT=CLOCK_FREQ/2 - 1;    
reg [31:0] cnt;
reg [1:0] led_on_number;
wire clk_out1;
    
clk_wiz_0 clk_wiz_0_inst(
    .clk_out1(clk_out1),
    .resetn(i_Rst),
    .locked(),
    .clk_in1(i_Clk)
);

always@(posedge clk_out1, negedge i_Rst) begin
    if(!i_Rst) begin
        cnt <= 32'd0;
        led_on_number <= 2'd0;
    end else begin
        cnt <= cnt + 1'b1;
        if(cnt == COUNTER_MAX_CNT) begin
            cnt <= 32'd0;
            led_on_number <= led_on_number + 1'b1;
        end
    end
end

always@(led_on_number) begin
    case(led_on_number)
        0: o_LED <= 4'b0001;
        1: o_LED <= 4'b0010;
        2: o_LED <= 4'b0100;
        3: o_LED <= 4'b1000;
        default: o_LED <= 4'b1111;
    endcase
end
   
endmodule

 

Project manager > IP catalog 를 클릭 해 준다.

IP(Intellectual Property) 는 재사용 가능한 블럭들을 지칭한다. 근데 이 블럭들은 기능을 가지고 있는 

 

 

그러면 다음과 같은 창이 나온다.

 

 

Search : clock

 

아래에 있는 FPGA Features and Design > Clocking > Clocking Wizard 를 더블클릭 해 준다.

 

 

다음과 같은 IP 생성창이 나온다.

 

 

 

Input Frequency 를 50Mhz 로 조정해 준다.

 

 

위의 Output Clocks 탭을 클릭하고 clk_out1이 100Mhz인지 확인한다.

 

 

이 창에서 휠 다운을 해서 Reset Type > Negetive 로 돌려준다.(Active low)

 

 

OK 를 눌러 생성한다.

 

 

OK > 다음과 같은 창이 나온다.

 

 

이 정보가 생성이 된다고 알려주는데 그냥 generate 시킨다.

생성을 다하면 다음과 같은 창이 나오고 OK 눌러준다.

 

 

그럼 소스에 IP가 추가되어 있는 것을 볼 수 있다.

 

다음 사진과 같이 빨간 원을 친 부분을 누르면

 

 

 

이런 창이 뜨는데, OK를 눌러준다. 그러면 아래에 clk_wiz_0이 생기는걸 볼 수 있다(위 사진과 같음)

생성된 clk_wiz_0.v 파일을 열어본다.

 

 

자동 생성된 clk_wiz_0 모듈을 볼 수 있다.

이 모듈은 submodule 로 clk_wiz_0_clk_wiz 를 받는다.

그리고 우리가 설정한 대로 input 50Mhz clock 을 output 100Mhz clock 으로 늘려주는 역할을 한다.

 

모듈을 상세하게 더 알아보고 싶으면 submodule 을 클릭해 보면 된다.

 

반응형
반응형

오늘은 Vivado tool을 이용해 Sim & Run 까지 실행 해 본다.

먼저, 새로 프로젝트를 생성한다.

 

 

이름은 led_pwm 으로 지정해 주었다.

프로젝트 타입 : RTL

소스 X

보드 선택 : xc7z010clg400-1

 

 

프로젝트를 생성했다.

led_pwm.v 파일을 생성해 준다.

Design source 추가 > Create file

 

생성한 led_pwm 파일을 열어준다.

소스 코드는 다음과 같이 작성했다.

 

led_pwm.v

module led_pwm(
    input i_Clk,
    input i_Rst,
    output o_LED
    );

// 시뮬레이션용으로 [7:0], 1ms sim run
reg [21:0] c_Cnt, n_Cnt;
// 시뮬레이션용으로 [4:0]
reg [9:0] c_pwm_period, n_pwm_period, pwm_counter;
reg r_LED;
    
always@(posedge i_Clk, negedge i_Rst)
if(!i_Rst) begin
    c_Cnt <= 0;
    c_pwm_period <= 0;
end else begin
    c_Cnt <= n_Cnt;
    c_pwm_period <= n_pwm_period;
end    
        
always@* begin
    n_Cnt <= c_Cnt + 1;
    n_pwm_period <= c_pwm_period;
    if(&c_Cnt)  n_pwm_period <= c_pwm_period + 10;    
end

always@(posedge i_Clk, negedge i_Rst) 
if(!i_Rst) begin
    pwm_counter <= 0;
end else begin
    pwm_counter <= pwm_counter + 1;
    if(pwm_counter < c_pwm_period)  r_LED <= 1;
    else                            r_LED <= 0; 
    if(&pwm_counter) pwm_counter <= 0;  
end

assign o_LED = r_LED;    




endmodule

 

 

 

 

simulation 에 사용할 tb_led_pwm.v 도 생성해 준다.

 

Testbench 파일 생성을 위해 simulation sources 를 만든다.

이름은 tb_led_pwm 으로 지정한다.

 

 

내용은 다음과 같다. (simulation sources 에 파일이 있다)

tb_led_pwm.v

module tb_led_pwm();

reg clk, rst;
wire led;

led_pwm U0(clk, rst, led);

always
#10 clk = ~clk;

initial begin
    clk <= 0; 
    rst <= 0; 
    @(negedge clk) rst <= 1;
end

endmodule

 

/  \

| 시뮬레이션  |

\_ _ _ _ _ _ _ /

시뮬레이션은 왼쪽의 SIMULATION > Run Simulation > Run behavior simulation 에서 가능하다.

누르면 다음과 같은 창이 나온다.

 

보기 편하도록 objects, scope 탭을 최소화한다.

 

위의 메뉴 탭을 보면 이게 시뮬레이션에서 사용하는 도구들이다.

Start(T) 버튼, 가장 오른쪽의 Relaunch simulation,  가장 왼쪽의 Restart 만 일단 써 보도록 한다.

처음에 10 us 로 지정이 되어 있을텐데 1 ms로 바꿔 주고 Start(T) 를 눌러준다.

 

다음의 Zoom fit 버튼을 눌러준다.

 

 

그러면 시뮬레이션이 실행되는데 이렇게 되어 있으면 정확하게 보고 판단할 수 없으므로 Zoom 을 이용해 세부 값을 알아본다.

나는 보통 왼쪽 Ctrl 을 누르고 마우스 휠을 돌리는게 편해서 자주 그렇게 사용한다.

 

 

보게 되면 led가 변하는 모습을 확인할 수 있다. 코드가 주기성을 가지므로 시뮬레이션 결과도 주기성을 가진다.

만약 버그로 led 표기가 제대로 되지 않는다면 relaunch simulation 버튼을 눌러 다시 실행한다.

코드를 수정해도 relaunch를 해 줘야 바뀐 코드가 정상 적용된다. Restart 로는 불가능하다.

 

 

다음은 보드에서 실행되는 모습을 확인한다.

합성 진행해 준다.

I/O 포트는 다음과 같다.

 

 

Implementation 진행 해 준다.

이후 bitstream 만들고 HW manager 켜서 테스트까지 한다.

 

 

잘 동작하는 것을 볼 수 있다.

조금 더 세부 조정을 위해서는 카운팅하는 값을 내리면 된다.

반응형
반응형

petalinux 설치를 VM 에 완료했다.

 

 

다음과 같은 파일이 생성되었다.

 

source settings.sh

 

settings.sh 를 반드시 실행시켜야 petalinux 커맨드가 동작한다.

 

Warning 코드들이 뜨는데, 일단 무시하고 진행해보도록 한다.

 

다음 코드를 커맨드 창에 입력하면 아래 그림과 같은 폴더 petalinux_prj 가 하나 생긴다.

petalinux-create --type project --template zynq --name petalinux_prj

 

 

 

폴더에 접근한다.

 

처음에 system.hdf 파일은 없고, 이 파일은 SDK 에서 system.hdf 라는 파일을 가져 온 것이다.

[1] 편을 보면 SDK 실행까지 있는데, 거기서 가져왔다.

 

petalinux-config --get-hw-description=.

 

로 실행을 시켜 보자.

 

 

에러가 났다.

 

혹시 몰라 권한을 바꿔 줬다.

 

 

자일링스 커뮤니티에서는 이렇게 말하고 있다.

 

우분투 Minimal 설치를 했다면 패키지 설치가 안 되었을 가능성이 있다. 라고 한다.

그래서 설치 시도를 해 봤는데, 이미 설치되어있다고 한다.

 

어떤 사람은 libtinfo5 가 설치되어 있지 않아서 안 되었었다고 한다.

sudo apt install libtinfo5

 

이걸 설치하니 Kconfig 는 넘어가는데 다른 에러가 나온다.

 

 

짜증나서 모든 의존성 관련 패키지를 설치해 보았다.

 

 

PetaLinux Tools Documentation: Reference Guide - 2020.1 English

 

docs.amd.com

 

그래도 안 되는 것 같다.

일단 보류.. 리눅스 재설치를 풀 패키지를 포함해서 한 번 해봐야겠다.

 


 

Ubuntu 18.04.7 LTS 버전, normal installation 으로 설치를 했다.

8 Core, 12GB RAM, 300GB storage 로 새로 생성하였다.

 

VM을 키고, SW update를 진행해주고 다시 petalinux 2018.3 을 설치했다.

 

알고보니 Ubuntu 버전이 안 맞을수도 있다는 생각이 들었다.

 

 

This error is coming though it installed petalinux-2018.3 installation on ubuntu 18.04

 

support.xilinx.com

 

다 안되고 처음으로 되돌아와서 log 를 보기로 했다.

 

 

결론은 창 크기가 작아서 안 된 거라고 한다..../

콘솔을 항상 작게 쓰다 보니까 이런 일이 발생한 것 같다

 

18.04는 다음과 같은 환경 설정을 해 줬다.

 

sudo apt-get install -y tofrodos iproute2 gawk gcc g++ git make net-tools libncurses5-dev tftpd-hpa zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0 screen pax gzip automake python-dev

 

petalinux 는 전과 동일하게 해 줬다.

dpkg/status 파일은 바꾸지 않아도 잘 동작하는 것을 확인했다.

 

아무튼 petalinux-config 커맨드를 실행시키면

 

 

다음과 같은 창이 뜬다.

근데 이번엔 failed to source bitbake 에러가 난다.

 


더 삽질하지 않고 petalinux 2018.3 버전에 맞게 ubuntu 2016.04 LTS 로 설치를 시도해 보았다.(얘는 minimal installation이 없다)

정말 놀랍게도

오류가 하나도 나오지 않는다.

 

환경 설정은 다음과 같이 해줬다.

sudo apt-get install -y tofrodos iproute2 gawk gcc g++ git make net-tools libncurses5-dev tftpd-hpa zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0 screen pax gzip automake python-dev

 

이후 

 

 

Downloads

Vivado, Vitis, Vitis Embedded Platform, PetaLinux, Device models

www.xilinx.com

2018.3 Petalinux 2018.3 Installer 를 다운받아 준다.

받은 파일을 적당한 디렉토리에 넣어 준다.(/home 디렉토리 하위 폴더여야 된다)

 

petalinux-v2018.3-final-installer.run 파일이 있는 폴더에서 권한을 먼저 바꿔준다.

chmod 777 petalinux-v2018.3-final-installer.run

 

그리고 실행시킨다.

 

./petalinux-v2018.3-final-installer.run

 

 

실행하면 위와 같이 PetaLinux SDK has been installed to <path> 라고 나온다.

.run 파일이 있는 해당 폴더에서 아래의 명령어를 실행한다.

source settings.sh

 

실행이 완료되었다면 다음의 명령어를 입력한다.

petalinux-create --type project --template zynq --name petalinux_prj

 

끝나면 현재 폴더 하위에 petalinux_prj 라는 폴더가 생성된 것을 볼 수 있는데, 그 폴더로 가면 

config.project, project-spec 라는 파일과 폴더 2개만 있다.

여기서 

petalinux-config

 

명령을 해 주면 build, components 폴더 두개가 더 생긴다.

 

그리고 이 폴더에 system.hdf 를 넣어 줬다.(Vivado SDK 에 있던 파일)

 

system.hdf 의 권한도 바꿔준다.

 

petalinux-config --get-hw-description=.

 

명령어도 잘 동작한다.(안 되면 터미널 창을 최대화 하고 해보자. 시행착오중에 관련 내용이 있다)

 

 

다른건 할 필요가 없고

아래의 save 클릭하고 저장이 끝났으면 Exit 를 눌러준다.

 

 

그럼 자동으로 이후 과정이 실행된다.

이후 다음 명령어를 입력한다.

petalinux-build

 

빌드에는 시간이 어느정도 소요된다.

 

빌드가 완료되었다면 다음과 같은 창으로 들어간다.

/petalinux_prj/images/linux

 

uboot, image, fsbl 파일이 들어있는 것을 볼 수 있다.

 

다음으로,

우리가 만약 bitstream 파일을 hdf 에 포함했다면 명령어는 다음과 같다.(이번에 하는 것은 이게 아님)

petalinux-package --boot --fsbl zynq_fsbl.elf --fpga --u-boot --force

 

하지만 지금까지 만든 파일에는 bitstream 파일을 넣지 않았으므로 명령어는 다음과 같다.

petalinux-package --boot --fsbl zynq_fsbl.elf --u-boot --force

 

 

 

 

컴파일된 BOOT.BIN 파일이 output 으로 나오게 된다.(얘는 필요없는 것 같긴 하다)

BOOT.BIN, image.ub, u-boot.elf, zynq_fsbl.elf 파일을 Windows 환경으로 다시 가지고 온다.

 

zynq_fsbl.elf : 시스템 부팅, DDR3 초기화, 시스템 클럭 초기화, FLASH 또는 SD카드의 firstagebootloader 를 DDR3에 로딩해 수행, u-boot를 DDR3에 로딩하여 FPGA의 BIT 구성을 주로 수행하며, BIT가 없으면 무시하는 작업, PS를 구성하는 MIO등 일련의 작업 수행

u-boot.elf : boot 부팅 파일, image.ub를 DDR3에 로딩하는 것을 책임짐

image.ub : petalinux의 커널(?)

 

나는 윈도우즈 환경 상에서 petalinux 라는 폴더를 하나 바탕화면에 생성하고 다음 파일들을 저장했다.

 

상태는 클라우드 관련이므로 신경쓰지 말자.

 

(petalinux-v2018.3-final-installer.run 파일이 없다고 해서 다운받을 필요는 없다)

 

다시 Vivado 를 켜서 저번에 만들어 뒀던 프로젝트의 SDK를 실행시키자.

그리고 위의 Xilinx > Create Boot Image 탭에 들어간다.

 

Output BIF file path 는 기존 프로젝트의 sdk 폴더에 저장한다.

(output path를 지정하는 것이지 output 파일을 열어야 하는 것이 아님)

Output path 는 BOOT.bin 파일이 자동으로 잡힌다.

 

나는 경로가 이렇게 나왔다.

 

 

다음으로 Boot image partitions 에 ubuntu 에서 받아왔던 fsbl, u-boot 를 추가할 것이다.

path 에 한글이 들어가지 않게 주의하자. 만약 들어간다면 C:\ 에 옮겨서 진행하는 것이 좋을 것이다.

 

Bootloader 로 zynq_fsbl.elf 를 추가하고

Datafile 로 u-boot.elf 를 추가해 준다.

 

 

다 했으면 Create Image 로 이미지 생성을 해 준다.

 

여기서 생성한 BOOT.bin 을 우분투에서 가져온 파일들을 저장하는 공간으로 넘겨준다.

나는 petaOS라는 폴더를 추가로 생성해 거기에 저장했다.

 

그리고 SD 카드를 하나 준비한다.(32GB, 다이소에서 삼)

SD 카드 리더기도 하나 필요하다(다이소에서 삼)

 

SD 카드 리더기에 sd카드를 꼽고 컴퓨터에 마운트시키면

 

 

나의 경우 E 드라이브로 잡혔다.

E드라이브를 FAT32로 포맷해 준다.

 

 

딱히 건드릴 것은 없다.

BOOT.bin 과 image.ub를 여기에 넣어 주도록 한다.

 

SD 카드를 빼서 보드에 끼워준다.

 

 

BOOT(sd0) 쪽으로 끼워 준다.

 

그리고 ON KE 스위치를 11로 맞춰준다.

 

 

우리는 COM 포트로 연결해야 하기 때문에 UART를 사용한다.

 

보드의 UART 포트와 PC를 연결하고 장치 관리자를 열면 포트(COMx, x는 숫자) 가 연결된 것을 볼 수 있다.

 

 

나는 COM4 포트로 연결되었다.

 

그리고 Serial 연결을 위해 putty.exe 를 실행시켜 준다.

putty 다운은 여기서 한다.

 

Download PuTTY - a free SSH and telnet client for Windows

Is Bitvise affiliated with PuTTY? Bitvise is not affiliated with PuTTY. We develop our SSH Server for Windows, which is compatible with PuTTY. Many PuTTY users are therefore our users as well. From time to time, they need to find the PuTTY download link. W

www.putty.org

 

putty 를 실행한다.

 

처음에는 Connection type 이 SSH로 되어 있을 텐데 Serial 로 바꿔 준다.

그리고 Serial line에 장치 관리자에서 봤던 포트 번호를 입력해 준다.(COMx)

속도(Baud rate) 는 115200 으로 지정해 준다.

 

다 했다면 open 을 눌러 열어준다.

들어가서 엔터 한번 쳐 주면 창이 정상적으로 작동한다.

 

 

최초 로그인 id와 pw는 건드리지 않았다면 모두 root 로 동일하다.

 

petalinux가 보드 상에서 실행된 것을 볼 수 있다.

 

 

이것으로 petalinux 시스템 올리기를 완료했다.

반응형
반응형

이전에는 Ubuntu 환경이 필요해서 petalinux 설치가 막혔었다.

 

이번 시간에는 Virtualbox를 사용해 Ubuntu를 설치해 본다.

 

먼저, 다운로드 링크다.

 

Downloads – Oracle VM VirtualBox

Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. VirtualBox 7.0.14 platform packages The binaries are released unde

www.virtualbox.org

 

접속해 Windows host 를 받아 설치한다.

 

* 7.0.14 로 진행하였다.

 

 

딱히 건들 것이 없다. Next 만 눌러 설치한다.

설치하게 되면 이런 앱이 켜지게 된다.

 

 

우리는 Ubuntu 를 먼저 설치해야 하니 Ubuntu 20.04 LTS 를 다운받으러 간다.(중요 : Petalinux 2018.3을 돌리려면 Ubuntu 16.04 LTS를 받아야 한다)

 

 

Ubuntu 20.04.6 LTS (Focal Fossa)

Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m

releases.ubuntu.com

 

 

 

Ubuntu 16.04.7 LTS (Xenial Xerus)

Select an image Ubuntu is distributed on two types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what mos

releases.ubuntu.com

 

64-bit PC desktop image 를 설치해 준다.

설치가 모두 완료되었다면 VM에 우분투를 설치 할 차례이다.

 

 

새로 만들기를 선택한다.

 

 

이름은 구분할 수 있는 이름으로 설정한다.

 

 

메모리와 프로세서의 경우, 자신의 환경에 맞게 설정한다.

Ubuntu 20.04 버전은

  • 2 GHz dual core processor
  • 4 GiB RAM (system memory)
  • 25 GB of hard drive space (or USB stick, memory card or external drive but see LiveCD for an alternative approach)

을 시스템 요구사항으로 말하고 있다.

나는 4 Core, 6GB Memory 로 설정했다.(16.04도 동일)

 

 

하드 드라이브의 경우, 50기가로 설정했다.(정상적인 동작을 위해 최소 80기가 이상으로 할당하자)

 

이후 설정에서 저장소 > 디스크 파일 선택 > 다운받은 ubuntu iso 파일 선택을 해 준다.

 

 

확인을 누르고, 실행시켜준다.

 

그러면 알아서 실행이 되고, 우분투를 설치 할 건지에 대해 물어본다.

 

 

 

언어는 영어로 놓고 Install Ubuntu 를 클릭한다.

Keyboard layout 도 English(US) 로 설정해 준다.

 

 

Minimal installation 을 클릭하고 Continue (16.04 버전은 이런게 없다)

 

 

Erase disk and install Ubunu 누르고 Install Now 클릭

 

 

Continue 클릭 해 준다.

위치를 물어보는 것은 시간대 때문에 그렇다. 아무거나 해도 상관 없다.

 

 

name, password 를 정하고 continue 를 눌러준다.

간단한 용도로만 쓸 예정이기 때문에 보안은 크게 신경 쓰지 않는다.

 

설치에 시간이 어느 정도 소요되기 때문에 기다려 준다.

 


 

설치가 끝나면 재시작 해 준다.

(이후 내용은 시행착오이니 보드로 petalinux 돌리기 - [3] 의 16.04 설치 내용부터 보면 깔끔하게 설치 가능하다)

 

Firefox 브라우저를 통해 다시 petalinux 2018.3 을 다운받는다.

 

 

다음으로 리눅스 콘솔을 열어 다음과 같은 명령을 실행한다. (바탕화면에서 우클릭으로 열 수 있다.)

 

sudo apt-get install update

sudo apt-get install -y tofrodos iproute2 gawk gcc g++ git make net-tools libncurses5-dev tftpd-hpa zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0 screen pax gzip automake

 

sudo 명령어로 인해 Password 를 요구하는데, 버튼을 눌러도 아무 반응이 없다.

하지만 걱정하지 말자. 실제로는 비밀번호가 다 쳐지고 있으니까 마음 놓고 pw 를 입력하면 된다.

 

.. 로 될 줄 알았는데 Python 이 발목을 잡았다.

$ sudo apt install python 으로 설치를 했는데, 자꾸 2.7.3 보다 위의 버전을 설치해 오라고 했다.

 

리눅스 우분투 python 다른 버전 설치

작업 환경 - OS : Ubuntu 18.04.6 LTS 기본적으로 우분투 운영체제에 python2, pytho3가 설치되어있었다. 하지만 내가 개발한 것을 리눅스 서버에서 돌리려면 아무래도 개발환경과 같은 버전으로 맞춰주는

joytk.tistory.com

따라서 이 포스트를 참고해 파이썬 2.7.3을 설치했다.

근데도 계속 다른 파이썬 버전이 잡히는 것 같다.

 

찾아보니 같은 이슈를 겪고 있는 외국인이 많은 것 같다. 

 

 

 

python error when installing Xilinx Petalinux on Ubuntu 20.04

I got this error while I tried to install Xilinx Petalinux on Ubuntu 20.04 dpkg-query: package 'python' is not installed and no information is available Use dpkg --info (= dpkg-deb --info) to exam...

stackoverflow.com

 

Cody Piersall 씨가 준 설치법을 참고로 하면 실행이 된다.

내용은 다음과 같다.

 

 

다음은 다운로드가 모두 끝난 petalinux 파일을 를 옮겨준다.

나는 Downloads --> /home/<사용자명>/peta2018 폴더에 저장했다.

 

파일 실행을 위해 chmod 로 실행 파일의 권한을 바꿔준다. 이후 실행까지 한다.

chmod 777 petalinux-v2018.3-final-installer.run

./petalinux-v2018.3-final-installer.run

 

진행이 되면서 EULA 등 license agreements 가 나오는데,

pgdn 키를 이용해서 아래로 내려서 볼 수도 있고, q를 누르면 즉시 뷰어가 꺼진다.

그리고 모든 항목에 y 를 눌러 계속 설치하자.

 

 

 

 

Yocto SDK 에러가 났다..

 

dpkg 때문에 python 이 인식이 안되서 에러가 난다니 하는 사람들도 있었다.

일단 보류..

 


 

다른 PC 환경에서도 진행 해 보았다.

 

$ sudo apt upgrade 를 먼저 진행하고

Python 설치부터 python2 를 설치해 보았다.

그리고 메뉴얼 방식으로 /var/lib/dpkg/status 파일을 수정했다.

$ sudo vi /var/lib/dpkg/status

Package: python
Status: install ok installed
Maintainer: Fake Entry <fake@example.com>
Architecture: all
Version: 2.7.17
Description: fake package for petalinux

 

의 내용을 가장 상단에 추가해 줬다.

 

$ sudo apt upgrade 이후

재부팅을 한 번 하고 다시 진행해 보았다.

qemu 설치

$ sudo apt install python-dev

파이썬 버전이 역시 문제인 것 같다.

 

 

에러가 좀 뜨긴 하는데 설치는 완료되었다고 뜬다.

 

반응형
반응형

petalinux 2018.3 버전을 사용하였음

 

Linux 설치에 앞서, 새로 Vivado Project 를 먼저 생성 해 준다.

 

 

Project name 은 그림과 같이 설정하고, 나머지는 이전과 동일하게 한다.

물론 소스코드는 생성하지 않는다.

 

다 생성했다면, IP 블록을 하나 생성한다.

 

 

이후 다이어그램 창에서 ZYNQ PS를 불러온다.

 

 

이후 ZYNQ7 PS 를 더블클릭해 Configuration tab 에 들어가 다음과 같이 설정 해 준다.

 

 

Peripheral I/O Pins 에 들어가 UART1을 enable 해준다.

 

 

Clock configuration 에서 FCLK_CLK0 도 disable 해준다.

 

 

DDR configuration 에서 Memory part, bus width 를 바꿔 준다.

 

 

다 되었으면 OK

 

 

이후 Run block Automation 으로 DDR, FIXED_IO output 으로 나오게 설정한다.

 

여기서 다시 ZYNQ7 PS 를 더블클릭해 이번에는 MIO Configuration 에 들어간다.

 

 

해당하는 부분들을 바꿔 준다.

조금 내리면 SD 0 이 보이는데 이것도 체크 해 준다.

 

 

이후 OK 를 눌러준다.

 

다 되었다면 SDK를 실행시키기 위해 만든 디자인을 Wrapping 해준다.

 

이후 Output 파일을 만들어 준다.(Wrapping 하기 전 해도 된다.)

 

 

이후 파일을 Export 해준다.

 

 

그리고 SDK를 실행시켜 준다.

 

 

HW에 대한 정보들이 나와있는 페이지를 볼 수 있다.

 


Petalinux 2018.3 을 다운받는다.

다운로드 경로는 다음과 같다.

 

Downloads

Vivado, Vitis, Vitis Embedded Platform, PetaLinux, Device models

www.xilinx.com

 

Petalinux installer 를 다운받아 준다.

 

 

Windows 환경에서 해 보려고 했는데, 아무래도 Linux 환경에서만 가능한 듯 하다.

따라서 Virtual Machine 을 설치해서 해 보도록 하겠다.

 

반응형
반응형

03_Use SDK to solidfy FLASH code.pdf 를 참고하였다.

 

이번에는 셀러가 제공해 준 코드를 사용해 만들어 보도록 한다.

먼저, 프로젝트를 하나 생성한다.

프로젝트 네임 fpga_03_fpga_flash_download
프로젝트 타입 RTL project
소스 추가 X
보드 설정 xc7z010clg400-1

 

 

생성된 프로젝트 모습이다.

여기서 이번에는, IP INTEGRATOR 의 Generate Block Design 을 선택한다.

 

 

OK 를 선택한다.

그럼 Design 탭이 추가로 생성된 것을 볼 수 있다.

소스에도 디자인 소스에 design_1.bd 파일이 추가된 것을 볼 수 있다.

 

 

다이어그램에 + 에 커서를 갖다대면 Add IP 라는 창이 뜨는데, 이를 선택한다.

 

 

ZYNQ7 Processing System 을 선택한다.

 

 

그러면 ZYNQ7 PS 를 가지고 오게 된다. 이를 더블클릭 해 보자.

 

 

내부 구조가 나오게 된다.

 

이번에 설정할 것은, PS-PL Configuration 을 먼저 클릭해 보자.

General > Enable Clock Resets > FCLK_RESET0_N 의 Select 를 disable 한다.

 

 

아래의 AXI Non Secure Enablement > GP Master AXI Interface > M AXI GP0 interface의 select 도 disable 한다.

 

 

왼쪽 네비게이터 탭의 Peripheral I/O Pins 에 들어간다.

Quad SPI Flash 를 활성화 한다.

 

 

이후 MIO Configuration 으로 들어가 Quad SPI Flash 항목의 Speed를 모두 Fast로 바꾼다.

 

 

이후 Clock Configuration > PL Fabric Clocks > FCLK_CLK0 을 disable 한다.

 

 

이후 DDR Configuration > DDR Controller Configuration > Memory Part 를 MT41J128M16 HA-125로 바꿔준다.

 

 

아래의 Effective DRAM Bus Width 도 16Bit 로 바꿔준다.

 

 

긴 설정 작업을 다 했다. OK 를 눌러 나간다.

 

 

위의 초록색 바에 Designer Assistance avilable. Run Block Automation 이라고 나와 있는데, Run Block Automation 을 누른다.

 

 

선택을 하고 OK를 누른다.

 

그러면 ZYNQ PS OUTPUT 으로 DDR, FIXED_IO 가 생긴다.

 

 

이후 디자인 검증을 한 번 해준다.

 

 

성공했다면 OK 를 누른다.

 

 

이후 소스에서 내가 만든 .bd 파일에서 Generate Output Products 를 선택한다.

 

 

바로 Generate 버튼을 눌러 준다.

Number of jobs 는 자신의 스레드 개수에 따라 바뀌니 상관을 크게 하지 않아도 된다.

 

 

끝나면 끝났다고 알려준다.

 

 

다음으로 Create HDL Wrapper 를 실행한다.

 

 

OK 선택.

그리고 소스를 하나 더 추가한다.

 

 

디자인 소스를 추가하는데, 파일은 이것이다.

 

breath_led.v
0.00MB

 

 

파일을 추가하고 Copy sources into project 옵션도 on 으로 설정한뒤 Finish 선택.

 

 

이렇게 소스에 breath_led 가 추가로 생겼다.

 

그리고 design_1_wrapper.v 를 살짝 수정해 준다.

 

 

...
FIXED_IO_ps_porb,
FIXED_IO_ps_srstb,

    clk,
    rstn,
    led
    );
    input wire clk;
    input wire rstn;
    output wire [3:0] led;
    
  inout [14:0]DDR_addr;
  ...

 

 

breath_led breath_led_inst(
    .clk(clk),
    .rstn(rstn),
    .led(led));

 

를 각각 추가하고 저장해준다.

 

이후 합성을 진행한다(Synthesis > Run Synthesis)

이후 I/O 핀 매핑을 위해 RTL ANALYSIS의 Open Elaborated Design > 우측 상단 I/O Planning 에 들어가 I/O Ports 변경

I/O port 는 led [0]~[3], clk, rstn 만 수정한다.

 

 

그림과 같다.

다 기입했다면 저장하고 File name을 fpga_flash_download 로 설정해 준다.

 

 

OK 를 누른다.

이후 Bitstream 까지 다시 만들어 준다.

(Synthesis > Implementation > Bitstream)

 

이번에는 Bitstream 을 바로 보드에 올릴 것이 아니기 때문에 Bitstream 생성이 끝난 뒤에 cancel 을 눌러 창을 닫는다.

 

 

 

HW Export 를 선택한다.

 

 

bitstream 포함을 하고 OK 를 누른다.

 

이후 SDK 를 켠다.

 

 

Launch SDK 창이 뜨면 OK를 눌러 SDK를 킨다.

 

그러면 Eclipse 기반의 SDK 창이 켜진다.

 

 

SDK는 이렇게 생겼고, HW description file인 system.hdf 가 생성되어 있는 것을 확인 가능하다.

 

이제 SDK 상에서 새로운 프로젝트를 만들어 본다.

File > New > Application Project

 

 

프로젝트 이름은 fsbl 로 한다.

 

 

Next 를 누르고 Zynq FSBL 을 선택한다.

 

 

Finish 를 누른다.

 

왼쪽 프로젝트에 fsbl, fsbl_bsp 가 생성된 것을 볼 수 있다.

 

 

다음으로, Xilinx > Create Boot Image 를 선택한다.

 

 

 

이런 이상한 창이 나오는데, Output BIF file path 를 찾아보자.

 

 

.\fpga_03_fpga_flash_download\fpga_03_fpga_flash_download.sdk\fsbl\Debug 

경로 지정을 해 준다.

 

 

경로 지정을 했다면 아래 Boot image partitions 의 우측 Add 를 선택한다.

 

들어가서 File path > Browse..

보통 이쪽 경로는 자동으로 잡힌다.

 

 

아까 있었던 경로에서 .elf 파일을 찾고 열기를 눌러준다.

 

 

File Path 가 이렇게 잡히고, Partition type 는 bootloader 로 설정해 준다. 그리고 OK를 눌러 나가자.

파일을 하나 더 추가할 것이다. 다시 Add 를 눌러 아까 만들었던 wrapper 의 bitstream을 추가 할 것이다.

 

 

이 파일은 .\fpga_03_fpga_flash_download\fpga_03_fpga_)flash_download.runs\impl_1 에 위치해 있다.

찾아서 열고, Partition type 을 datafile 로 지정해 주자.

 

 

다 되었다면 OK를 눌러준다.

 

 

이렇게 추가되었다면 완료다.

Create Image 를 눌러 바이너리 파일을 생성하자.

 

이후 보드에 파일을 올리기 위해 처음은 JTAG(00) 모드로 킨다.

JTAG 에 USB를 꼽고 JTAG 모드로 전원을 켠다.

 

 

 

그림과 같이 Program Flash 를 켜준다.

 

 

그럼 그림과 같은 창이 나오는데, Image file 은 아까 우리가 생성했던 Binary 파일을 넣어준다.

 

 

경로는 다음과 같다. .\fpga_03_fpga_flash_download\fpga_03_fpga_flash_download.sdk\fsbl\Debug 

BOOT.bin 파일을 열어주고

FSBL file 도 지정을 해 줘야 한다. 이 친구도 BOOT.bin 과 있는 위치가 동일하기 때문에 바로 열 수 있다.

.elf 파일을 넣어 주도록 하자.

 

 

다 끝나면 이렇게 되어 있다.

Program 을 눌러 실행 시킨다.

 

Progress Information 이라는 창이 나오는데, 첫 실행에 굉장히 느리다.

나의 경우 30분 정도 기다렸는데 진행 될 생각을 안 해서 껐다가 키니까 빨리 진행 되었다.

 

Programming Flash를 진행 할 때에는 JTAG 모드로 키는 것을 잊지 말자.

 

이후 완료되었다면 보드의 BOOT 를 QSPI(10) 으로 설정하고 POR(reset button) 을 한 번 눌러 보자.

LED breathing 이 구현 되었을 것이다.

또한 보드의 ROM에 Write 한 것이기 때문에 전원이 끊겼다가 다시 QSPI 모드로 키더라도 내장된 코드가 바로 구현된다.

반응형

+ Recent posts