[2024.06.24~] 인천인력개발원
1-1. H/W vs. S/W
1-2. CPU(Central Processing Unit, 중앙처리장치)
1-3. SoC(System on Chip)
AMBA(Advanced Microcontroller Bus Architecture)
- ARM이 개발한 SoC 내부 IP(Intellectual Property)간 통신을 위한 표준 버스 프로토콜
- AMBA 프로토콜 종류
- APB(Advanced Peripheral Bus): 저전력&낮은 인터페이스 복잡도를 갖는 저대역폭 주변장치 연결을 위한 버스 프로토콜
- AHB(Adv. High performance Bus): CPU, DMA 컨트롤러, 메모리 등 고성능 IP간 통신을 위한 버스 프로토콜
- AXI(Adv. eXtensible Interface): 고대역폭 파이프라인 작업, 버스트 전송 등 지원
- ACE(AXI Coherency Extensions): AXI버스에 캐시 일관성 기능을 추가한 확장 프로토콜
- CHI(Coherent Hub Interface): ARM의 최신 온칩 인터커넥트 프로토콜. AXI와 ACE의 발전된 버전. 고성능 SoC 설계에 적합 - Master - Slave
- Master: 버스 제어권을 가지는 부분. 데이터 전송 관리
- Slave: 마스터의 요청에 응답하여 데이터 송수신
실습 2
1. 사이트에서 Block Memory Generator 다운로드
https://www.xilinx.com/products/intellectual-property/block_memory_generator.html#documentation
2. my_axi project 생성 후 board에서 Cora Z7-07s선택
3. IP Catalog를 열어 RAMs & ROMs & BRAM의 Block Memory Generator 더블클릭
4. Basic 탭과 Port A Options 탭에서 값 설정
5. 위에서 다운로드한 파일의 74p 다음 내용을 복사하여 메모장에 붙여넣기 후 값 변경 및 저장
6. Vivado의 Other Options 탭에서 파일 선택
7. Generate 클릭
8. Design Source 확인
실습 3: AXI_READ
AXI 관련 내용은 아래 게시글 참고
2024.06.26 - [하만(Harman) 세미콘 반도체 설계 과정/SoC를 위한 Peripheral 설계] - AXI 프로토콜 / HandShake
Master 신호 이름 정의
- Input
- CLK
- RST
- Address => ADDR [4:0]
- Start => START
- Address Ready => AXI_AREADY
- Read Data => AXI_DATA [7:0]
- Data Valid => AXI_VALID
- Output
- Read Address => AXI_ADDR [4:0]
- Address Valid => reg AXI_AVALID
- Data Ready => reg AXI_READY
Slave 신호 이름 정의
- Input
- CLK
- RST
- Read Address => AXI_ADDR [4:0]
- Address Valid => AXI_AVALID
- Data Ready => AXI_READY
- Output
- Address Ready => reg AXI_AREADY
- Read Data => AXI_DATA
- Data Valid => reg AXI_VALID
실습 4: AXI_WRITE
Master 신호 이름 정의
- Input
- CLK
- RST
- Address => ADDR [4:0]
- Start => START
- Data => DATA [7:0]
- Address Ready => AWREADY
- Data Ready => WREADY
- Response Valid => BVALID
- Response => BRESP
- Output
- Write Address => AWADDR [4:0]
- Address Valid => reg AWVALID
- Write Data = > WDATA [7:0]
- Data Valid => reg WVALID
- Reponse Ready => reg BREADY
- Error => reg ERROR
Slave 신호 이름 정의
- Input
- CLK
- RST
- Write Address => AWADDR [4:0]
- Address Valid => AWVALID
- Write Data => WDATA [7:0]
- Data Valid => WVALID
- Response Ready => BREADY
- Output
- Address Ready => reg AWAREADY
- Data Ready => reg WREADY
- Response Valid => reg BVALID
- Response => reg BRESP
실습 5:
Block Design
1. zync_basic으로 프로젝트 생성
2. Create Block Design 클릭하여 zync_system으로 디자인 생성
3. Diagram에서 우클릭 - Add Ip 후 zynq 검색, 선택
4. Run Block Automation 클릭 - OK
5. 그림 더블클릭 - 좌측 PS-PL Configuration에서 값 변경 (체크 해제해보기)
MAXI GP0: Master AXI General Purpose Interface 0
6. MIO Configuration 탭에서 ENET 0, USB 0, SD0, GPIO MIO 체크 해제
7. Clock Configuration 탭에서 PL Fabric Clocks의 FCLK_CLK0의 값을 100으로 변경
8. Add IP - GPIO 검색 후 추가
9. gpio의 이름을 바꾸기 위해 클릭 후 좌측의 Block Properties 창에서 이름 변경
10. Run Connection Automation: AXI GPIO와 S_AXI 연결
11. 결과 확인
12. 상단의 Regenerate Layout을 눌러 Layout 변경 가능
13. AXI GPIO를 펼쳐보면 Slave 파트의 신호 확인
14. Add IP - GPIO 추가
15. 추가한 GPIO의 이름을 axi_gpio_out으로 변경
16. Run Connection Automation에서 설정 변경 후 OK
17. Regenerate Layout
18. Address Editor 탭에서 Address 확인
19. Add IP - System ILA 추가 후 System ILA의 Interface Slots을 2로, Sample Data Depth를 2048로 변경
20. SLOT_0_AXI를 M00_AXI에, SLOT_1_AXI를 M01_AXI에 연결
21. Run Connection Automation
22. Validate Design
Create HDL Wrapper
1. 우클릭 - Create HDL Wrapper
2. Generate Bitstream
3. Export Hardware
4. include bitstream 선택
Vitis 실행
1. Vitis 실행 - WorkSpace 지정
2. Create Platform Component 선택 후 플랫폼 생성
3. XSA 파일 선택
4. Next - Finish
5. Platform Build (=Compile)
6. File - New Component - From Examples - Empty Application 선택
7. Source 추가
8. DIP2LED.c 파일의 declaration을 완료하기 위해 zynq_basic [platform] - sources - ps7_coretexa9_0 - include에서 파일 찾기
9. FLOW에서 Component를 zynq_basic 선택 후 Build
10. 에러 확인 후 코드 수정
11. 8번의 경로에서 xparameters.h를 찾은 뒤 복사 - 붙여넣기 후 내용 수정(DIP2LED.c의 24번, 29번 줄)
12. 다시 Build 수행 - Build 성공
13. Run
14. TeraTerm 설정 후 통신 확인: 버튼을 누르면 LED가 켜지며 Teraterm에 출력
15. Vivado - Program and Debug로 확인
'하만(Harman) 세미콘 반도체 설계 과정 > SoC를 위한 Peripheral 설계' 카테고리의 다른 글
AXI 통신을 이용한 Segment 출력 (0) | 2024.07.16 |
---|---|
AMBA AXI (0) | 2024.07.15 |
AXI 프로토콜 / HandShake (0) | 2024.06.26 |