FC2カウンター FPGAの部屋 VHDLでのブロックRAMや分散RAMの初期化(16進数で書かれた外部データファイル)
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

VHDLでのブロックRAMや分散RAMの初期化(16進数で書かれた外部データファイル)

VHDLでのブロックRAMや分散RAMの初期化(外部データファイル)”の続き
”VHDLでのブロックRAMや分散RAMの初期化(外部データファイル)”では、外部データファイルを16進で書くことができなかったが、どうも2進数で書くとわかりづらいので16進数で書く方法を模索することにした。やってみたら書くことができたので、ブログに書いておくことにする。
さて、hreadを使えば16進数で読めるようになるのだが、前回はhreadを書いてもエラーになってしまった。hreadが定義されているのはstd_logic_textio.vhdなので、これを見ると、out の属性はstd_logic_vecter になっている。そうか、前回はbit_vector で記述されていたからエラーだったんだ。。。早速、定義のところをstd_logic_vectorに変更したところ、論理合成が通った。嬉しい。。。
そのソースを下に示す。

library IEEE, STD;
use IEEE.std_logic_1164.all;
use STD.textio.all;
use IEEE.std_logic_textio.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
-- pragma translate_off
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
-- pragma translate_on

entity idram is
    port(
        clk, reset : in std_logic;
        wr : in std_logic;
        iad, dad : in std_logic_vector(7 downto 0);
        ini : in std_logic_vector(15 downto 0);
        iout, dout : out std_logic_vector(15 downto 0));
end idram;

architecture RTL of idram is
type RamType is array(0 to 255) of std_logic_vector(15 downto 0);
impure function InitRamFromFile (RamFileName : in string) return RamType is
    FILE RamFile : text is in RamFileName;
    variable RamFileLine : line;
    variable RAM : RamType;
begin
    for I in RamType'range loop
        readline (RamFile, RamFileLine);
        hread (RamFileLine, RAM(I));
    end loop;
    return RAM;
end function;
signal RAM : RamType := InitRamFromFile("idram.data");
begin
    -- データ用RAM
    process (clk) begin
        if clk'event and clk = '1' then
            if wr = '1' then
                RAM(conv_integer(dad)) <= ini;
            end if;
            dout <= RAM(conv_integer(dad));
        end if;
    end process;
 
end RTL;


下の記述もすっきりした。
さて外部データファイルの一部を下に示す。

0101
1234
3456
FF00
0000
0000
0000


これでインプリメントするとBRAMにマップされる。それをFPGA Editor で見てみたのが下の図。
ext_data_file__091219.png

ピンクの四角で囲んだ部分に外部データファイルのデータが入っているのが分かる。
これで、16進数の外部データファイルで見やすく書くことができる。
  1. 2009年12月19日 05:30 |
  2. VHDLの書き方
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1325-6bce3bd7
この記事にトラックバックする(FC2ブログユーザー)