2019年06月27日

CD-4ディモジュレータ(FPGA)改良版

FPGA版のCD-4ディモジュレータですが、PC版から音に直接関係する部分で一部、割愛した部分がありました。
それは、RIAAのイコライザは低周波ほどゲインが上がりますがADコンバータの構造やFM復調によって直流分が出力される可能性があり、直流は10倍も増幅されてしまうため、RIAAの前に除去したほうがDレンジを大きく取れるため、PC版ではRIAAの前にIIRのHPFがついています。
ですがFPGA版では回路規模から収まらなかったため、割愛していました。
ですが、RIAAのイコライザもIIRフィルタですし、左右・前後のRIAAイコライザ用IIRを時分割にして共有することでFPGA版でもHPFが入れられるようになりました。
release-CD4dem.190627.qar
posted by プー at 21:50| Comment(0) | 日記 | 更新情報をチェックする

2019年05月14日

FPGA版CD-4 demodulator

ソフトウェア版CD-4 demodulatorを作りましたが、レコードを聴くのにいちいちパソコンを接続して、というのも面倒な作業ですし場所も必要ですので、単体で動作するものをFPGAで作ってみました。
基本的にマルツパーツで入手できるもので作っています。
FPGAボードはMAX10-FB(SDRAMは使用していないので雑誌付録でも十分)
ADコンバータは旭化成のAK5720VT
DAコンバータは同じく旭化成のAK4386ETを前後で2石
です。できるだけ安価な部品で集めてみました。
以前作ったオーディオコンソールに内蔵させることも考えて、セパレーション調整等は
I2Cから制御するように設計していますが、簡易的にプッシュスイッチでも調整できるように
入力を準備しています。(ただし左右同じ設定にしかできませんが)

CD4-FPGA.jpg
御覧の通り、まだブレッドボードです。また、まだ実験段階でフロントADCは未接続ですがたぶん問題なく動いているでしょう。
ADC,DACは24bit/96kHzに対応のI2Sフォーマットのものであれば何でも使用できると思います。
一応、全回路24bit/96kHzで計算させていますので「ハイレゾ」になるのでしょうか。
ソフトウェアバージョンでは500msのバッファで処理をしていましたが、FPGA版ではフィルタでの遅延はありますがほぼリアルタイムで処理されます。
4chレコードという、昭和の時代の産物も、平成・令和も健在です。
release-CD4dem.190513.qar
posted by プー at 00:19| Comment(0) | オーディオ関連 | 更新情報をチェックする

2019年04月14日

少し修正しました

BG画面でキャラクターの水平反転が切り替わった直後のbitが正常に反転しない問題がありましたので修正しました。
スプライトは前後1クロック、書き込まない期間があるため問題は発生していませんでしたが無駄なレジスタを使用していたのでこちらも同様に修正しました。

おまけで、FDエミュレーションのイメージ読み書き進捗ゲージがディスク番号行で進むようにしていましたが、書き込み時に同じ行が選択状態にあると見えないので、ゲージ表示は最下行に移動しました。それと、FDエミュレーションのイメージ読み書きを微妙に高速化しています。
release-F68k_DE0CVDEMU.190414.qar
posted by プー at 09:49| Comment(26) | リリース/X68k | 更新情報をチェックする

2019年04月11日

画面周り割込み修正版

画面周りやタイマ/カウンタの動作に間違いがありましたので修正しました。
ラスタ割込みはどこからどう数えての数値で割り込みを掛ければいいのかがいろいろな資料を読んでも分からなかったので適当に実装していましたが、どうやら垂直表示期間が終わってブランクに入ったラスタを0として、ラスタ毎にカウントアップするのが正しそうで、インターレース表示の時には奇数行・偶数行関係なくラスタをカウントすればいい?ようなのでそのように修正しました。
もともと僕の実装では表示期間があって、ブランク/同期期間がある、という順番(数値)になっていましたが、実機では先にブランク/同期でその後に表示期間のようです。
また、タイマ・カウンタはカウント値が1になった次にトリガがかかった時に割り込みを掛け、次のトリガでカウント値を初期化していましたが(カウント値0が存在する)、実機では同時にカウント値を初期化するのが正しいようです。
そのように修正しました。

release-F68k_DE0CVDEMU.190411.qar

垂直同期割込みやラスタ割込み等使用しているソフト、且つ15kHz水平同期の物ではタイミングが改善されると思います。
posted by プー at 18:37| Comment(0) | 日記 | 更新情報をチェックする

2019年04月03日

特殊プライオリティ修正

前々回の投稿のコメントに記載しましたが、特殊プライオリティに誤りがありましたので修正しています。

release-F68k_DE0CVDEMU.190402.qar

それと、デバグ設定をgeneric文にまとめてON/OFFしやすく変更しています。
posted by プー at 08:23| Comment(0) | 日記 | 更新情報をチェックする

2019年03月26日

修正版

テキスト画面の同時アクセスで正常に書き込みができないプレーンがあるのと、FDエミュで
イメージの読み込み中にSASIにアクセスがあると暴走する問題がありましたので
修正しました。
テキスト画面の同時アクセスは、キャッシュ回路及びSDRAMアクセス回路がMPUの
タイミングに合わせて設計してあるため同じタイミングでアクセスしないと書き込みに
失敗するようで、合わせたのでMPUで4アドレスに書き込む時間と同じ時間が掛かって
しまいます。
そのため、あまり同時アクセスしたからと言って高速には動かない、という回路になって
しまいました。
FDイメージ読み込み中(トラック単位)は割り込み禁止にしましたので(SASIは割り込みで
動作するがファイルI/Oが多重アクセスに非対応にしてあるため)SASIが未反応で
IOCS等がエラーを出すと思いますが、大抵はリトライで対応可能だと思います。
release-F68k_DE0CVDEMU.190326.qar
posted by プー at 22:07| Comment(1) | リリース/X68k | 更新情報をチェックする

2019年03月22日

画面周り等修正版

今まで半透明や特殊プライオリティには対応していませんでしたが、画面の重ね合わせに
異常な部分があり、その修正のついでに半透明と特殊プライオリティにも対応させました。
従来、色コード0を指定したところは透明でプライオリティが低い画素の色が表に出るように
コードを書いていましたが、エミュレータ等の動作を見ると、色コード0だけではなく、
パレット="0000"の場合も透けるようです。その場合、例えばテキストとスプライトで
プライオリティが高い画面の色コードが0以外の時には高い画面のコードを、0の場合は
低い画面の色コードをパレットに回せばよかったのでパレットが1つで済みましたが
パレット出力も見て判断が必要なのでパレットも別々に準備する必要があるようです。
それほど大きなRAM容量ではないので同じ内容のパレットRAMを2種類用意して対応
しました。
ついでに半透明でも複数のパレットが必要ですので半透明・特殊プライオリティにも
対応させました。
ただし、動作確認用のソフトが無いので、「たぶんこれでいいと思う」レベルですが。

それと、SDRAMが1つしかありませんので、10MHzのMPUだけSDRAMを使用するので
あればキャッシュは使用しませんが、画像関係でテキスト・グラフィックスと多くの
データをSDRAMから読む必要があるため、その間MPUができるだけ止まらないように
キャッシュを持たせています。
(PC-88ではグラフィックスの容量が少ないのでキャッシュがなくても十分に回せた)
読み出しキャッシュにSDRAMからデータを読み出している間はキャッシュ外への
アクセスにはウェイトが入るので、容量の多いキャッシュを少し積むよりは適度な
サイズのキャッシュを沢山積んだほうが効率よく動作します。
そのため、キャッシュのサイズと数量を可変できるようにしました。
1個当たりのキャッシュサイズはX68DE0CVDEMU2.vhdのarchitecture分の先頭にある
brsizeで8=256word,7=128word...という指定です。9以上は指定禁止です。
キャッシュの個数はcachecont.vhdのarchitecture分先頭のbrblocksで個数をそのまま記入します。
個数が多いほど本来であればパフォーマンスは上がるはずですが、増やしすぎると
配線長や回路が複雑になるため正常に動作しなくなります。
現在の設定(brsize=7,brblocks=8)あたりがパフォーマンスは最適になるようです。
(ソフトによって異なるでしょうが)

ちなみに従来の回路はbrsize=8,brblocks=4に相当します。

release-F68k_DE0CVDEMU.190322.qar
posted by プー at 20:40| Comment(3) | リリース/X68k | 更新情報をチェックする

2019年03月09日

DiskEmu変更

初期バージョンのFDディスクエミュレータはトラック毎にNiosIIプロセッサでSDカードから
データを読み出し、トラックイメージに展開していましたが、NiossIIプロセッサは
遅いためタイムアウト等で正常に動作しないソフトウェアがあったようです。

2番目のバージョンはトラック毎にNiosIIプロセッサはSDカードからデータを読み出しますが、
ハードウェアでトラックイメージに展開することで高速化しました。
ですが、まだ稀にタイムアウトが発生していたようです。

NiosIIでトラック毎イメージを展開するのは限界のようですので、今回のバージョンでは
FDファイルを選択した時点でディスクイメージを丸ごとSDRAMに展開する方法に
変更しました。
ですのでファイルを選択したときに変換時間分待たされますが、ロードは実FDDと等速で
動作できるようになったため、エラー発生はほぼなくなったようです。
FDへの書き込み時には、書き込みが終わった時点でSDカードに書き戻しを行います。
ですのでエミュレータBUSY(一番右のLED)が点滅している間はSDカードを抜いたり
電源を切らないでください。
別のファイルに切り替えたりする操作を行うと未保存のイメージは書き戻しを行います。

同時に、SASIエミュレータがリセット信号を無視していたため、反応するように変更しています。

release-F68k_DE0CVDEMU.190309.qar

PC88の方はSDカードアクセス方法が異なるため、エミュレータ自体は対応できる
設計にしてありますが、移植はまだです。また、2HD以外での確認もできていません。
単密度(FMフォーマット)時の動作は正確ではないことは分かっています。
(トラック長さが倍になっていますのでディスク1回転にかかる時間が倍の時間に
なってしまっています)
posted by プー at 19:37| Comment(8) | リリース/X68k | 更新情報をチェックする