강의

멘토링

커뮤니티

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

유승재님의 프로필 이미지
유승재

작성한 질문수

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

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

myip_v1_0_s00_AXI.v 코드 관련 질문

작성

·

347

3

안녕하세요, 

myip_v1_0_s00_AXI.v 

line 299부터의 질문 입니다.

제가 이해한 바로는, mem0_addr_write_hit가 발생했을 때, 우리는 mem0_addr를 0 으로 초기화하기로 했기 때문에 line304가 "mem0_addr_cnt <= 0;"으로 변경되어야하는 것이 아닌가요?

 

그래서 mem0_addr_reg을 따라가보니 이전 line291에서

이렇게 선언되어 있고 외부 모듈 (myip_v1_0.v)에서는 

또 외부에서 input으로 들어오고 있던데 제가 놓치고 있는 부분이 있는것일까요?

 

제 짧은 생각으로는 그냥 0을 할당해줘야 한다고 생각했었습니다.

 

감사합니다.

 

답변 1

0

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

안녕하세요 :)

제가 질문이 잘 이해가 안가네요 ㅠ

생각하시는 내용을 코드로 한번 작성해보시겠어요?

 

제가 이해한 바로는, mem0_addr_write_hit가 발생했을 때, 우리는 mem0_addr를 0 으로 초기화하기로 했기 때문에 line304가 "mem0_addr_cnt <= 0;"으로 변경되어야하는 것이 아닌가요?

보이는대로 해석하면, 303,304 라인을 보시면, mem0_addr_write_hit 가 발생 했을때 제가 0으로 초기화 화고 있을까요? mem0_addr_cnt 라는 F/F 에 값을 저장하고 있는것으로 보여지는데..

적어주신 문장이 (0 으로 초기화 한다..?)이해가 잘 안돼요.

 

 

다음 그림에서는,

wire 랑 input port 의 이름 자체가 다른데요?

다시한번 확인해보시겠어요? 

Port 와 Wire 를 잘 구분해서 다시 봐주세요.

 

 

제가 글이 이해가 잘 안되는 상황입니다. ㅠ

 

유승재님의 프로필 이미지
유승재
질문자

제 의도를 제대로 전달하기가 어렵네요 ㅠ

질문을 좀 단순하게 바꾸겠습니다.

 

1) mem0_addr_write_hit 가 1이 되는 상황은 handshake가 발생하고, 그에 더해서 주소값이 0x08로 주어졌을 때가 맞나요?

 

2) (1번 문항이 맞다는 가정하에..) 우리는 0x08이 들어오면 memory addr counter를 0으로 초기화 해주기로 했던 것으로 기억합니다. 그래서 line 304가 "mem0_addr_cnt <= 0;"으로 변경되어야하는 것이 아닌가요?

 

위 질문은 FPGA12장 강의 (Timeline 12:50 ~13:16)에서 강의자 분께서 말씀하시는 것을 참고 하였습니다.

위 시간대 강의를 다시 들어보시면 0을 할당해야한다는 말씀을 해주시는데 (line 304 설명하시면서..), 그러면  "mem0_addr_cnt <= 0;" 맞지 않나 라는게 제 가장 큰 질문의 요지 입니다.

 

감사합니다.

질문 관련해서 공지도 해주시고 그러셔서 최대한 자세히 질문드리려고 노력하는데 부족하다면 죄송합니다. ㅠㅠ

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

제가 이해력이 부족해서 그런거에요 ㅠㅠ

 

1) mem0_addr_write_hit 가 1이 되는 상황은 handshake가 발생하고, 그에 더해서 주소값이 0x08로 주어졌을 때가 맞나요?

네 맞습니다.

2) (1번 문항이 맞다는 가정하에..) 우리는 0x08이 들어오면 memory addr counter를 0으로 초기화 해주기로 했던 것으로 기억합니다. 그래서 line 304가 "mem0_addr_cnt <= 0;"으로 변경되어야하는 것이 아닌가요?

아..... 이제 이해했습니다. 혼동을 드려서 죄송합니다. 

제가 정확하게 이렇게 말을 하는데요.

"mem0_addr_reg 의 값을 0 을 주었다" "그러면 addr cnt 가 0 으로 초기화가 되어 있겠죠"

자, 이 부분을 말씀하신대로 

mem0_addr_cnt <= 0;

이렇게 변경하면, 말씀하신게 맞아요.

 

하지만 굳이 입력 값을 setting 할 수 있도록 넣은 이유는  (이 부분을 강의에서 설명을 안했네요. 실제 현업에서는 setting 하도록 사용합니다. 즉, 0 이 아닌 지금 상태인거죠.)

 

예를들어서, addr 10 번째 Data 만 Read 하고 싶다. 하신다면?  (Write 도 동일한 상태를 갖습니다.)

질문자 님께서 하시는 방법은 (mem0_addr_cnt <= 0;)

cnt 가 항상 0 이기 때문에, 10 번의 Read 과정이 필요합니다.

하지만 이 코드는

addr 에 10 을 Setting 하고 한번만 읽으면 되죠.

이런식으로 자유도가 더 높다. 라고 말씀드리고 싶어요.

 

만약에 질문자님께서, 나는 항상 0 번부터 Cnt 하면서 원하는 영역에 접근할꺼야. 하시면 "0" 으로 수정하셔도 됩니다. 

 

말씀하신대로 0 으로 해도,

해당 강의에서는 Memory 의 원하는 addr 를 Access 하는 내용이 없기때문에, (항상 0부터 순서대로 접근) 아무런 문제는 없어요.

 



이거는 해결되신가요? wire 와 input port 를 구분해서 다시 봐달라고 적었는데,

아... 다음글이.... 위의 연장선이군요..;; 같은 코드였나보네요. 순서가 달라서 헷갈렸습니다. (제가 이렇게 이해력이 부족합니다 ㅠ)



즐공하세요 :)

 

 

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

훌륭한 질문이다 생각해요!

다음 질문도 기다리겠습니다 :)

유승재님의 프로필 이미지
유승재
질문자

아하 좀더 general하게 구현을 하신거군요!

그렇다면 이제 이해가 갔습니다.

질문을 끝까지 따라와주셔서 감사합니다 :)

유승재님의 프로필 이미지
유승재

작성한 질문수

질문하기