inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

[FPGA 15장] FSM 을 이용한 BRAM Data Mover 모듈 설계 - 코드리뷰편

Timig관련 질문있습니다.

601

no19999

작성한 질문수 2

2

*댓글 먼저봐주시면 감사하겠습니다! 댓글 내용이 이해된다면 게시글 질문도 이해가 될 것 같습니다!

 

<Data mover BRAM 220번째 라인>

assign we_b1 	= r_core_delay[CORE_DELAY-1];

여기서 we_b1이 켜지고 (r_core_delay == 1f)

한 사이클 후에

<DPBRAM 55번째 라인>

always @(posedge clk)  
begin 
    if (ce0) begin
        if (we0) 
            ram[addr0] <= d0;
		else
        	q0 <= ram[addr0];
    end
end

BRAM1에 0이 write돼야되는거아닌가요?

어떻게 we_b1이 켜짐과 동시에 write되는지 이해가 잘 가지 않습니다ㅠㅠㅠ 기본기가 부족해서 그런걸까요..

 

 

 

 

fpga 임베디드

답변 4

1

no19999

이제야 16강을 보는중인데 해결될것같습니다! 감사합니다ㅎㅎㅎ

1

no19999

추가로 d0_b1에 (r_core_data[0]에 addr 0번지는 뛰어넘고 1번지 data부터 저장되기 때문에) 1번지 data(1)부터 write하는걸로 이해했는데 맞나요?

추가로 제가 이해한 flow는 다음과 같습니다.

(화살표는 다음사이클로 넘어감을 의미)

r_valid = 1

-> r_core_delay = 00001 ( r_core_data block 조건 충족 (시작) )

-> r_core_data[0] = mem_data[1번지]

(0번지에는 reset data write)

1

설계독학맛비

안녕하세요 :)

추가로 d0_b1에 (r_core_data[0]에 addr 0번지는 뛰어넘고 1번지 data부터 저장되기 때문에) 1번지 data(1)부터 write하는걸로 이해했는데 맞나요?

아닙니다. 0 번지부터 1씩 증가하면서 write 합니다. 즉, 1 번지 부터 write 하는 것이 아닙니다.

image

위 코드를 보시면,

addr_cnt_write 의 초기 값은 0입니다.

그리고, 157 번째 line 의 o_write && we_b1 일때 counting 이 증가하죠.

0 -> 1 -> 2 -> ...

write 0 시점에, we_b1 까지 같이 확인해보시면 될 것 같아요.

다음 waveform 의 노란색 signal 부분 및 timing 참고 부탁드려요.

image

0

no19999

아 16강에 F/F이된다는 말씀을 이제야 이해했습니다ㅠㅠㅠㅠ감사합니다 해결했습니다!

0

no19999

우선 코드 이해도가 높지못해 질문을 모호하게 드린거같아 죄송합니다. 제가 write, read 동작 구분을 제대로 못해 질문에 혼선이 생겼던거같습니다. 다음과 같은 이유로 16장에서 코드를 수정하신게 맞으신지 궁금합니다!

// first one
always @(posedge clk or negedge reset_n) begin
    if(!reset_n) begin
        r_core_data[0] <= {DWIDTH{1'b0}};  
    end else if(|r_core_delay) begin
		r_core_data[0]	<= mem_data; //(2번 조건)
	end
end

r_core_delay 신호가 들어가면 2번조건이 실행돼 BRAM0번에 값을 read해 r_core_data에 저장 후 5사이클 delay된 후 그 값이 BRAM1에 write됩니다.

근데 읽어오는 과정(위에 코드)에서 저렇게 |r_core_delay 조건이 붙게되면 시작시 BRAM0 0번지가 아닌 1번지에 값을 읽어오며 시작됩니다.(write 0 시점에는 BRAM 0번지에 reset값이 들어감(ex. reset값이 5엿다면 5, 1, 2, 3 ... 순으로 write된다.)

 

 

UART0, 1 중 선택

1

58

2

datamoverbram모듈질문

1

66

2

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

1

101

2

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

1

87

2

FPGA 공식문서 읽는법

1

99

2

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

1

72

2

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

1

83

2

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

1

108

1

Vitis 코드 작성

1

130

2

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

1

295

3

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

1

83

2

Platform Invalid 오류

1

153

3

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

1

98

2

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

1

157

2

9장 LED 점등 안됨

1

113

3

Edit in IP Packager 이후에

1

88

1

Fpga 로직

1

92

2

pmu-fw is not running

1

128

2

Create Project에 대해서 궁금해요

1

91

2

장치관리자 USB 포트

1

102

2

FPGA 7장 AXI_LITE I/F질문

1

91

1

bram mover에서 합성할때

1

80

2

타이밍 위반 질문

1

81

2

rvalid 초기화

1

68

2