DDT誌付録のLatticeXP2基板にAVR_Coreを実装する(するだけ)

少し前から下描きでずっと放ってあったいないさんの画像レス用の絵を
ガーっと仕上げて二次裏内で本人にいくつか使用してもらいました。
思えば私、ひさびさに真面目に虹メ&女主人らしい活動をした気がします。
やればできるジャン私!…そして滞るブログの更新。






少し前にAVR_CoreのLED点滅&UART垂れ流しのデモSVFだけ公開してましたが、
ある程度まとまりましたのでここに実装の仕方とか箇条書きで記しておきます。
ねむいさんが後から読んでわかるレベルのことし書きませんので悪しからず。
なんせまだ検証途中なもんでこれから先もどんどん変わる。

「お前の前フリはいつも長い」という方の為にソースは最初につけておきます。
自己責任でどうぞ。

1.ハードウエアを準備しないとね
 a.LatticeXP2基板はLDO&外部OSCを必ずつける。
  内部も使えますがシリアル吐かせたい時は正確なクロックが必要なので。
  クロックは30MHzを使用(kawasan氏のソースは内部で4分周してるので実際は
  7.5MHzでうごいてます)。これは私がやってるお勧めできない実装例

 b.LatticeXP2に何らかの手段で書き込みができるようにしておく。
  内蔵フラッシュにはUrJTAG+JTAGkeysvfファイルの再生という形で
  コンフィグができます。
  JTAGkey(と互換回路)は持ってるけどLPTポートが無いPCやなひたふさんの
  78kライタが使用できる基板を持ってない&無駄にCOMポート増やしたくない
  なんて人は私がやってる方法で試してみてください。

2.論理合成用のソフト群のインストール…
 アカウントもらえるの時間かかるけどがんばれ。
 れっつごー

3.AVR_Coreのソースは…
 kawasan氏がxilinx用に実装を試みています。今回はこちらを使わせてもらって
 LatticeXP2向けとして実装していきます。

4.プロジェクト作って…
 ねむいさんは鳥頭でvhdlの文法はもうすっかり忘れてしまいました。だから
 なるべくソースはいじらない方向で、かついきなり本体に実装で行きます!!
 (シミュレーション等を一切考えてないとか一番ダメな手法だろうけど…)。
 プロジェクトに統合したvhdファイル群と階層構造はこちら
 
5.AVR側のプログラムは…
 WINAVR(20090313)を使用してATMEGA103用のプログラムをコンパイルします。
 後述しますがRAMは実デバイスとほぼ同じ4096バイト取るのでコンパイラ側で
 リンカスクリプトなどの細工とかを考える必要は全くなしです。
 (cyclone基板の頃はDWM誌に具体的な説明が何一つなくてホント苦労した)
 kawasan氏のhex2vhdl.cを実行形式ファイルにしておいて、make一発で
 prom.vhdまでプリッと出るようにしておきました。kawasan氏に感謝です。
 肝心のプログラムの内容はソースを参照のこと(はしょるはしょる)
 とりあえず前回とほぼ同じで、動いてますよ程度のものです。

6.とにかく一回合成してみる
 時間長い。すげぇ長い。仮想PC上で動かしてるからこんなものなのでしょうね多分。
 合成の結果を見てみるとROM、RAM共ブロックRAMを類推してくれてます。
 kawasan氏のxilinx用のものがそのまま使えるようです。kawasan氏にマジ感謝です。

7.外部に信号を出す
 外部に引っ張り出す信号の設定をします。今回は最小限の確認なので
 こんな感じに。後述しますがreset引っ張るときは元のソースは論理が反対に
 なってるので注意です。

8.jedファイルに落とす
 ピン配設定まで終わったらここでjed作ります。jedからsvfはこちらを参照のこと。

9.svfを書きこむ
 UrJTAGのバッチモードで一気に。svfファイル内のeraseいじっておくとあっとい
 う間に終わるのは前にも述べたとおり
 あと、何度かやってるうちに分かりましたが、バッチで動かすとUrJTAGがdetect
 に入ったときに時折フン詰まりになることがわかりました
 バッチの記述にdetectの前にfrequencyの設定を2回記述して回避してます。
 (原因はあとで調べます…)

10.うごいた。
 動いてます。ねむいさん自身はほとんど何もしてません。先達が残された偉大な
 足跡に感謝ですね…。というわけでもう一回おソース。冒頭のと同じです。
 試されるときは自己責任でどうぞ(定型文)

11.考察
 a.AVR側のプログラム容量の制限
  なんも考えなしにべーっと合成した場合、RAM:4096byte(固定),ROM:8192byte
  が限度でした。ブロックRAMは166kbitあるのでRAMが4096byteだとROMは
  16384byteでもギリでいけると思いましたが…駄目。
  RAMを2048に減らすと通るかしら?そうなるとRAMENDを細工しなきゃならない
  のでしたくないのですが…
  でも現状こんだけRAMROM使えたらおんの字ですよね!?
  
 b.AVR_Core側
  kawasan氏のvhdlソースをなるべく変えないスタンスで行きましたが、
  DDT誌基板のSW入力ピンをリセットとして使うと、論理が逆になってしまう
  のでソース中の記述も変えました。
  また、ROM容量を8192byteまで取ったのでROMのビット幅も変えてます。
  この二つの変更だけでDDT誌のLatticeXP2基板にAVR_Coreを実装できました。
  あ、prom.vhdのこと忘れてた。



…実装は上手くいきましたが、AVR_Core使う場合はこっからがやっとこ始まり
ですね〜…一応RAM&ROM容量の見積もりがついたんで作りたい物のめどはつけてます…
vhdlとか論理回路とかの再おべんきょは避けられないのかorz

Go to top of page