XilinxのData2memで、二つのメモリブロックをISEから自動的に別々のデータで初期化する方法が見つからないので、フォントデータは登録できていない。手動で書くなら、data2memを2回通せばいいような気がするが、マウスだけで簡単操作の原則に反するので、もう少し検討。とりあえずは、折角実装した動作の確認をオシロでする。
水平同期と垂直同期の信号は正しく出ているので、タイミングの計算は間違っていないことが分る。
追加メモリブロックが読めなかったり、いくつか原因不明のトラブルがあったので、実験的に、DCMを用いて、クロックの分周をしてみた。再現性が高い不具合なので、クロックの問題でないのは明らかなのだが、DCMを使う例題を作りたかったので、ちょうどよい。
SFLからDCMなど既存のモジュールを使う時には、プロトタイプ宣言に interface 修飾を付ける(sfl2vl限定)。
declare BUFG interface{ output O; input I; } declare DCM interface{ param_int CLKDV_DIVIDE; param_str CLK_FEEDBACK; input RST, PSINCDEC, PSEN, PSCLK, CLKIN, CLKFB; output PSDONE, CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2X180, CLKDV, CLKFX, CLKFX180, LOCKED, STATUS<8>; } モジュールにおけるDCMなどのインスタンスは、例えば、 BUFG buff; DCM dcm_2(CLKDV_DIVIDE=4, CLK_FEEDBACK="1X"); と、宣言する。 共通動作宣言で、下記の様に接続を定義して使う。 (これは、4分周クロックを使う例となっている) dcm_2.RST = p_reset; dcm_2.CLKIN = m_clock; dcm_2.CLKFB = dcm_2.CLK0; dcm_2.PSEN = 0b0; dcm_2.PSCLK = 0b0; dcm_2.PSINCDEC = 0b0; buff.I = dcm_2.CLKDV; board.m_clock = buff.O; board.p_reset = p_reset;
VGAに文字が表示されたなら、プロジェクトをアップロードする予定だが、我が家には空いたモニタがないし、このところ忙しいので、いつになることやら…
ブロックRAMの初期化
こんにちは。はじめまして。
http://www.xilinx.com/itp/xilinx10j/books/docs/xst/xst.pdf
の246ページ目に書いてある様に外部データファイルからブロックRAMを初期化してはどうでしょうか?
コメント by marsee — 2009年1月22日 @ 1:28 PM
Unknown
marseeさん、はじめまして。
コメントありがとうございます。
フォントの場合に限っては、この方法でもいいのですが、私はverilogを直接書いていないのと、data2memは再合成せずに後付けでbitファイルの中身を変更できる便利さがあって、なるべく、data2mem経由(しかも、ISEから)での書き換えにしたいと思っています。
マルチプロセッサのサポートで導入された、Address_spaceをうまく使えばできそうな気がしていますので、少し時間ができたら、色々と試してみようと思っています。
コメント by 組み込まれたエンジニア — 2009年1月22日 @ 10:01 PM