ラベル Quartus の投稿を表示しています。 すべての投稿を表示
ラベル Quartus の投稿を表示しています。 すべての投稿を表示

2024年12月30日月曜日

「FPGAボードで6809を作ってNitros9を走らせてみました」の基板化

 「FPGAボードで6809を作ってNitros9を走らせてみました」の基板を作成しました

2022年6月22日に上記のタイトルでアップしたCycloneⅡ(EP2C5T)搭載のFPGAボードの工作の際には、有り合わせの基板に手配線で仕上げました。それ以降、折に触れ使用してきましたが、いかにもそのやっつけ感が気になっていました。また、FPGAに書き込むプログラムを変えればZ80としても6809としても動作するのはすごいことなのですが、切り替えて使用するためにはその都度FPGAのプログラムを書き換えるという手間がかかります。

また、以前も参考にさせていただいたブログ「石原 博の覚書(https://blog.goo.ne.jp/ishihara-h/e/ea09920e03694aab5227db6f08fde76e)」を見ていて、プリント基板を作成できればZ80、6809のそれぞれ専用のボードが作れるなと思っていました。

そんな時に、倍ぐらいに価格が上がってしまっていたFPGAボードがAliExpressで以前のような価格で購入できるショップを見つけたので2枚購入し、プリント基板も作成することで、Z80、6809それぞれの専用ボードとすることにしました。

参考にしたオリジナルの記事

https://www.retrobrewcomputers.org/doku.php?id=boards:sbc:multicomp:cycloneii-c:start

の中にはプリント基板の回路等のデータがあることは知っていたのですが、それはEagleによるもので、以前、私が常用しているKiCadで読み込んで処理しようとしてうまくできずあきらめてしまっていたので、今回はEagleの無料版をインストールしてgerberデータを作成してみました。使い慣れたKiCadによるgerberデータではないので、正しく作られているのかどうか不安でしたが、そのまま発注してみました。

出来上がった基板が下の画像のものです。


基板とFPGAボード

かなりの高密度で、シルク印刷がパターンの穴等によって読めなくなっている箇所も複数あり、迷うところもありましたがオリジナルの記事等を参考にして何とか実装してみました。

それが下の画像の2枚です。


製作した基板2枚

私は基本、シリアル入力を使用するのですが、最初に作成した左の基板はうまく動かなかったので、PS/2キーボード入力、VGA出力に加えてRS-232Cコネクタまで実装してしまいました。動作させるために必要な最小限のものだけを実装したのが右の基板です。また、オリジナルで使用されているSDカードモジュールと同じものが入手できなかったので手持ちのもので間に合わせることになりましたが、モジュールを瞬間接着剤で固定して画像のように配線することで(多少見苦しいですが)無事に動作させることができました。

左下の6ピンのシリアル端子の上に乗っているのは、手持ちのUSB-シリアル変換ケーブルの端子配置に変換するためのアダプタで、最初に作成した基板が動作しなかった(ように見えた)のは、この配線を間違えていたためというお粗末な話でした。


参考までに、作成を通して気づいた点を列記しておきます。

1.gerberデータはオリジナルのデータからEagleで作成できますが、SDカードモジュール部のパターンと合致するモジュールは多分入手困難です。

2.シリアルの6ピン端子の配列は一般のUSB-シリアル変換ケーブルのピン配列と合致しない可能性があります。

3.512KBのSRAMのアクセススピードについてですが、上の画像のように、55nsのAS6C4008-55PCNだけでなく、70nsのHM628512CLP-7でも使用できました。

4.Z-80用としては mc-2g-1024.zip 中の14-Multicompを使用しましたが、何故かTTY版は正常に動作しませんでした。動作するVGA版をインストールしましたが、基板上のVDUFFD0端子をショートすることでシリアル入出力に切り替えることができました。

5.6809用としては multicomp09_nov2016.zip 中のものを使用しました。

6.FPGAボード上のROMに書き込むための手順については、ちかてつ.comさんの「Amazonの激安基板(CycloneⅡ)ではじめるFPGA開発(JICプログラミング編)(https://tikatetu.com/electronics/amazon-fpga-jic/)」を参考にさせていただきました。ありがとうございます。

今取り組んでいるいくつかのテーマがいずれもうまく進まず、いささか倦んでしまっていたのですが、ちょうど良い気分転換になりました。


2022年6月22日水曜日

FPGAボードで6809を作ってNitros9を走らせてみました

安価なFPGAボードでOS-9互換と言われているNitros9を走らせてみました

FPGAで6809を作ってOS9を動かす」というサイトを見て、同じFPGAボードを入手してNitros9を走らせようとしてみました。

 目的は2つありまして、一つはOS-9互換と言われていますが、本当なのかどうかを所有しているOS-9Level1(FM-7用)とLevel2(FM77AV40用)と比較して確認してみたいことと、もう一つは普段使用している自作の6809/6802DualボードでNitros9を走らせたいので、その前準備のためということです。

入手したFPGAボードは下画像のものです。ALTERAのCyclone IIのEP2C5が載っています。他に購入したのは3.3Vで動作するSRAMのみで、あとは全て手持ちの部品で済ませました。


購入したFPGAカード

ネットの情報に従って、裏面のR1, R2, R9, R10は取り外してあります。

その裏面

基板も使いまわしなので余計な穴が開いていたりします...

3.3Vの512KB SRAMが載っていますが、もう一個載せられるようにスペースを空けてあります。


製作したボード

まず最初の試みとして慣れているFLEX9を動作させる方が簡単かと思って、同じ著者の「FPGAで6809を作ってFLEXを動かすぞ」という記事の通りにインストールしてみることにしましたが、うまくいきませんでした。

コンパイルはエラー無く終了し、書き込みも一瞬で無事に終了します。コンフィグROMへの書き込みもできましたが、RAMでもROMでも動作しないのです。

FPGAに書き込んだ6809がまず動作してメッセージが表示され、続いてSDカードに書き込んだFLEX9が読み込まれて走るはずですが、画面には何も表示されません。SDカードを読みに行く気配がないので、それ以前のFPGAに書き込んだプログラムの動作がダメなようです。

一部Verilogで書かれているので、VHDLならともかくVerilogの細かいところは良く分かりません。

これはあかんということで、FLEX9ではなくOS-9の方も試みたのですが、やはり画面には何も表示されず、SDカードを読みにいく以前の段階に問題があるという状態でした。


ハードが悪いのかそれともソフトのせいか

何しろ回路が手配線なのでハードのミスがあるかもしれず、悪いのは回路なのかFPGAデータなのか、それともSDカードに書き込んだファイルなのかが全く分からず、途方に暮れるばかりでした。

そんな時に「Multicomp Cyclone II-CでCP/Mが動いた」という記事を見つけました。これも同じFPGAボードを使用しており、かつSDカードに書き込むイメージファイルも既に用意されていましたので、FPGA用のプログラムをそのままコンパイルして書き込み、さらに用意されているイメージファイルをSDカードにそのまま書き込むことで、あっさりとCP/Mが動作しました。


Z80書き込み中


CP/M3.0起動直後


CP/M3.0動作中


ハードには問題がなかった

この結果、ハードには問題がないことが確認できましたので、あとはFPGAに書き込むプログラムとSDカードに書き込むイメージファイルの作成という事に注力することができます。

FLEXとOS-9を走らせる記事は、こうすればできますよという手順を詳細に解説したというものではなく、分かっている人には分かるという書き方ですので、私のような素人には引っかかる個所が多すぎます。

ということで、あちこちを修正しながらコンパイルして実行することを繰り返しましたが、やはりSDカードを読みに行く前段階の、FPGAに書き込んだプログラムが動作しない状態から脱却できません...(VHDファイルのセット、コンパイル、実行の手順を数百回も繰り返したおかげで、操作手順だけは目を瞑っていても出来るぐらいになってしまいました...)


オリジナルのファイルで動作させることができた

結局、ブログ中のファイルを諦めて、元々のファイルから始めることにしてGithubにある「nealcrook/multicomp6809」をダウンロードし、その中のMicrocomputerPCBフォルダ中のMicrocomputer.vhdから作成することにしました。これについても色々と試行錯誤をしましたが、何とか6809を立ち上げることができました。

これはシリアル出力に設定してコンパイルした場合の出力画面です。まずCamelForthが立ち上がり、Enterー>OK表示ー>NITROS9入力でNitros9が立ち上がり、日付の入力の後、dir /d0でドライブ0の内容が表示されています。


シリアル出力の場合

こちらはビデオ出力に設定してコンパイルした場合で、PS/2キーボードから操作できます。


ビデオ出力の場合

なお、シリアル出力とビデオ出力の切り替えですが、VHDファイルの該当部分を有効・無効化するだけではダメで、シリアル出力に設定した場合はブログの著者による数か所の変更が必要なようです。(元のmulticomp6809中のVHDファイルと比較すると変更部が分かります。)

SDカードに書き込むデータファイルですが、ブログに書かれていますようにLinux環境で行いましたが、書かれていますようにbin\create_sd_imageをそのまま実行してもエラーで止まってしまいますので、実行行を一行ずつ手作業で修正しながら行いました。どうも、著者はLinuxかMac環境のようで(ファイルの改行コードが0x0D,0x0Aでなく0x0Aになっていた)、それもあって私のWindows環境では難しかったのかもしれません。

蛇足ですが、FPGAは便利なものですね。コンパイルに1分程度かかりますが、その手間をかけるだけで同じボードがZ80や6809に変身するのですから。また、ROMに書き込めば電源スイッチONで即起動しますし。

しかし、一ヶ月以上の試行錯誤の結果として何とか動作したので良かったのですが、つくづく自分の知識の無さを痛感しました。未だに理解しきれていない部分が多いですし、おまけに、何故かQuartus IIの13.0sp1をLinuxにインストールできない状態が続いています。


この後は

この後は、まず手持ちのOS-9L1, L2とどの位の互換性があるのかを確認してみたいと思います。その次には、いよいよ自作のボードマイコンへのNitros9の移植に挑戦したいです。