日本ロジック設計    - VHDL ロジック記述サンプル -


TOPページ 


FPGA内蔵のメモリブロックを利用するサンプル


  AI学習禁止
  無断転載禁止
  免責事項: 当サイトの情報を元に取った行動の結果について、一切の責任を負いません
  No unauthorized reproduction or AI training allowed.
  Unauthorized reproduction prohibited.
  Disclaimer: We are not responsible for any actions taken based on the information on this site.
  (C) 2025 JAPAN LOGIC DESIGN 日本ロジック設計



  FPGA内蔵のメモリブロックを利用する VHDL記述サンプル。ここでは Xilinx Spartan 7 を想定している。
  ポイントは、以下の2点。
   ・メモリ用配列の定義
   ・メモリロジックの記述

  1. メモリ用配列の定義
   配列の定義は、ロジック記述とは別ファイルに分けることを勧める。
   ロジック記述が短い場合はまとめてもよいが、記述が増えファイルが複数になった場合は、
   配列の定義を別ファイルとし、各ロジックファイルの先頭に [ use WORK.TYPES.all ]を追加する方法がすっきりする。

   配列の記述例は以下の通り。 ※メモリ構成 4K x 16bit の例

   -- Use IEEE library
   library IEEE;
   use IEEE.STD_LOGIC_1164.ALL;
   
   package TYPES is
   type ram_array is array ( 0 to 4095 ) of STD_LOGIC_VECTOR (15 downto 0);
   end TYPES;

  2. メモリロジックの記述例
  2-1. IEEE 記述
   配列定義を別ファイルとしたため、S-RAMロジック記述用ファイルの IEEE 記述部分に [ use WORK.TYPES.all ] を追加する

   -- Use IEEE library
   library IEEE;
   use IEEE.STD_LOGIC_1164.ALL;
   use IEEE.STD_LOGIC_ARITH.ALL;
   use IEEE.STD_LOGIC_UNSIGNED.ALL;
   use WORK.TYPES.all;    <-- 配列使用時の記述、配列定義は別ファイル

  2-2. メモリロジック本体の記述例
   ※外部信号の同期化ロジックは記述していない。

   -- [WRITE] --------------------------------------
   process(CLK20M)
   begin
    if ( CLK20M'event and CLK20M = '1' ) then
     if ( RAM_ENABLE = '1' ) then
      if ( RAM_WRITE = '1' ) then
       -- RAM_ADD は integer に変換して使用する
       block_ram_4K_16bit( conv_integer(RAM_ADD) ) <= RAM_DATA_IN;
      end if;
     end if;
    end if;
   end process;
   
   -- [READ] ---------------------------------------
   process(CLK20M)
   begin
    if CLK20M'event and CLK20M = '1' then
     if ( RAM_ENABLE = '1' ) then
      RAM_DATA_OUT <= block_ram_4K_16bit( conv_integer(RAM_ADD) );
     end if;
    end if;
   end process;

  3. テストベンチ
   テストベンチにて、メモリにWRITE/READを行い、データが正しいかを確認する。
   if文にて期待値チェックを行っており、期待値エラー発生時はその場で終了する。最後まで完走すればOK。
   テストベンチは MODELSIM/VIVADOシミュレーション共通で使える記述にしている。

   ・MODELSIM によるシミュレーション
[picture:pic_sram_sim_modelsim]

   ・VIVADO によるシミュレーション
[picture:pic_sram_sim_vivado]

  4. サンプルファイル
   主なファイル構成は下記の通り。
     ・MODULE_RAM.VHD   RAMロジック
     ・TEST_BENCH_RAM.VHD シミュレーション用テストベンチ。MODELSIM/VIVADシミュレーション共通。
   プロジェクトファイル一式
    ・MODELSIM用プロジェクトファイル:japanlogicdesign_sram_test_modelsim.zip
    ・VIVADO用プロジェクトファイル:japanlogicdesign_sram_test_vivado.zip
    ※注意:VIVADO プロジェクトファイルは参考にとどめ、新規に作成しなおすことを推奨する
          MODELSIM プロジェクトは相対パスではないため、ソースファイルの再登録が必要な場合あり

  5. VIVADO コンパイル後の確認
   ブロックRAMが割り当てられているか、コンパイル後に確認する。
   もし使用ブロックRAMの数が 0 だった場合は組み込みは失敗。※BRAMではなくFFに割り振られている可能性あり。
   ※デバイスが 7S50 の場合、内蔵ブロックRAM数は75個。これに 4Kx16bit を割り当てると 8bitのブロックRAMが2個(16bit分)使用される。



 中国プロテクト:天安門事件、法輪功、チベット