0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VTL_on_FPGA[その5 VTL_on_FPGAの拡張IO]

Last updated at Posted at 2018-07-07

効能

 VTL_on_FPGAのの操作をスタンドアローン(パソコン無し)で実行できます
  (1)PS2キーボード
  (2)VGAキャラクター表示 80x25行x2色(256色から選択)
  (3)VGAグラフィック表示 640x480x256色
  (4)SDRAMアクセス     32MB
  (5)プログラム格納    64KB(EPCS) ※制御が大変だったが結構便利

画面の操作

1.テキスト表示

 (1)操作入出力表示
 シリアルとパラに表示しています。(追加操作不要)
 (2)VDTのみに表示
  IOの$14番地に書き込むと表示されます。
   例 L=0,159 <$14=$30+(L&15) @=L+1 <- NG(文字欠け)
  ※但し、改行中は入力を見ておらず、この方法では文字欠けが発生します。
  シリアルと同時ならOKよ
   例 L=0,159 $=$30+(L&15) @=L+1 <- OK
 (3)VDTに位置指定で表示
  IOの$12番地に表示アドレス、$13番地に表示データを書き込むと表示されます。
   例 W=0,10 @=W+1 P=1*80 L=0,79 <$12=P+L <$13=$30 @=L+1
  ※但し、表示開始位置を0リセットするので、この後の一回目は変なスクロールが発生。
   また、スクロール中に表示すると文字欠けするので、この考慮が必要。
 (3)色指定
  文字/背景色は2種類の何れかを選べます。
  文字データ+$000で色指定0、文字データ+$100で色指定1となります。
  文字色指定0は$10、色指定1は$11に$xxyy(xx=背景色 yy=文字色)により指定します。
   例 <$10=$00FF <$11=$E000 L=0,159 $=$130+(L&15) @=L+1 <- 文字黒、背景赤
  色データは8bitで「rrrgggbb」の並びとなっています。

グラフィック表示

 $15にX座標、$16にY座標、$17に色データを書き込むと表示されます。
  例 10 Y=120,239 <$16=Y <- 画面に白い四角を表示
    20 X=160,319 <$15=X
    30 <$17=$FF
    40 @=X+1 @=Y+1
 ※画面の左上に書いた覚えのない線が見えるが、なんだろう。

動作概要

PS2キーボード

 (1)スキャンコードの取得が「EP4CE6-Starter-Board-Docs」に記載されているで流用。
  このロジックでは、キーを操作すると、acd_doneが一瞬ONする。
 (2)スキャンコードからアスキーコードへの変換を実装。
  ※VTLで使用する最低限の変換、なにか漏れているかもしれない。
 (3)VTLとの接続ロジックを記述、次の動作となる。
  キー入力 -> acd_rdy(ON) -> キー読取 -> acd_req(ON) -> acd_rdy(OFF)
 (4)シリアル入力時に合わせて入力確認を行う事により、VTLから読み取る。

VGAキャラクター表示

 (1)FPGAメモリに50MHzで駆動するテキストバッファを確保。
 (2)25MHzクロックのHI/LOで、VTL(W)/ディスプレイ(R)アクセスを切り替える。
 (3)画面表示に合わせてテキストバッファからディスプレイデータを読出し。
 (4)FPGAメモリに25MHzで駆動するCG(キャラクタージェネレーター)を確保。
 (5)ディスプレイデータでCGを選択し、キャラクターを表示。
 (6)VTLからのアクセスはフラグを立てて、アクセス可能なタイミングで書き込む。
  VTLからのアクセスが遅いので、通常は問題なくアクセス可能。
  但し、インターロックがないので、スクロール中にアクセスすると、文字欠け発生。
 (7)表示の為にメモリを4KB消費。使わない場合はTD4の主メモリを増やすが吉。

VGAグラフィック表示

 (1)VGAのグラフィックバッファとしてSDRAMを使用する。
 (2)SDRAMは25MHzに2バイト毎のアクセスが可能な設定なので、VTL/VGA交互にアクセス。
 (3)VGAは12.5MHz毎に2byte読出し、25MHz毎に1dot(1byte)表示する。
 (4)グラフィック表示でSDRAMを307.2KB使用しているが残りは空き地、もったいない。

SDRAM

 (1)SDRAMは、クロック150MHz、CL=3で駆動。
(2)150MHzを6分周して、25MHz毎にR/Wを実施している。
 ※元ネタ(エミュレーター)は64MHzの8分周なので、タイミング的になにか誤っているかも。
※ライブラリを使用したほうが間違いないのだろうが、I/Fが複雑で良く判らない。
 (3)6分周のタイミングでras,cas,weを操作すると、最後に読出しデータが出てくる。
(4)VDTが定期的にアクセスするので、リフレッシュはやっていない。

プログラム格納

 (1)EPCSの最後のエリア($70000 - $7FFFF)を使用。(FPGAでは使っていない模様)
 (2)追加書き込みを行い、最後まで行ったらフォーマットする。
 (3)書き換え回数は10万回と言われているので、フォーマットを10万回行える。
 (4)エリアは極めて小さいが、4KBのプログラムなら16本入る。
 ※このボードではASMIが正常に動作しなかったので、ローレベルから制御している。

その他

 とりあえず動いているのレベルであり、状況によっては動かない可能性が有ります。
 上記記載のハード、ソフトは無保証であり、各自の責任においてご利用願います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?