개발 편의성을 위한 소소한 Tips/04 질의 응답 정리

[FPGA Q/A. 015] bram관련 질문입니다 (* ram_style = "block" *) reg

반응형

 

Q.

안녕하세요. 저는 fpga 강의를 수강중이고 lab12에서 bram과 axi4_lite를 이용한 memory 수강중에 궁금한 점이 있습니다.
해당 강의에서 trure_sync_dpbram.v를 import해서 사용하는데
fpga는 어떻게 true_sync_dpbram가 register가 아니라 bram을 사용하는 지 알 수 있나요?
혹시 reg 선언부에 있는 (* ram_style = "block" *) reg 이것이 bram을 사용한다는 keyword 인가요?
만약, 맞다면 저희가 ram_style='block' reg를 사용하면서 내부 memory interface logic (ce0,we0등등...)을
 다르게 사용하면 Error가 발생하는건가요?

A.

안녕하세요 :)

궁금해하실만한 질문이라 생각합니다. 바로 답변 드리겠습니다.

fpga는 어떻게 true_sync_dpbram가 register가 아니라 bram을 사용하는 지 알 수 있나요?
혹시 reg 선언부에 있는 (* ram_style = "block" *) reg 이것이 bram을 사용한다는 keyword 인가요?

-> 질문에서 예상하신 대로, (* ram_style = "block" *) 이라는 Vivado 에서 인식할 수 있는 attribute 를 통해서 BRAM 으로 할당합니다.

해당 Attribute 를 통해서, 원하는 RAM style 을 만들 수 있습니다. 제가 제공해 드린 코드는 Xilinx 의 HLS 에서 사동 생성해주는 dual port ram 입니다 :)
 
  • Specifying within the hdl code.
    verilog
    (* ram_style = "{auto | block | distributed | pipe_distributed | block_power1 | block_power2}" *)
    The default is auto.
    vhdl
    attribute ram_style of {signal_name | entity_name }: {signal | entity} is "{auto | block | distributed | pipe_distributed | block_power1 | block_power2}";

참고 : https://support.xilinx.com/s/article/38070?language=en_US

더 자세한 내용은 다음 문서에서 "ram_style" 로 검색하시면 도움이 될 것 같아요.

https://www.xilinx.com/support/documentation/sw_manuals/xilinx2021_1/ug901-vivado-synthesis.pdf

 
만약, 맞다면 저희가 ram_style='block' reg를 사용하면서 내부 memory interface logic (ce0,we0등등...)을
다르게 사용하면 Error가 발생하는건가요?
 
자동 생성되는 코드이구요. Port 내용을 어떻게 변경하실지는 모르겠지만, 변경 방법에 따라서 "원치않는 리소스 사용" 혹은 Error 가 예상됩니다.
이 부분은 환경을 드렸기 때문에, 질문자 님께서 충분히? 시도해볼 수 있으리라 생각해요.
개인적으로... 수정은 권장드리지 않습니다만, 해보는건 자유시니까, 해보세요.
 
즐공하세요 :)
 
반응형