guruguru123’s diary

かなり雑な作業日記です。

SDRAMのバースト動作(3)

前回はただaddr?とでるだけだったので、とりあえず"start_addr?”と"stop_addr?"と表示するようにした。これで開始と停止アドレスを指定できるようになった。

アドレスの指定はとりあえずbankを1ビット、rowを1ビット、colを1ビットで指定する。

ここまでは動作クロックが32MHzであるので、DCMをもちいて100MHzにして動作させていく。しかし、AD9851は基準クロック32MHzを6逓倍して使って180MHzとして使っていたため、これをどうしようか悩みどころだ。(AD9851のクロック上限は180MHz)

今回はとりあえずAD9851の基準クロックはそのままで、SDRAMRS232Cブロックだけ100MHzで動作させていく。

DCMで100MHzと32MHzのクロックを生成し、制約ファイルに以前のように

PIN "CLK_GEN/clkout1_buf.O" CLOCK_DEDICATED_ROUTE = FALSE;
PIN "CLK_GEN/clkout2_buf.O" CLOCK_DEDICATED_ROUTE = FALSE;

と書き込んでエラーをWARNINGへと移行させた。

WARNINGを見てみると、100MHzのSDRAMのクロック源としての外部出力に関してPlace:1206とPlace:1137が出ていた。これは生成したクロックがそのまま出力されており、遅延やスキューを発生させるとかいてある(たぶん)。回避方法として、出力DDR(ODDR2)を用いることで、これを回避できると指示が書いてある。試してみるとWARNINGが消えて、問題なく外部出力が行えている。

しかし、AD9851のW_CLKとして用いている32MHzの方は依然としてWARNINGに残っている(Place:1137)ので、これを改善していきたい。