실제 fpga상에서 BRAM을 사용했을때
1472
작성한 질문수 1
안녕하세요 맛비님. 항상 좋은 강의 감사드립니다.
오늘 배운 BRAM 사용법을 활용하여 어떤 코드를 작성하고, 그 코드를 실제 FPGA상에서 실행시켰을때, FPGA 보드가 제공하는 BRAM의 area중 현재 몇퍼센트를 사용중인지 vivado tool에서 확인해볼수 있는 방법이 따로 있을까요?
답변 2
1
맛비님이 제공해주신 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
찾았습니다 :)
맞춰보실래요...?!!
정답은..?!
Mem_depth 가 384 인데, address 를 717 에 접근하셨어요. (정상 동작이 아니죠?)
다음과 같이 한줄만 수정했어요.
즐공하세요 :)
0
안녕하세요 :)
해당 내용은 FPGA 강의 내용안에 있긴한데요, 강매가 될 수 있으니.
다음 문서 참고해보세요. 직접 올리고 확인하는게 가장 좋겠죠?
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2020_2/ug888-vivado-design-flows-overview-tutorial.pdf
즐공하세요 :)
0
답변감사합니다!! 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 할때 사용합니다.
즐공하세요 :)
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






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