アダルト・ヴァイオリン May the force be with you..

2009年1月16日

VGAモニタ出力の実装

Filed under: Weblog — い~ぐる @ 4:15 AM


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に文字が表示されたなら、プロジェクトをアップロードする予定だが、我が家には空いたモニタがないし、このところ忙しいので、いつになることやら…

2 Comments »

  1. ブロックRAMの初期化
    こんにちは。はじめまして。

    http://www.xilinx.com/itp/xilinx10j/books/docs/xst/xst.pdf
    の246ページ目に書いてある様に外部データファイルからブロックRAMを初期化してはどうでしょうか?

    コメント by marsee — 2009年1月22日 @ 1:28 PM

  2. Unknown
    marseeさん、はじめまして。
    コメントありがとうございます。

    フォントの場合に限っては、この方法でもいいのですが、私はverilogを直接書いていないのと、data2memは再合成せずに後付けでbitファイルの中身を変更できる便利さがあって、なるべく、data2mem経由(しかも、ISEから)での書き換えにしたいと思っています。

    マルチプロセッサのサポートで導入された、Address_spaceをうまく使えばできそうな気がしていますので、少し時間ができたら、色々と試してみようと思っています。

    コメント by 組み込まれたエンジニア — 2009年1月22日 @ 10:01 PM

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress