※ 본 게시글의 그림 저작권은 ARM사에 있습니다.
앞으로 AMBA Bus Protocol을 하나하나 설명할 예정인데요,
오늘은 그 중 가장 간단한 APB로 시작하겠습니다.
APB (Advanced Peripheral Bus)
APB의 장점
- Low power
- Low cost
- Low complexity
APB의 단점
- Low bandwidth
- Non pipelined
APB Signals

우선 모든 signal들은 APB의 P를 앞에 붙여줍니다.
PADDR은 APB의 Address Bus를 전송합니다.
PSELx는 어떤 slave device를 선택할 지 결정합니다.
PWRITE는 읽을 지 쓸 지 결정합니다. (1이면 Write, 0이면 Read)
PWDATA는 write data로 쓸 data를 보냅니다.
PREADY는 전송을 연장합니다.
이게 무슨말인지 헷갈릴 수 있는데 간단히 설명해보겠습니다.
M에서 S에 데이터를 쓰거나 읽을 경우 아무때나 이를 수행할 수 있는 것은 아닙니다.
다른 작업을 수행중이거나 아직 준비가 안됐을 때 기다려달라고 요청하는 신호입니다.
만약 PREADY=0이면 준비가 안됐다는 뜻으로 PREADY=1이 될 때까지 잠시 기다립니다.
PRDATA는 read data로 S에서 M으로 읽은 데이터를 전송합니다.
PSLVERR는 error를 알려주는 신호입니다.
예상하는 건데 slave error가 아닐까 싶네요.

비트 수를 보면 최대 32bit까지 사용 가능한 것을 알 수 있습니다.
또한 data bus가 read data와 write data로 분리되어 있습니다.
APB State Diagram
다음은 APB의 동작 순서에 대해 말씀드리겠습니다.

1. IDLE
PSELx = 0 PENABLE = 0
아무것도 하지 않는 상태입니다.
전송이 없으면 IDLE 상태를 유지합니다.
2. SETUP
PSELx = 1 PENABLE = 0
준비 상태입니다.
여기서는 Addr과 Data 정보를 전송합니다.

SETUP state에는 한 클락만 머뭅니다.
3. ACCESS
PSELx = 1 PENABLE = 1
접근 상태입니다.
여기서 data를 쓰거나 읽습니다.

만약 추가적인 전송이 있을 경우 다시 SETUP state로 돌아갑니다.
추가적인 전송이 없다면 IDLE state로 돌아갑니다.
PREADY=0이면 PREADY=1이 될 때까지 지연됩니다.
Write Transfer
- With no wait state

연장이 없을 경우입니다.
T0: PSEL=0 PENABLE=0으로 IDLE state입니다.
아무일도 일어나지 않습니다.
T1: PSEL=1 PENABLE=0으로 SETUP state입니다.
위의 Timing diagram은 PWRITE=1이라 쓰는 작업을 수행합니다.
PADDR(어디에 쓸지), PWDATA(무엇을 쓸지) 정보를 전송합니다.
T2: PSEL=1 PENABLE=1로 ACCESS state입니다.
받아온 데이터를 Slave에 작성합니다.
PREADY=1이므로 지연 없이 수행할 수 있습니다.
T3: PSEL=0 PENABLE=0으로 IDEL state입니다.
T2에서 더 전송할 정보가 없었기 때문에 IDLE state로 돌아갔습니다.
- With wait states

이번엔 wait가 포함된 상황입니다.
앞에는 다 같은데 ACCESS state인 T2에서 PREADY=0입니다.
따라서 PREADY=1이 될 때까지 연장됩니다.
T4에서 PREADY=1이 되자 data를 write하고 T5에서 IDLE state로 돌아갑니다.
Read Transfer
- With no wait state

Write와 유사합니다.
Read Transfer에서는 PWRITE=0으로 Read를 수행합니다.
T2: PSEL=1 PENABLE=1로 ACCESS state입니다.
PREADY=1이므로 PRDATA에 읽은 data를 올려줍니다.
- With wait states

T2와 T3는 ACCESS state인데 PREADY=0이라 연장됩니다.
T4에서 PREADY=1과 동시에 PRDATA에 읽은 데이터는 올려줍니다.
T5가 되면 IDLE state로 돌아갑니다.
Error Response

Error가 발생하면 PSLVERR=1로 올려주어서 error가 발생했음을 Master에게 알려줍니다.
PSLVERR=0이면 Okay입니다.

에러는 APB의 마지막 Cycle에서 알려줍니다.
'Digital Design > SoC' 카테고리의 다른 글
[SoC] FIFO (Design with Verilog) (0) | 2023.02.11 |
---|---|
[AMBA] APB Protocol 설계 (Design with Verilog) (1) | 2023.02.09 |
[AMBA] AXI (Advanced eXtensible Interface) (1) | 2023.02.08 |
[AMBA] AHB (Advanced High-Performance Bus) (1) | 2023.02.06 |
[AMBA] AMBA Bus Protocol (0) | 2023.02.06 |
댓글