① BRAM 개념
FPGA 보드 내부에는 BRAM 이라는 모듈이 존재한다.
BRAM은 Block Random Access Memory의 약자이다.
FPGA에서 [1]FF, [2]LUTs, [3]DSPs, [4]BRAM은 특히 중요하게 여겨진다.
Embedded memory 또는 EBR=Embedded Block RAM 등으로도 불린다.
기본적으로 하나의 BRAM은 Dual Port이며, 36Kb 이다.
자 그래서 내가 갖고있는 Zybo Z7-20 보드에 얼마만큼의 BRAM Resource가 있는지 Detail을 보자.
이 문서는 Zynq-7000 DataSheet이다. PL 영역을 구성하는 요소들에 대한 설명과, BRAM이 등장한다.
36Kb True Dual-Port 이고, 18Kb 2개로 쪼개서 사용할 수도 있고, 72Kb wide로 사용할 수도 있단다.
https://www.mouser.com/datasheet/2/903/ds190-Zynq-7000-Overview-1595492.pdf
이는 Zynq-7000 패밀리에서 36Kb True Dual-Ports BRAM을 사용했음을 의미하며
630Kb/36Kb = 17.5개의 리소스가 있음을 알 수 있다.
(왜 18개가 아니라 17.5개지????) : https://www.inflearn.com/questions/600889
Zybo Z7-20의 PS영역과 PL영역은 다음과 같이 나뉘고,
지금 저 BRAM은 PL영역에 있음을 다시한번 상기하자.
우리는 다음과 같이 PS와 PL을 구성해 설계를 할것이다.
② AXI4-LITE 개념
AXI4는 R/W에 최적화되어있는 (다중채널)버스이다.
AXI4-Lite는 Burst 기능이 없는 라이트버전이다.
머리에 박아두어야 할 [1] Channels [2] Write [3] Read 는 다음과 같다.
[1] Channels
- Write Address
- Write Data
- Write Reponse
- Read Address
- Read Data
[2] Write
- Write Address = Addr Cmd
- Write Data = Data Beat
- Write Reponse = Write Response
1. The master drives the Write Address (0xF8000000) and Write Data (0xA5A5F0F0) on the write channels, and drives AWVALID and WDVALID strobes to tell the slave the address and data are valid (Note: the master also drives 0b1111 on the WDSTRB signal to indicate all four bytes are valid);
2. The slave asserts AWREADY and WDREADY signals to indicate it can sample the data;
3. When the AWVALID/WREADY and WDVALID/WDREADY strobes are asserted at the same time, the handshake is complete, and all strobes are deasserted;
4. The slave drives “00” on BRESP and asserts the BVALID strobe to indicate the transfer was successful, and the next rising edge completes the transaction.
[3] Read
- Read Address = Addr Cmd
- Read Data = Last Data
1. The master drives the Read Address (0xF0000000) channel and asserts ARVALID to tell the slave the address is valid;
2. The slave asserts ARREADY to indicate it can sample the address. When ARVALID and ARREADY are both asserted, the slave has the address, the handshake is complete, and the master and slave deassert ARVALID and ARREADY, respectively;
3. The slave drives the Read Data (0xFFFF0000) channel and asserts RVALID to tell the master the data is ready, and the master drives RREADY to indicate it is ready to sample the data;
4. When RREADY and RVALID are both asserted, the transaction is complete and the strobes are deasserted;
5. The slave drives “00” on the RRESP signals in the Read Data channel to indicate data was received successfully (or other codes as indicated).
③ AXI 추가개념
다음 개념들에 대해 추가적으로 더 짚고 넘어가자.
[1] Strobe
[2] Burst
[3] AHB
[4] Outstanding
[1] Strobe
Strobe 신호는 Parallel 통신에서 Data의 유효성을 상대편 디바이스에 알려주는 역할을 한다.
ex. 내가 Write를 하기 위해 유효한 Data&Addr를 보낼거야. 내가 Read를 위해 유효한 Addr를 보낼거야.
[2] Burst
다량의 데이터를 W/R 하기 위하여, Addr를 Sequential하게 증가/감소 시키는 행위.
초기 Addr 한번 주고나서 쭉~ W/R한다.
[3] AHB = Advanced High performance Bus
AMBA 프로토콜에는 AHB, APB, AXI 등이 있다. (장치별 전송속도 및 특성을 고려해 선택한다.)
AXI는 SoC의 발전에 따라, AHB를 대체하기 위하여 개선되어 나온 프로토콜이다. (2003)
AHB는 과거 ASB에 비하여, Addr,Control,Data라인이 모두 분리되어있는 것을 모두 공유하게끔 했다.
하지만 그럼에도 불구하고, Latency가 발생하거나 하는 특정한 상태에서, 비효율적인 버스점유 상황이 발생한다.
그렇기 때문에, AXI는 그러한 버스점유 상황을 막기 위하여 Channel이라는 개념을 도입하여 문제를 해결했다.
[4] Outstanding
위에서 AHB에 대한 간단한 개념을 이해하되, AHB와 AXI의 비교에 초점을 맞추어서 이해를 했다.
이때 AXI가 갖는 또다른 장점으로 MOR(Multiple Outstanding Request)이 지원된다라는 점이 있는데,
Outstanding은 상태이며, 내가 보낸 요청에 대한 확인 응답을 받지 못한 상태를 의미한다.
즉 Single Outstanding Request만 지원되는 상황이라면, 계속 그 Request에 대해 붙잡고 있어야 하는데,
한번에 여러개의 Request를 미리 보내두고, Slave는 상황에 맞게 스스로 선택적으로 처리하고,
처리가 완료된 확인 응답을 받음에 따라, Outstanding 상태를 하나씩 해제하면 된다.
AXI는 이게 되고, AHB는 이게 안된다. (그 이외의 장점들이 많이 있지만 당장 AHB를 다룰 필요 없어 패스)
④
⑤
⑥
⑦
⑧
⑨
⑩
---
참고자료
BRAM
https://www.fpgakey.com/tutorial/section44
https://www.reddit.com/r/FPGA/comments/eri97t/beginner_explanation_of_fpga_memory_uses/
https://digilent.com/reference/programmable-logic/zybo-z7/reference-manual
https://www.researchgate.net/figure/Xilinx-FPGA-device-details_tbl1_265980194
AXI, AXI Lite
https://www.realdigital.org/doc/6cb4e88c145c960ad199be9fac5e9402
https://m.blog.naver.com/guile21c/50940353
AHB
http://egloos.zum.com/donghyun53/v/4077209
http://egloos.zum.com/donghyun53/v/4087409
https://gc-na.github.io/ARM_AMBA_protocol/
http://babyworm.net/archives/1274
'적극적 생각 > FPGA' 카테고리의 다른 글
CPU 설계에 도움이 되는 URL 모음 (0) | 2022.07.21 |
---|---|
Zynq-7000 SoC Data Sheet: Overview (0) | 2022.07.21 |
AXI BRAM Controller (0) | 2022.07.21 |
(중요) 0721 - 섹션4 - AXI4Lite 이용해 BRAM에 RW (0) | 2022.07.21 |
모식도 작성툴, gliffy, drawio (0) | 2022.07.17 |