inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

설계독학's Verilog 마스터 Season 1 (실전 코딩 테스트 문제로 완성하는 디지털 설계 엔지니어의 커리어 도약)

[L1-P16] clog2 (Ceiling Log2) : 파라미터화 설계를 위해 반드시 알아야 할 시스템 함수

메모리 리셋 관련 질문 드립니다.

2

김상현

작성한 질문수 67

0

에타님. 안녕하세요.

제가 많이 부족해서 매 강의마다 질문을 남기게 되네요...

메모리 리셋 관련된 질문입니다.


[1. 질문 챕터] : L1-P16 clog2

[2. 질문 내용] : 메모리 rst에 초기화를 꼭 해야하나요?

[3. 시도했던 내용, 그렇게 생각하는 이유] : 이 챕터에서 사용된 메모리는 BRAM으로 이해하고 있습니다.

두 가지 질문이 있는데요.

  1. BRAM은 따로 초기화해주지 않으면 쓰레기 값이 들어있나요? 그래서 따로 RTL에서 초기화 하고 싶은 값으로 초기화를 해줘야하나요?

  2. 만약 초기화를 따로 해줘야한다고 하면 보통 RTL 내에서 초기화를 하나요?


    Zynq와 같은 FPGA에서 PS로 초기화하는 방법을 사용해도 되나요?
    이론에 있는 BRAM 코드를 schematic으로 보면

    image.png


    위처럼 나오는 반면, 모범 답안 코드의 schematic은 아래처럼 나옵니다.

    image.png

    초기화로 인해 로직이 추가된 것으로 보이는데 너무 비효율적으로 느껴져서 질문 드립니다.

verilog-hdl system-verilog

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 김상현님.

BRAM 리셋 및 초기화에 대해서는 아래 기존 답변이 가장 유사합니다.

true_dpbram.v 질문

BRAM은 일반 레지스터처럼 rst 신호를 연결한다고 해서 내부의 모든 메모리 데이터가 자동으로 0으로 초기화되지는 않습니다. FPGA의 BRAM은 전원 인가나 설정 직후 내부 데이터가 unknown 또는 정의되지 않은 상태일 수 있으므로, 초기화하지 않은 주소를 바로 읽는 설계는 피해야 합니다.

일반적으로는 다음과 같이 처리합니다.

  • 초기화가 필요 없는 경우: 각 주소에 값을 먼저 Write한 뒤 Read
  • 초기화가 필요한 경우: RTL에 초기화용 FSM을 작성하여 모든 주소에 원하는 값을 순차적으로 Write
  • Zynq와 같이 PS가 메모리 인터페이스를 제어할 수 있는 경우: PS에서 초기화 데이터를 전달하여 초기화하는 방식도 가능
  • 단, 초기화 과정이 끝나기 전에 메모리를 사용하는 일이 없도록 init_done과 같은 완료 신호로 제어해야 합니다.

모범 답안의 schematic에서 로직이 크게 보이는 이유는 리셋 시 BRAM의 모든 주소를 순회하면서 값을 Write하는 초기화 로직이 추가되었기 때문입니다. BRAM 전체를 한 번에 리셋하는 것이 아니라, 클록마다 주소를 증가시키며 순차적으로 초기화하므로 주소 카운터, 상태 제어 FSM, Write enable 등의 로직이 함께 합성됩니다. 따라서 초기화가 반드시 필요한 설계가 아니라면 이러한 로직을 추가하지 않는 것이 일반적입니다.

또한 실제 FPGA BRAM은 합성 도구나 비트스트림 초기값 설정을 통해 초기 데이터를 지정하는 방법도 있지만, 이는 사용하는 FPGA와 설계 환경에 따라 달라집니다. 가장 이식성 있는 방법은 설계자가 초기화 Write 동작을 직접 구현하는 것입니다.

관련하여 BRAM의 구현 및 FPGA 합성에 대한 내용은 다음 답변도 참고하실 수 있습니다.

HLS에서 자동생성했던 DPBRAM이라는 게 어떤걸까요?

여기에서도 BRAM 코드가 시뮬레이션뿐 아니라 FPGA 합성 시 실제 BRAM으로 매핑될 수 있으며, ram_style = "block"과 같은 속성이 BRAM 추론에 사용될 수 있다고 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

RTL_ROM이 무엇인지 알고 싶습니다.

0

3

1

인터럽트 컨트롤러 요청 처리와 처리 완료 구문 중 이해가 안되는 내용이 있습니다.

1

29

2

enable_latch가 F/F이 아니라 래치인 이유가 궁금합니다.

1

33

2

output.txt가 이상하게 나옵니다.

1

81

2

season 2 코딩테스트 강의에 대한 문의드립니다.

1

73

1

4:1먹스 구현방식에 대한 질문입니다.

1

69

2

Windows 기능 켜기

1

89

2

[L1-P02] 멀티플렉서 실전 결과 확인하는데 시간이 너무 걸립니다.

0

77

2

환경설정 문

2

121

2

환불 문의

1

163

2

[LV1_P4_REGISTER ] Non-Blocking

1

106

2

조건문에서 if 연속 사용

1

130

2

vivado 설치

2

154

1

LV1-21 Edge Detector 구현 방법 질문

1

137

1

학교에서 사용하는 툴

1

141

2

[L1-P16 clog2 with memory] clog2 function 질문

1

170

4

fsm 설계 방식에 대한 질문

1

131

2

Level0_P12_verification_testbench

1

126

2

mobaxterm 완전 삭제법

1

411

2

155ns 타이밍 이슈에 관한 궁금증(?)

1

135

2

build 오류

1

175

2

VIVADO 환경

1

151

2

코딩테스트

1

123

2

vscode 환경세팅 방법

2

278

2