2021/04/22

How to use bram in vivado

FPGA   VERILOG   ZYNQ   

ZynqのCPUから、Block Ramを使用したことがあったが、Verilogから、Block Ramを利用したことがなかった気がしたので、実装してみた。

イメージは、CPUからBlock ramにライトした値を、Calculation(Verilog)からBlock Ramを読み出して、計算してBlock Ramに戻す。そして、CPUで結果をBlock Ramから読み取る。

最初に、CPUからBlock Ramを接続する部分を説明する。これらは、XilinxのIPになる。

  • Zynq Ultra Scale+ MPSoC:CPU ARMのモジュール
  • Block Memory Generator:Blcok Ram
  • AXI BRAM Controller:AXIでBlock Ramに接続するモジュール。CPUと接続するために必要

Block Memory Generatorは、Calculation(Verilog)と接続するので、プロパティを開いて、True Dual RAMに変更する。

次に、Calculationのモジュールだ。これは自作モジュールだ。

Block Ramの接続部分と、Block Ramの制御指示を受け付ける部分がある。

Block Ramの接続部分は、以下の信号を用意した。詳細は、PG058を読むのが良いと思う。

  • DOUTB
  • ADDRB
  • CLKB
  • DINB
  • ENB
  • RSTB
  • WEB

制御指示を受けるのは、以下の信号だ。

  • CLOCK:動作クロック
  • RESET:リセット
  • START:計算開始の指示
  • INPUT_RAM_ADDRESS:Bramから読み取るアドレス
  • OUTPUT_RAM_ADDRESS:計算結果を書き込むアドレス
  • STATUS:デバック情報
  • STATUS2:デバック情報

次に、CPU(Zynq)から指示を受けて、Calculationに指示をするモジュール。これも自作モジュールだ。

これは、レジスタを持っている。以下のレジスタを、持つ。

  • START指示
  • RAM読み込みアドレス
  • RAM書き込みアドレス
  • ステータス1
  • ステータス2

全体を見るとこんな感じだ。

Calclationのbramの部分のリードライト部分の波形を示しておく。

使用したソフトウェアと、Vivadoの環境は、以下においてある

https://github.com/y38y38/test_bram

« »