인프런 커뮤니티 질문&답변
reg 16개 변경 이후, 코드 리뷰 중 질문드립니다.
해결된 질문
작성
·
306
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 문을 돌리는 것보다 느려서 그런건가요? 아니면 단순히 코딩의 편함을 위함인가요? 어떤 이득이 있는지 궁금합니다.
감사합니다.
답변 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 을 쓸 순 있겠지만)
즐공하세요 :)






추가적인 질문이 있습니다. ㅠㅠ
수업 중에 C_S00_AXI_ADDR_WIDTH를 4에서 6으로 변경해준 이유는 16로 늘어난 reg 갯수를 커버하기 위함이라고 하셨는데....
원래 4일 때는 4bit으로 0부터 15까지 표현이 가능함으로 이미 16개의 reg를 표현 할수 있는거 아닌가요?
address width를 6으로 늘린 이유가 궁금합니다.
감사합니다.