inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

[FPGA 13장] AXI4-Lite I/F 를 사용하여 Register 가 아닌 메모리에 Write / Read 해보기 - 실습편

reg 16개 변경 이후, 코드 리뷰 중 질문드립니다.

해결된 질문

312

유승재

작성한 질문수 18

1

안녕하세요,

reg 개수가 16개로 변경된 S00_AXI.v 코드를 리뷰해보다가 궁금한 점이 있어 질문드립니다.

첨부한 사진을 보시면 input으로 들어온 주소 값의 일부만을 가지고 case를 나누어서 코드가 진행되고 있습니다.

 

여기서는 우리가 16개의 reg를 사용하였기 때문에 axi_awaddr[2+3:2]이 되는 것은 이해하였습니다. 

 

1) 우리가 굳이 axi_awaddr의 [5:2]로 확인하는 이유는,

(a)주소가 byte 단위를 가지기고 하나의 데이터는 4byte이기 때문에 "4"씩 주소를 참조하게 되고 그래서 하위 2bit(4보다 작은 단위)는 필요없어서 [5:'2']부터 확인하는 것이고,

(b)["5":2]로 범위를 한정하는 이유는 우리가 reg 16개만 사용하기 때문에 절대로 [5:2]라는 범위를 넘어가는 값이 사용되지 않기 때문이라고 이해 했는데 맞을까요?

 

2) 만약 위에 1번 질문이 맞다면, 전체 32bit으로 case문을 돌리는 것이 bit chunk를 통해 [5:2]범위의 bit으로 case 문을 돌리는 것보다 느려서 그런건가요? 아니면 단순히 코딩의 편함을 위함인가요?  어떤 이득이 있는지 궁금합니다.

 

감사합니다.

fpga 임베디드

답변 1

1

설계독학맛비

안녕하세요 :)

먼저 서론에 적어주신 내용은 맞구요. 바로 답변드리겠습니다.

1) 우리가 굳이 axi_awaddr의 [5:2]로 확인하는 이유는,

(a)주소가 byte 단위를 가지기고 하나의 데이터는 4byte이기 때문에 "4"씩 주소를 참조하게 되고 그래서 하위 2bit(4보다 작은 단위)는 필요없어서 [5:'2']부터 확인하는 것이고,

맞습니다 :)

(b)["5":2]로 범위를 한정하는 이유는 우리가 reg 16개만 사용하기 때문에 절대로 [5:2]라는 범위를 넘어가는 값이 사용되지 않기 때문이라고 이해 했는데 맞을까요?

맞습니다 :)

2) 만약 위에 1번 질문이 맞다면, 전체 32bit으로 case문을 돌리는 것이 bit chunk를 통해 [5:2]범위의 bit으로 case 문을 돌리는 것보다 느려서 그런건가요? 아니면 단순히 코딩의 편함을 위함인가요?  어떤 이득이 있는지 궁금합니다.

코딩의 편함이라... 도긴개긴? 이긴 하죠 ㅎ 그 이유보다는,

case 문이라는 것 자체가 Comparator 가 내포되어 있어요. 즉 32 bit 를 비교할꺼냐, 4 bit 를 비교할꺼냐의 차이로 질문을 재해석 해볼 수 있구요. 로직의 Size 를 따지자면, 4 bit 가 작고, 그만큼 delay 가 작겠죠.

하지만!!!!!! 굳이 저렇게까지 타이트 하게 안해주셔도, case 문안에 32 bit이지만, 16 개만 적혀있다면 로직 차이가 클까? 라는 것은 의문입니다. (합성기가 알아서 잘 해줄 것 같긴한데.. 음..?)
이 부분은 해봐야 알 것 같은데, 그래도 안전빵? 으로 작은쪽을 선택하는 것이 옳다고 봐요 ㅎ

저는 현업에서 왠만하면, 필요 bit 만 사용하고 있어요. (실수?로 full bit 을 쓸 순 있겠지만) 

 

즐공하세요 :)

 

0

유승재

추가적인 질문이 있습니다. ㅠㅠ

수업 중에 C_S00_AXI_ADDR_WIDTH를 4에서 6으로 변경해준 이유는 16로 늘어난 reg 갯수를 커버하기 위함이라고 하셨는데....

원래 4일 때는 4bit으로 0부터 15까지 표현이 가능함으로 이미 16개의 reg를 표현 할수 있는거 아닌가요? 
address width를 6으로 늘린 이유가 궁금합니다.

 

감사합니다.

0

설계독학맛비

6b 중 하위 2b 은?

addr 는 byte 단위입니다. 우리는 4byte 의 data를 사용중이죠?!

HW가속기 설계에서 더 보완할 수 있는 방법이 있을까요?

1

51

2

UART0, 1 중 선택

1

84

2

datamoverbram모듈질문

1

84

2

vitis 설치엣 alveo kria versal 등 옵션을 끄고 설치를 했습니다.

1

113

2

vitis 설치 관련 질문 있습니다!

1

109

2

FPGA 공식문서 읽는법

1

111

2

보드 추가의 클릭창이 없습니다.

1

82

2

Edit in IP Packager에서 코드 수정 후 IP 수정하면 simulation에서 수정된 코드로 작동이 안됩니다

1

95

2

BRAM의 Read / Write를 다 수행했는지 확인할 때 사용되는 num_cnt / i_num_cnt 관련 질문

1

115

1

Vitis 코드 작성

1

138

2

vivado 및 vitis 리눅스 환경 설치 관련 질문드립니다.

1

313

3

[9장 led 점등 시간 제어 불가]

1

90

2

Platform Invalid 오류

1

161

3

WSL 설치 관련 문의드립니다!!

1

113

2

Vivado 툴, 파일 질문드립니다!

1

175

2

9장 LED 점등 안됨

1

126

3

Edit in IP Packager 이후에

1

98

1

Fpga 로직

1

104

2

pmu-fw is not running

1

143

2

Create Project에 대해서 궁금해요

1

99

2

장치관리자 USB 포트

1

115

2

FPGA 7장 AXI_LITE I/F질문

1

93

1

bram mover에서 합성할때

1

85

2

타이밍 위반 질문

1

85

2