inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Thiết kế bộ tăng tốc HW sử dụng FPGA thực tế của Seolgye Dokhak Matbi (Từ điều khiển LED đến thiết kế bộ tăng tốc Fully Connected Layer)

[FPGA chương 15] Thiết kế module BRAM Data Mover bằng FSM - Đánh giá mã nguồn

Timig관련 질문있습니다.

654

no19999

2 câu hỏi đã được viết

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 임베디드

Câu trả lời 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

semisgdh

안녕하세요 :)

추가로 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된다.)

 

 

수강 순서 질문 있습니다

1

69

2

UART의 역할이 PC와 PS를 연결해 주는 역할로 알고 있습니다.

1

79

2

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

1

87

2

UART0, 1 중 선택

1

120

2

datamoverbram모듈질문

1

97

2

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

1

143

2

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

1

145

2

FPGA 공식문서 읽는법

1

144

2

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

1

112

2

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

1

141

2

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

1

138

1

Vitis 코드 작성

1

165

2

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

1

358

3

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

1

123

2

Platform Invalid 오류

1

223

3

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

1

137

2

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

1

228

2

9장 LED 점등 안됨

1

158

3

Edit in IP Packager 이후에

1

119

1

Fpga 로직

1

136

2

pmu-fw is not running

1

195

2

Create Project에 대해서 궁금해요

1

120

2

장치관리자 USB 포트

1

149

2

FPGA 7장 AXI_LITE I/F질문

1

114

1