인프런 커뮤니티 질문&답변

지루한 까치님의 프로필 이미지

작성한 질문수

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

[FPGA 7장] HW IP 를 제어하기 위한 AXI4-Lite Interface 이해하기 - 코드리뷰편

top module / 내부 모듈, register 하위 2비트 사용하지 않는다.

해결된 질문

21.08.21 22:34 작성

·

541

1

안녕하세요 맛비님!!
잘 따라오다가 급 궁금한 점이 생겨서 글 남겨봅니다!
top module / 내부 모듈을 제가 이해하고 있는게 맞는지 궁금합니다.
top module 은 testbench, 내부 모듈은 DUT 라고 생각해도 되는 건가요??
------------------------------------------------------------------
추가적으로 궁금한 점이 생겼습니다.
Address의 단위는 byte(4bit) 이다. 는 이해가 되었습니다.
그 이후 LSB 관련한 코드가 나왔었는데 하위 2비트는 사용하지 않는다고 하셨습니다.
각 address 마다 0000 의 4비트 중 하위 2비트를 사용하지 않는다는 얘기가 맞을까요??
그리고 각 Address 마다 값을 넣어줄 때 2h'0을 사용한 이유가 뭘까요..??

답변 2

1

지루한 까치님의 프로필 이미지

2021. 08. 21. 23:36

top은 testbench랑 다른거였군요.. 감사합니다!

바이트를 4bit라고 적다니.. 반성하자.. 8bit!!

내부로 접근할 때는 같은 4byte 이니 하위 2bit가 필요없다. 여기는 이해가 되었습니다.

최종적으로 AXI interface 의 address 는 byte 단위이므로 하위 2bit을 추가하였다.. 이 부분이 이해가 가지 않습니다...ㅠ 

2'h0 -> h가 의미하는게 hexa 맞나요?? 2'b00으로 표현해도 되는 건가요?

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

2021. 08. 21. 23:41

헛.. 제가 글을 쓰는 중이라 바로 답변드립니다. ㅎ

풀어서 적어볼께요.

내부에서는 하위 2bit 를 제외하고 사용중이었죠. 

하지만 외부로 나가는, AXI Interface 의 Address 는 Byte 단위입니다. (왜 Byte 냐면, AXI Protocol 이 그래요!) 

그래서 기존의 하위 2 bit 을 뺏던 부분을!!, 하위 2bit 을 다시 추가해서 byte 단위로 맞춰주었습니다.

2'h0 -> h가 의미하는게 hexa 맞나요?? 2'b00으로 표현해도 되는 건가요?

(이거는 Verilog HDL 의 문법인지라.. 꼭!! 책을 공부해주세요)

hexa 맞구요. 2'b00 표현하셔도 돼요 :)

그럼 즐공하세요 :)

지루한 까치님의 프로필 이미지

2021. 08. 21. 23:46

아 내부로 들어가는 것도 잘 못 이해했군요!

내부로 들어갈때 4를 표현하기 위해서 LSB로 표현한 코드를 이용해 하위 2비트를 따로 빼놓고 사용.

다시 나갈때는 뺏던 2bit을 추가해서 원래상태로 추가해서 나간다.

맞을까요?? (제발 맞기를!!)

문법은 혹시 저렇게도 변경가능한가 궁금해서 여쭤봤습니다^^

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

2021. 08. 21. 23:52

늦은시간 까지 공부를! 훌륭하십니다. 

"내부로 들어갈때 4를 표현하기 위해서 LSB로 표현한 코드를 이용해 하위 2비트를 따로 빼놓고 사용. 다시 나갈때는 뺏던 2bit을 추가해서 원래상태로 추가해서 나간다."

굿! 정확하게 맞습니다. (내부에서 2 bit 을 빼면 조금이라도 사용하는 로직을 줄일 수 있겠죠?)

하지만, 이정도 까지 안하는 경우가.. 많으실꺼에요. 동작하는 것을 만드는게 더 중요해서.. ㅎ

"문법은 혹시 저렇게도 변경가능한가 궁금해서 여쭤봤습니다^^"

네네 이렇게 하셔도 돼요.

2'b00, 2'o0, 2'd0, 2'h'0   

즐공하셔요 :)

1

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

2021. 08. 21. 23:06

안녕하세요. :)

testbench 는 testbench 이구요.

DUT의 Top 은 lab7_axi4_lite_v1_0 입니다.  

이 개념은 다음 저의글? 을 참고해보세요.

추가적으로 궁금한 점이 생겼습니다.
Address의 단위는 byte(4bit) 이다. 는 이해가 되었습니다.
그 이후 LSB 관련한 코드가 나왔었는데 하위 2비트는 사용하지 않는다고 하셨습니다.
각 address 마다 0000 의 4비트 중 하위 2비트를 사용하지 않는다는 얘기가 맞을까요??
그리고 각 Address 마다 값을 넣어줄 때 2h'0을 사용한 이유가 뭘까요..??

먼저 Address 단위는 Byte (8bit) 입니다.  (4bit 아니에요)

AXI4-Lite 의  Databit 는 32bit 즉, 4 byte 입니다.

이는 Address 에서 하위 2bit 이 없어도 접근 가능하다는 뜻이죠.

(하위 2bit 로 4 를 표현 할 수 있으니까요.)

최소 Address 단위가 4byte 이기 때문에 하위 2bit 가 없어도 접근 가능한 상태입니다.

하지만 최종적으로 AXI 의 Address 로 나갈때는 Byte 단위이기 때문에

2'h0 을 하위 bit 에 붙여서 접근해야죠.

결론

4byte 의 주소접근이 가능한 상태 (Data 가 4byte 32bit 이기 때문에) 에서 내부에서는 하위 2bit 이 없어도 접근 가능하다.

하지만 최종적으로 AXI Interface 의 Address 는 Byte 단위이므로 (4byte 아님) 하위 2bit 을 추가하였다.

즐공하세요 :)