FC2カウンター FPGAの部屋 XilinxのROMをAlteraのROMへ変換する
FC2ブログ

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

FPGAの部屋

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

XilinxのROMをAlteraのROMへ変換する

なひたふさんが、OV7670を使って1日でカラー画像をUSB経由でホストPCに表示するようにしたそうです。その記事は”OV7670のカラー表示”です。凄い技術力とバイタリティーですね。尊敬します。設定をUSB経由でGUIでいじれるようにしたのが素敵ですね。Spartan-3A Starter Kitでは、内部プロセッサでロータリーエンコーダーを使って、いじれるようにすれば良さそうですね。液晶画面に表示して。
それはそのうち、やることにして、DE0でCMOSカメラの出力をディスプレイに表示する回路を進めています。
現在はSCCBインターフェース回路をVHDLからVerilogに変換するところです。大体、変換は終了しました。

SCCB_reg_values_ROM.vhdはXilinx独自の記述でROMを生成しているが、Alteraでも生成できるのか?確かめてみることにした。VHDLからVerilogのXilinxのXST用ROM生成、初期化データロードファイルを作って、Quartus II 10.0SP1でコンパイルしてみることにした。
バグの修正が完了してコンパイルできたが、RAMの初期化データを見る方法がわからない。Chip Plannerでも初期化データを見ることは出来ないみたい?下がChip Plannerの画面。
CamDisp_DE0_2_100921.png

SCCB_reg_values_ROM.vで使用しているM9K Embedded Memory BlockをChip Planner上からダブルクリックすると、Resource Property Editor が起動した。
CamDisp_DE0_3_100921.png

これでも、初期化データは見れる気配がない。どうやって初期化データを見るのか?
ちなみに、書き換えたSCCB_reg_values_ROM.vを下に示す。

// SCCB_reg_valuse_ROM.v
// ROM生成、初期化データロード

`default_nettype none

module SCCB_reg_values_ROM (
    input    wire    clk,
    input    wire [7:0]     address,
    output    reg [15:0]    dout
);

    reg    [15:0] ram [0:255];
    
    initial begin
        $readmemh("SCCB_reg_values.data", ram, 0, 255);
    end
    
    always @(posedge clk) begin
        dout <= ram[address];
    end
endmodule

`default_nettype wire


初期化がうまく入っているのか?それとも無視されているのか?はQuartus IIのMessageウインドウを見ていたのではわからなかった。
CamDisp_DE0_4_100921.png

結局、Memory Blockが初期化されているか?いないかが良くわからないので、どうやって初期化するか、調べてみた。そうしたら、7. Quartus II インテグレーテッド・シンセシスの48ページに、ram_init_file 属性を適用する例が載っていた。下に引用する。

例7–35. Verilog-2001 例:ram_init_file 属性を適用
(* ram_init_file = "my_init_file.mif" *) reg [7:0] mem[0:255];


やはり、MIFファイルを作る必要がありそうだ。MIFファイルは前回、”QuartusⅡでSignalTapⅡを試してみるまでの準備3(キャラジェネROMデータをMIFに変換)”で、Rubyを使って、キャラジェネデータをMIFファイルに変換しているので、今回も変換するRubyスクリプトを作ることにする。

でも、MIFファイルでMemory Blockを初期化しても、本当に初期化されているかツールで見えないと困りますよね?どうやってみるんでしょうか?

(2010/9/23:追記)
FPGA BBSでくりさんに教えていただいたのですが、コンパイル時に、Memory Blockにどのファイルを読み込んだかは、Compilation ReportのFitter->Resource Section->RAM Summaryで確かめることができるそうです。くりさん、いつもありがとうございます。
早速確かめてみました。RAM Summaryを見ると、CamDisp_SDRAM.ram0_SCCB_reg_values_ROM_c9d0e141.hdl.mifという名前のMIFファイルが指定されていました。
CamDisp_DE0_5_100923.png

CamDisp_SDRAM.ram0_SCCB_reg_values_ROM_c9d0e141.hdl.mifの内容を見てみると、$readmemh("SCCB_reg_values.data", ram, 0, 255);で指定したファイルのデータが入っていました。
SCCB_reg_values.dataの内容に一部を下に示します。

1713
1801
32B6
1902
1A7A
030A
73F0
7A20
7B10
7C1E


下に、CamDisp_SDRAM.ram0_SCCB_reg_values_ROM_c9d0e141.hdl.mifの内容の一部を示します。

-- begin_signature
-- SCCB_reg_values_ROM
-- end_signature
WIDTH=16;
DEPTH=256;

ADDRESS_RADIX=UNS;
DATA_RADIX=BIN;

CONTENT BEGIN

..... 省略 ......

    10 :    0111110100110101;
    9 :    0111110000011110;
    8 :    0111101100010000;
    7 :    0111101000100000;
    6 :    0111001111110000;
    5 :    0000001100001010;
    4 :    0001101001111010;
    3 :    0001100100000010;
    2 :    0011001010110110;
    1 :    0001100000000001;
    0 :    0001011100010011;
END;


同じ内容になっている。ということはXilinxと同じ方法でMemory Blockの初期化ができることがわかりました。Quartus II のバージョンは10.0SP1です。
  1. 2010年09月21日 05:58 |
  2. QuartusⅡ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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