FC2カウンター FPGAの部屋 XSTのBlock RAMへのロジックのマップを確かめる2
FC2ブログ

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

FPGAの部屋

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

XSTのBlock RAMへのロジックのマップを確かめる2

”XSTのBlock RAMへのロジックのマップを確かめる”で、いきなり自分のDDR SDRAMコントローラの制御ステートマシンをXSTのbram_mapディレクティブでBRAMに入れることを試みたが見事に失敗した。
今回はまず、ftp://ftp.xilinx.com/pub/documentation/misc/examples_v9.zip からサンプルを取ってきて、examples_v9\FPGA_Optimization\mapping_logic_onto_block_ram のうちのbram_map_1.vhd をインプリメントしてみた。このコードはXSTガイドの288ページからに載っているのと同一なので、全文引用させていただく。

-- The following example places 8-bit adders with 
-- constant in a single block RAM primitive
--

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity logic_bram_1 is
port (clk, rst : in std_logic;
      A,B : in unsigned (3 downto 0);
      RES : out unsigned (3 downto 0));

    attribute bram_map: string;
    attribute bram_map of logic_bram_1: entity is "yes";

end logic_bram_1;

architecture beh of logic_bram_1 is
begin

    process (clk)
    begin
        if (clk'event and clk='1') then
            if (rst = '1') then
                RES <= "0000";
            else
                RES <= A + B + "0001";
            end if;
        end if;
    end process;

end beh;


これをISEでインプリメントしてみた。使用するFPGAはもともとのISEプロジェクトに設定してあったもので、XC4VLX15-12SF363だ。
bram_map_3_090108.png

インプリメント終了してFPGA Editorで見てみたところList1のようにlogic_bram_1_ROMという名前のBRAMが1つインスタンシエーションされている。
bram_map_4_090108.png

次にlogic_bram_1_ROMの中がどうなっているのかを見てみる。(図3)
bram_map_5_090108.png

4ビット出力のROMになっていて、ソースの入力A,BがBRAMのアドレスに入力されている。BRAMのADDRA2にA_2、ADDRA3にB_2、ADDRA4にA_1、ADDRA5にB_1、…と接続されていた。なぜADDRA2から接続されているかというと、4ビット幅のROMだからだろうと思われる。
図3の下のウインドウが初期値を表示している。INIT_00の右端が最初のデータだ。ピンクの四角の中を見てみると9551という値が見える。
最初の右端の1はAが0、Bも0の時なのでA+B+"0001"= 1
その次の5は、A(2)だけが1 "0100"、Bは0なのでA+B+"0001"= 5
その次の5は、Aが0、B(2)だけが1 "0100"なのでA+B+"0001"= 5
その次の9は、A(2)が1 "0100"、B(2)が1 "0100"なのでA+B+"0001"= 9

つまりBRAMがテーブルになっているようだ。

-- attribute bram_map: string;
-- attribute bram_map of logic_bram_1: entity is "yes";


上のようにattribute bram_mapをコメントアウトしてインプリメントしてみた。FPGA Editorで見ててみると、通常のようにSLICEを使ってインプリメントされている。
bram_map_6_090108.png

2009/1/9 追記:
簡単なステートマシンを例にbram_mapディレクティブでBRAMに入るかどうかやってみたがだめだった。そういえばprocess文2つで、クロック代入部と組み合わせ回路とに分けてステートマシンを構成しているので、1つにしたらどうか確かめてみたい。
  1. 2009年01月08日 05:50 |
  2. その他のXilinxのツールについて
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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