しょうがないので、チョイと工作。
ただ、ぼけっとしすぎたせいか、3.3Vのマイコンに5Vを掛けてたんだよねー。気がついたときは、すでに10分ぐらい電圧掛けっぱなしだったんで、再購入を覚悟。ダメ元で、3.3Vを掛け直してみたら、正常動作してラッキー(^o^)
2月末だったのが、こんなに延びるとは・・・。ま、今回は、(たぶん)先方が原因だから、どうでもいいけどさ(^_^;)
先日破壊したマイコンを買い直す羽目にorz 心臓部(ってういか頭脳?)が無いと先に進まんし、ここまで作って、放置プレイは、あまりにももったいないって事で(^^)
で、早速ROMを焼いて、スイッチオン・・・。動かねえ(×_×)
もしかして、ベースボードをぶっ壊したんかもと、冷や汗もんで、再度電圧チェック。さすがに、今回は、正常値。
しばし悩んで、この前コードを追加したことを思い出して、元に戻してみたら、正常に起動。いやはや、心臓に悪いねえ。
ま、これで、開発に復帰できたらOKにしよう。
追加したコードってのは、こんな感じの、何も処理が書いてない割り込みハンドラ。
void __attribute__ ((interrupt_handler)) int_handler(void) { }
そりゃ、割り込みフラグをクリアせずに戻っちゃ、無限ループだよなあ。
以前のCPUに戻したらどうなるかって? それは、聞かない約束だよ(T_T)
と思ってみたものの、週末雨かよ・・・。バイクのバッテリー大丈夫かな。
雨降りの中で走り回る根性もないので、SDRAMコントローラーなどやってみたり。しかし、アドレスバスが足りないな>SH7144。てか、なんで、WAIT端子とA20が共通ピンなんだ?おかげで、1MBしかリニアにマッピングできないじゃん。
せっかく16MBのメモリチップを買ったのに、16個のバンクに分割しないと使用できないって、悲しすぎる。
かといって、文句ばっかり言ってても始まらないし、このまま進むか(´ヘ`;)
現在は、データは読めるけど、しばらくすると、化け化けになるって感じ。どうやら、リフレッシュ周りがおかしい、で決定だな。
ホント、DRAMって面倒だな。かといって、大容量メモリを積もうと思うと、DRAM以外に考えられないし・・・。
廃品種になった某LSIで、新規ハードの見積もりをすることに。
廃品種なのに、新規というのも変な感じだけど、トラ技の広告にも、専門業者とか居るみたいだから、入手は、簡単そうな雰囲気だな。
見積もりだしたところで、受注できるとは限らない。さらに言えば、受注がとれたとしても、試作が成功するとも限らない(^_^;)
なにせ、古すぎて、技術資料がないんだよな。当時はかなりメジャーなLSIだったんだけどな・・・。
ModelSimと格闘。ま、要するにSDRAMコントローラーが、にっちもさっちもいかなくなって、シミュレーターに登場願っただけなんだけどね。
久しぶりすぎて、何をどういじったら画面が出てくるのか、全く記憶にございません(^_^;)
何やっても出てこないんで、根本的に何かおかしいのかと思っていたら、案の定、テスト用に作ったファイルがコンパイルエラーとか言ってやがるorz
シミュレーター走らしてみたら、起動して1msもしないうちにいきなりこけるし。
どうも変数のアンダーフローらしいけど、なんでそんな値になるのかさっぱり不明。
結構根が深いような雰囲気が・・・。
動きやがらんので、チョイと寄り道して、別の回路部分を作成。
手始めに、アクセスしたアドレスを、そのままデータとして返す回路を作ってテストしてみたら、最上位ビットの値が、どうにも安定してくれない。ま、こんな単純なミスは、はんだ付け不良だろうと思って、何回かチェックしてみたけど、問題なし。
眺めてて、なんか違和感があったんだけど、しばらく考えてたら、違和感の正体が判明。
その正体は、16ビットバスでつないだデバイスに16ビットアクセスしてるのに、返ってくるデータに、こんな風に奇数があるってこと。
>dump 400000 ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF 00400000 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 ................ 00400010 00 08 00 09 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F ................
そんなバスアクセスするんか?って思って、データシートを眺めてみたけど、やっぱり、そんなわきゃ無いわけで。
手詰まりになったんで、最初に戻って、アドレスバスを導通チェックし直してみたら、VHDLのピン割り当てと実際のピン割り当てがあわない・・・。改めて、ソース見直してみたら
cpu_a : in std_logic_vector(19 downto 0);
って具合に、アドレスバス20本って宣言してあるのに、
attribute pin_assign of cpu_a : signal is "25,24,23,22,21,20,19,17,16,15,14,13,12,11,10,9,7,6,5,4,3";
実際に割り当ててあるのは21本。そりゃ、最上位ビットが不安定になるわけだ。
割り当て直してみたら、予定通りの値が返ってきましたとさ。
>dump 400000 ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF 00400000 00 00 00 02 00 04 00 06 00 08 00 0A 00 0C 00 0E ................ 00400010 00 10 00 12 00 14 00 16 00 18 00 1A 00 1C 00 1E ................
もしかして、SDRAMコントローラー動くかなって淡い期待してみたけど、やっぱりこける。ただ、読み書きができて、しばらくしてデータが化けるところを見ると、リフレッシュ周りかな?って感じ。
大股で一歩前進だねえ。
合成時にエラーにしてくださいよ>ツール。
Before...
_ 管理人 [ETC割引有効活用ですな。 おいしいうどんはありましたかな?]
_ okamal [おいしいといわれるうどんやさんは、ほとんどお休みでした(T_T)混雑して近所に迷惑かかるとかで・・・でも、はなまるう..]
_ 管理人 [うどんは、そんなもんですか。そいや、徳島なんて、通過したことしかないな。]