2012-01-01から1年間の記事一覧

Altera の FPGA/CPLD にコマンドラインで論理回路イメージを転送する方法

毎回毎回クリックするのは面倒だし、履歴が残らなかったり見づらい。Quartus II は見る感じコマンドラインでいろいろやれるようで、とりあえず -help をみてやってみた。(QuartusIIのインストールパス)/quartus/bin/quartus_pgm.exe がそれで、パスが通って…

解像度

今回はフレームレートが遅い分、スキャンラインの本数が多いという条件なのでモニタにテストパターンを表示してみることにした。次に FPGA にいれて、液晶モニタに表示してみたほう。(左端の縦線がでないのはバグ, アップスキャンモードでシミュレーションし…

座標系統

tilemap 配置, spritemap の座標系統をみるに表示領域がわかってきた。シミュレーション用には座標作成の y の値を 0 ではなく、表示領域の直後の値からはじめたほうがよさそう(以前もそうやっていたことを思い出した)。ついで表示領域とその1つ手前にやる描…

open watcom 関連

リンカの文書をかるーく読んだが、リンカスクリプトがないのでコマンドラインにどんどん盛っていく様子。最低限としてスタートアップ、ベクタテーブル、ROM アドレス, RAM アドレスを定義したいんだが、セグメントの扱いがよくわからないし、嫌な予感がする。

proc 関連

NSL

DRAM コントローラを作っていてわかったことは proc から proc を呼ぶことができるが、ソフトで言う関数のように使えるものではないということだ。 proc から proc を呼ぶ場合は関数で言うところのリターンアドレスみたいな概念はない ローカル変数のような…

SystemC 関連

Verilator は verilog ソースを SystemC ソースに変換するものであってシミュレータではない NSLCore は直接 SystemC ソースを出すことが出来る SystemC は HDL を C++ で実現したもので、テンプレートやシミュレータとしてのライブラリをいれたもの ソース…

Icalus Verilog を試した

すぐに使えたが、1画面のシミュレーションが遅く使い物にならないことがわかった。ModelSim の 1/16 ぐらいの速度。残念ながら今回の目的には不採用。Verilator にするのが一番のようだが、 SystemC を習得しないと使いこなせないのでちょっと保留。今回は 8…

SDRAM 接続メモ

memory control signal dqm[1] = ube dqm[0] = a0 dq[15:0] = ad[15:0] (メモリコントローラのインタフェースは ad から d だけにして、入力出力も別ける) refresh 64ms/4096times, 18.176ms/1163times on 64MHz, 6 clock/ 1 refresh, 6978 clock. 1line 0x1…

uPD70116 byte order

UBE と A0 が bytemask になる。比較用に68000の UDS, LDS も書いておく。 /UBE A0 Databus|UDS LDS Databus word |0 0 D15:0 |0 0 D15:0 byte even|1 0 D7:0 |0 1 D15:8 byte odd |0 1 D15:8 |1 0 D7:0 little endian と big endian の違いはこれでよかった…

キャラクタROMの容量減らし

lineview から出している画は、エミュレータから VRAM をダンプしてそれを作成中の互換回路に読み込ませて同じ画が出るか確認する。座標とか色を管理する VRAM のサイズはたいしたことがないのだが、キャラクタ ROM のサイズはそれと比較すると大きくて 1MB …

tile 修正

キャラクタROMのアドレスのMSBがつながってなかった。その関係でおかしくなってた。そんだけ。スプライトの座標とか変なキャラがあるわな...

sprite renderer

NSL

tile の場合は 1chip 分, 8dot 一気にラインバッファへ書き込みが出来るのだが、sprite の場合は 1dot 単位で attribute の color とキャラを書く必要がある。1dot ずつちまちま描画を行っても良いのだが、時間がかかるので1度に 2dot 書き込みを行う実装に…

sprite 実装完了

昨日の状態からキャラクタ ROM とパレット RAM をつないだらわりとうまくいったので、手直しをした。そのあと sprite 単体から tilemap をつけて一通り完了。video を一通り実装したので、今回の目的は達成できたのでおしまい。 sprite 仕様関連 キャラクタ …

sprite 関連

attribute から位置とサイズだけ取って出力してみた。1発とはいかないがわりと少ないリトライ回数で実装できている。attribute ダンプとかキャラクタROM抜き出しツールとかテスト環境のコーディングに時間がかかってる感じ。それが普通だと最近理解し始めた.…

tilemap renderer

NSL

video_tilemap.nsl は結構長いのではしょってはっつける。 module tilemap_renderer{ reg offset_x[9] = 9'd0; reg llayer = 0; //0:tilemap#0 1:tilemap#2 wire scroll_y[3]; reg vram_aa[22]; reg vram_ce; reg lb_latchh; reg flip_x; reg priority[2]; r…

video_main

NSL

video_main モジュールは下記のサブモジュールを管理する、ビデオ処理の中枢である。 video_timing: 座標の生成, 同期信号の生成, ライン内カウンタ tilemap_renderer: VRAM からデータを取得し、ラインバッファへ処理を送る tilemap_linebuffer: tilemap_re…

某ハード互換 HDL を書き始める

主流のプロジェクトをやろうにも迷走してるので、切り換えと息抜きを兼ねてやってみる。なので、今回だけ書いて終わりかもしれない。 main CPU memory map と RAM の配置 memory address assignment - SRAM 00000h-3ffffh CPU ROM SRAM 40000h-43fffh CPU RA…

68000 と Interrupt Acknowledge Cycle

tv80 (Z80) でいくら割り込みをかけても音がなってくれなかったのは M1 と IORQ から発生される Interrupt Acknowledge Cycle を無視していたということが判明してから、その重要性をしった。恥ずかしい。68000 でのその関係性を調査しつつ、 TG68 で調査し…

68020 とメモリのつなぎ方

Twitter で Ki さんが 68000 と PCM 音源を使った CPU ボードを設計するとのことで冗談で 68000 より小さいから 68EC020 にしろといったところ本当に EC020 を検討し始めた。ちゃんと読んでなかった 68020 のつなぎ方の記事を読んでたら自分もおもしろくなっ…

MMC/SDC 関連

ある程度しっかりした文章を作りかけて、放置してしまったので雑多に箇条書きにしてごまかす。SD カードの write コマンド関連: CMD24: WRITE_BLOCK は遅くて実用的ではない CMD25: WRITE_MULTIPLE_BLOCK だけを使う(open-ended)と処理時間は CMD24 とほぼ同…

はません 反省会

837 名前:どうですか解説の名無しさん 投稿日:2012/04/22(日) 20:29:10.49 ID:GuvG4xM6 [29/34] ラスト村田873 名前:どうですか解説の名無しさん 投稿日:2012/04/22(日) 20:30:42.60 id:XReQzQPX 最下位脱出かかってるから覗いてみたが、おまえらケデブ…

うーん

ハードが山を越えたのに、ソフトがやることが多いし、優先度の高い不具合が直らず詰まってしまった...

シフトレジスタのほう

state も表示するようにして、こんな感じにとれるようになった。 word アクセスをすれば 16bit 取ってくるということもできるんだが、メモリウェイトの時間は2倍になるし、74LVX4245 が余分にいるので今回は 8bit アクセス固定にした。いちおうミラーアドレ…

MC68000 read/write cycle

SD カードを SPI モードでつなぐが、シリアルの clock や data を 1bit ずつソフトでやるのは時間がかかるので自動的に 8bit のデータを取れるようにする回路を作った。(以前も作ったので作り直し)シミュレーション上ではうまくいくのにちゃんと動かないので…

キャラクタの回転

8x8 dot の文字を回転する処理を動的にやる場合に必要で、1bit ずつ rotate や and をやりまくってたんだが、書籍「ハッカーのたのしみ」に使えそうなのを見つけたので記載。 begin a = 0b1111_1110 a, b が F の文字のキャラを 32bit ずつ持ったもの。a が…

d16(An) の記述方法

C

bitswap (データバスのビットを不規則に交換する)をソフトでやらせると必然的に命令が大量のものになり、10MHz の CPU にやらせるのは現実的ではないと判断した。そこでハードウェアで代替処理をやらせる。 moveq #1,%d1 and.l %d2,%d1 moveq #15,%d0 lsl.l …

V1 ColdFire IP core

前述の m68k 関連のソースで ColdFire の記述がでてくるので検索してみた。Cyclone III 限定だが "$0 licensing fee and $0 royalty for the core" で使えるようになっている。 http://www.altera.co.jp/devices/processor/freescale/coldfire-v1/m-fre-cold…

m68k-*-gcc 関連

最新の gcc のクロスコンパイラを作ろうかと思ったが、やはり面倒そうなのであきらめた。2点ほどおもしろそうなところがあったので記載する。 GO google が作ったプログラミング言語。登場時は割と話題に上がったがそれっきりというのが私の認識。gcc のサポ…

ぷち fatfs を PC 上で試してみる

C

組み込み機器用のミドルウェアであるぷち fatfs (以下、pff) は移植性の高いソースとなっており、 fat のディスクイメージを用意すれば PC 上でも簡単に動作を確認することができます。 PC 上で動かす利点 一見遠回りする感がありますが、ターゲット上でのデ…