inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

[HDL 20장] Internal Memory Interface 에 대해 이해해보자 (FPGA 의 BRAM 을 이해하기 - 실습편)

실제 fpga상에서 BRAM을 사용했을때

1472

psh2018314072

작성한 질문수 1

1

안녕하세요 맛비님. 항상 좋은 강의 감사드립니다.

오늘 배운 BRAM 사용법을 활용하여 어떤 코드를 작성하고, 그 코드를 실제 FPGA상에서 실행시켰을때, FPGA 보드가 제공하는 BRAM의 area중 현재 몇퍼센트를 사용중인지 vivado tool에서 확인해볼수 있는 방법이 따로 있을까요?

verilog-hdl fpga 임베디드

답변 2

1

psh2018314072

맛비님이 제공해주신 true_dpbram.v을 테스트해보고 싶어서 다음과 같은 테스트벤치를 만들어봤습니다.

`define ADDR_WIDTH 12

`define DATA_WIDTH 16

`define MEM_DEPTH 384

module tb_true_dpbram();

reg clk;

reg addr0;

reg ce0;

reg we0;

wire q0;

reg d0;

 

true_dpbram 

#( .DWIDTH   (`DATA_WIDTH), 

.AWIDTH   (`ADDR_WIDTH), 

.MEM_SIZE (`MEM_DEPTH)) 

u_TDPBRAM(

.clk (clk), 

 

.addr0 (addr0), 

.ce0 (ce0), 

.we0 (we0), 

.q0 (q0), 

.d0 (d0), 

 

// no use port B.

.addr1 (0), 

.ce1 (0), 

.we1 (0),

.q1 (), 

.d1 (0)

);

 

initial clk = 0; always #5 clk = ~clk;

initial begin

#0 addr0 = 12'b0; ce0 = 0; we0 = 0; d0 = 16'b0; 

#10 addr0 = 12'b0010_1100_1101; ce0 = 1; we0 = 1; d0 = 16'b0000_0000_0001;

#10 addr0 = 12'b0010_1100_1101; ce0 = 1; we0 = 1; d0 = 16'b0000_0000_0001;

#10 addr0 = 12'b0010_1100_1101; ce0 = 1; we0 = 0; d0 = 16'b0;

 

end

endmodule

그런데 q0값이 계속 unknown으로 나오는데 뭐가 잘못된걸 까요?ㅠ

 

0

설계독학맛비

어 답이 늦었습니다.

bram 의 초기값은 unknown 이구요.

initial begin

#0 addr0 = 12'b0; ce0 = 0; we0 = 0; d0 = 16'b0;   // addr 0 번에 read. 당연히 unknown 이 읽히죠.

#10 addr0 = 12'b0010_1100_1101; ce0 = 1; we0 = 1; d0 = 16'b0000_0000_0001; // write

#10 addr0 = 12'b0010_1100_1101; ce0 = 1; we0 = 1; d0 = 16'b0000_0000_0001; // write 

#10 addr0 = 12'b0010_1100_1101; ce0 = 1; we0 = 0; d0 = 16'b0; // read,  여기서는 unknown 이 아닌 16'b0000_0000_0001 이 읽혀야 할 것 같은데, waveform 올려주시겠어요?

end

 

 



0

psh2018314072

q0값이 계속 unknown이 나오네요..ㅠㅠ

0

설계독학맛비

보자마자 위화감이 드는데, 다음 그림 참고부탁드려요. (하나씩 해결해 보시죠)

0

psh2018314072

앗...죄송합니다..근데 바꿔도 똑같네요..ㅠㅠ

0

설계독학맛비

찾았습니다 :)

맞춰보실래요...?!!

 

정답은..?! 

Mem_depth 가 384 인데, address 를 717 에 접근하셨어요. (정상 동작이 아니죠?)

다음과 같이 한줄만 수정했어요.

 

즐공하세요 :)

 

0

psh2018314072

아...정말 멍청하게 실수했네요..ㅠㅠ 끝까지 답변해주셔서 정말 감사합니다 맛비님!

0

설계독학맛비

그럴수도 있죠 ㅎ

즐공하세요 :)

0

설계독학맛비

안녕하세요 :)

해당 내용은 FPGA 강의 내용안에 있긴한데요, 강매가 될 수 있으니.

다음 문서 참고해보세요. 직접 올리고 확인하는게 가장 좋겠죠?

https://www.xilinx.com/support/documentation/sw_manuals/xilinx2020_2/ug888-vivado-design-flows-overview-tutorial.pdf

즐공하세요 :)

0

psh2018314072

답변감사합니다!! Fpga강의도 기대하고있습니다!

추가적으로 하나만 더 여쭤봐도 될까요?

Verilog 문법을 공부하다가, $readmemh 라는 문법을 본적이있는데, 이것또한 메모리에 접근하는 문법이라고 알고있습니다. 그렇다면 이 문법과, 오늘 배운 bram을 컨트롤하는 모듈은 차이가있는건가요?

0

설계독학맛비

$readmemh 는 data 파일의 내용을 메모리로 읽을 때 사용하구요.

Testbench 에서도 사용 가능하고, 합성 가능한 RTL 에서도 사용가능합니다.

Testbench 에서는 자유롭게, data file 을 읽고 싶을 때 사용가능하구요. (Test 용이니까, 회로가 아니라는 뜻입니다.)

다만 합성 가능한 RTL 에서 사용 할때는 memory 의 초기값 (initial value) 을 정할때 사용합니다.

실제 회로에 초기값이 fix 되어 있습니다. (Testbench 하고는 그 의미가 다릅니다.)

 

Verilog 문법을 공부하다가, $readmemh 라는 문법을 본적이있는데, 이것또한 메모리에 접근하는 문법이라고 알고있습니다. 그렇다면 이 문법과, 오늘 배운 bram을 컨트롤하는 모듈은 차이가있는건가요?

다음과 같은 차이가 있다 라고 생각해요 :)

저랑 같이 배우신 BRAM Control 모듈은, Cycle 을 소모 (시간을 소모하는 실제 동작) 하여 BRAM 을 Read 하였습니다.

Testbench 에서의 $readmemh 는, cycle 을 소모하지 않고 read 합니다.

합성 가능한 RTL 에서의 $readmemh 는 회로상의 초기값으로 fix 할때 사용합니다.

 

즐공하세요 :)

0

psh2018314072

좋은 답변 감사합니다!!!!

latency 개념 구현

1

126

3

비바도 all os버전

1

90

2

초기화를 reset_n 이 '1'일 때가 아닌 '0' 일 때 실행시키는 이유 질문

1

98

2

다운로드용량

1

82

2

비바도리눅스설치

1

97

2

전체path복사넣기

1

73

2

Vivado 2025.2 리눅스 설치 후 실행 에러와 솔루션 (libxv_commontasks.so)

1

176

2

explorer.exe오류

1

119

3

mobaxterm설치오류

1

101

2

./build시, waveform 'divide color' 사용

1

61

2

Latch와 관련하여 (Time borrowing, Latch-based design)

1

145

2

clean 명령어가 안되는데, 따로 저장해줘야 하는지 궁금합니다.

0

73

1

안녕하세요 설치 관련 질문 드립니다.

1

72

3

16장 mealy 설계.

1

80

2

14장 Cycle 관련, Testbench 코드.

1

75

2

21강(16장) 초기값 설정이 적용되는 시점 질문

1

68

1

20강(15장) - 밀리 머신 관련하여 질문 드립니다.

1

76

2

build에러 질문

0

63

2

1장 ./build에서 에러가 나요

1

82

2

FPGA 강의 보드 문의 드립니다.

1

115

2

5장 DFF특성에 대한 질문

1

87

3

vivado linux 사용 이유.

1

150

2

메모리의 형태가 전체설계에 미치는 영향이 궁금합니다.

1

113

2

디스코드 멤버쉽 등업 관련 문제

1

96

2