概要
EZ-FPGAにカメレオンUSB用ロジアナ基板を乗せて、PROMエミュレータとして動作させるものです。
現状は、 カメレオンUSB版PROMエミュレータからの移植ですが、下記の点が異なっています。
 ・動作が安定していて、PBSRAMを最大133MHzで駆動できる。
 ・PBSRAMのクロックを50MHz〜133MHzまで、1MHz単位で変更可能
 ・回路規模は全体の14%で、将来的にさまざまな付加機能を追加可能
 ・CPLDの書き込みなど、セットアップ作業が不要
 ・転送速度が遅い。(EZ-USBのシリアル転送速度の問題)


特徴

 ・カメレオンUSB+ロジアナ基板をそのまま流用可能
 ・64Kbit〜4MBitまでの一般的なDIP28/DIP32ピンのROMに対応
 ・一部のFlashROMにも対応、ただしの通常リード機能のみ
 ・5.0V TTLレベルの他、3.3V LVCMOSレベルにも適合
 ・特定アドレスのアクセスを検出できるアクセストリガ機能
 ・ダウンロード中にターゲットのRESET信号を制御可能
 PBSRAMの動作クロック変更機能による、消費電流制御機能
 ・Win32コンソールプログラム

 ・エミュレーション動作中のリアルタイムダウンロード不可
 ・単体バックアップ機能無し

将来的に追加可能な機能としては
 ・エミュレーション中のリアルタイムダウンロード
 ・内蔵BlockRAMを使用した、アクセスヒストリー機能
 ・LowPinCount(LPC)バス FlashROMのサポート
 ・FlashROMの書き込み/イレース動作のエミュレーション
 ・トリガーバンク切り替え機能による、CPU向け疑似ハードウェアブレークポイント機能
などがあります。


ダウンロード

DIP28/32用プローブ回路図 ※「表面コネクタ仕様(標準)」に適応
Ver1.00 プログラムバイナリ
Ver1.00 プログラム/FPGAデザインソース


使い方

1.EZ-FPGAとPBSAM基板、PBSAM基板とプローブ、プローブとターゲットを接続します。
2.EZ-FPGAとMINI-EZUSBを接続してPCのUSBポートに接続します。
3.ezfrome.exeをWindowsのコマンドプロンプトから実行して、データをダウンロードします。

形式:ezfrome.exe {オプション...} [ファイル名]

[ファイル名]:転送するROMデータ、バイナリ形式
{オプション}  -r[ROMタイプ] = ROMタイプ設定
  2764,27128,27256,27512,27010,27020,27040,29040 から選択
 -a = すべてのROMエリアを書き込む(省略時はファイル長にあわせる)
 -p[PADコード] = PADコードを16進数で指定(省略時 0ffH)
 -ts[アドレス] = シングルトリガ、アドレス設定
 -tp[アドレス] = パルストリガ、アドレス設定
 -tc[アドレス] = シングルトリガクリア
 -s[on][off] = リセット制御、'L','H','Z'のいずれかで指定
 -c[cljMHz] = PBSRAM駆動周波数、50〜133の値で指定
 -w = 終了時に'HIT ANY KEY'の表示とキー入力待ちをする

※必要に応じてショートカットを作成すると便利です。
 ・ezfrome.exeをデスクトップ等に右ドラッグ&ドロップで、「ショートカットを作成」します。
 ・ショートカットを右クリックして「プロパティ」を開き、リンク先を編集します。

 例1:ダブルクリックで29EE020の固定ファイルをダウンロード/実行
  リンク先:[ディレクトリパス]\ezfrome.exe -w -r27020 rom_data.bin
 例2:ROMファイルのドラッグ&ドロップで27C256の任意ファイルをダウンロード/実行
  リンク先:[ディレクトリパス]\ezfrome.exe -w -r27256 %1

※ROMデータのHEX-BIN変換等が必要な場合は、バッチファイルを使うと自動化ができるでしょう。

4.ターゲットの電源を入れる。


サポートROM

DIP28またはDIP32ピンで、よく使われている一般的な物に対応しています。

対応ROM一覧
ROM名形状容量説明
27C64DIP2864KBit27C128からA13を削除したタイプ
27C128DIP28128KBit27C256からA14を削除したタイプ
27C256DIP28256KBit古くからごく一般的に使われているもの
27C512DIP28512KBit1pinがA15で、他が27C256と同じタイプ
27C010/29F010DIP321MBit27C512をDIP32に延長した感じ,A16=2pin,(WE=31pin)
27C020/29F020DIP322MBit27C010/29F010にA17を追加したもの、A17=30pin
27C040DIP324MBit27C020にA18を追加したもの、A18=31pin
29F040DIP284MBit29F020にA18を追加したもの、A18=1pin

・PROM,FlashROMともに書き込み動作には未対応です。
 特に27Cxxxシリーズや28Fxxxシリーズでは書き込み厳禁です。+12Vが印可されカメレオンUSBが壊れます
・FlashROMは、デバイスIDの読み込み等も未対応です。
・1Mbitはピン配置の違う物(マスクROMとコンパチ)がたまにあるので特に注意
・信号レベルは3.3V LVCMOレベルですが、5.0V TTLレベルにも適合します。
・ROMのVCC端子電圧がLレベルの時は、データ出力が禁止されます。


アクセスタイム、仕様

アドレス確定−データ出力:6クロック+15ns程度 (60ns@133MHz,75ns@100MHz,135ns@50MHz)
CEアサート−データ出力:10ns程度
OEアサート−データ出力:10ns程度

アクセストリガー感度:2xクロック
トリガポイント位置遅延:3xクロック + α
トリガパルス最小幅:1xクロック

※PBSRAMの駆動周波数により、アクセス速度等は変化します。

 アドレス確定に対する最大アクセス時間は、アドレスSetupTime+サンプリングディレイ1クロック+メモリアクセス3クロック+出力遅延となります。
 CEとOEに対するアクセス時間は3ステート制御の論理ゲートだけです。

 アクセストリガーの検出は、2サンプルのコンペアを取っています。出力信号は、さらに1クロック後にラッチ出力されます。


消費電流

約275mA @100MHz
約353mA @133MHz

いづれも、MINI-EZUSBを除いた、EZ-FPGA+4MBit PBSRAMの常温での実測値

※PBSRAMの駆動周波数やターゲットのターミネート回路により消費電流は変動します。

プローブ回路の説明

 基本的には32本のプローブ用信号にROMのピンを繋ぐだけですが、EZ-FPGAの電源がOFFの時にFPGAのピンに電圧が印可されると、FPGAが壊れる危険性があります。
 そこで、直列に抵抗を入れることで電流制限を行っています。
 使用方法を絶対間違わなければ抵抗を省略できますが、面倒でも抵抗の挿入を強くお勧めします。

 VPPになる端子にはプログラム時に+12.5V等が印可されるため、抵抗が入っていてもかなり危険です。そこでツェナーダイオードで端子電圧が5.1V以上にならないように保護しています。(ただしVPP=12Vを加えて良いわけではない)
 ターゲットに書き込み機能がなければ、VPP保護は不要でしょう。

 プローブとヘッダの方向が逆になっていますが、これはDPI32の16ピンをGNDに落とす必要があることと、DIP28の時にGNDピンを共有するためこの方向にしてあります。
 ICソケットの16,17pin側にはみ出した部分をプローブ用コネクタの1ピン(GND)にあわせるようにします。これでDIP32の17ピンがPROBE0,16ピンがPROBE1と全ピンが順番につながります。※裏だしの場合
 27C512以下のDIP28で使用する場合、DIP32の1,2,31,32ピンを余らせるようにして、DIP28ソケットを装着することで対応可能です。

 作成したPROMプローブは、40芯のキーピンのないIDEケーブルでカメレオンUSBロジアナのプローブ用コネクタに接続します。※EIDE用80芯ケーブルも使えません


EZ-FPGA制御仕様

 JTAG_MEMのアドレス空間に、エミュレーションRAMとコントロールレジスタをマップしています。
 00000000H-03FFFFFFHはエミュレーションRAMに直結で、EMUビット=0の時にリード/ライトが可能です。書き込みデータは一度ラッチされ、DWORD単位で書き込みます。
 40000000H-07FFFFFFHには、コントロールレジスタがマップされています。

書き込みレジスター(FWR=L)
JA(アドレス)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0内容
40000001hA7A6A5A4A3A2------トリガアドレス
40000002hA15A14A13A12A11A10A9A8トリガアドレス
40000003h---------------A18A17A16トリガアドレス
40000005hP7P6P5P4P3P2P1P0PLL分周費-1(周波数)
40000006hEMURSERSLTPM------------モード設定
40000007h---F18R18R17R16R15R14R13ROM選択、注1

注1:R13〜R18,F18でアドレスの有効/無効を設定することでROMを選択する

読み込みレジスター(FRD=L)
JA(アドレス)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0内容
40000000hRD7RD6RD5RD4RD3RD2RD1RD0ヒストリデータリード(未実装)
40000001hA7A6A5A4A3A2------トリガアドレス
40000002hA15A14A13A12A11A10A9A8トリガアドレス
40000003h---------------A18A17A16トリガアドレス
40000004h'0''0''0''0'DLLPLLVCCTRGステータス
4000000ch'0''1''0''1''0''0''1''0'CPLDチェックコード'R'
4000000dh'0''1''0''0''0''1''0''1'CPLDチェックコード'E'
4000000eh'0''1''0''0''0''1''1''0'CPLDチェックコード'F'
4000000fh'0''0''0''1''0''0''0''0'Version 10h


ソフトウェアの仕様

 EZ-FPGAライブラリを使用しています。
 FPGAコンフィグ前にチェックコードをアクセスして、すでに起動している時には再コンフィグしないようにしています。
 FPGAコンフィグ後の制御は、すべてJTAG_MEMで行っています。

動作確認

・FPGA-PACMAN (27020)
・Xeltek SUPERPRO/LX (Universal Writer)
 SST 29EE2020 (27020)
 ※ユニバーサル/ROMライタによる動作確認は、危険なのでお勧めしません。
・秋月H8ボード(シーエー様にてBeta版をご使用)


DIP28/DIP32対応PROMプローブの制作例

0.回路図を良く確認します。
  回路、部品構成、大きさ、製作順番などを頭のなかでしっかり組み立てます。
  特に、プローブ部分は小さくまとめないと、ターゲットの部品と干渉を起こすことがあります。

1.32ピンのヘッダーピンを、適当にカットした基板に取り付けます。

※秋月C基板を、Pカッターなどで横に切断するとちょうど良いサイズです。

 ヘッダピンの3ピンと、DIP32の16ピンが合う位置にヘッダピンをマウントします。
※RESETやTRIGGERを使用する場合やサイズが気にならない方は、IDE等で使われている逆ざし防止機能つきの40ピンボックスヘッダもお勧めです。

2.保護抵抗とツェナーダイオードを基板に取り付けて半田付けします。

 抵抗の取り付け位置は、ケーブル用コネクタの干渉に注意します。
 チップ抵抗を使うと見た目も綺麗ですっきりすると思います。私はオシロやロジアナのプローブでつまみたかったのでリードタイプで作りました。
※ツェナーダイオードとヘッダピンの配線も行います。(写真は配線前)
※VPPプログラム電圧保護が不要なら、ツェナーダイオードは省略できます。

4.32ピンのピンソケットを基板に取り付け半田付けします。

※ここでは秋月電子通商のDIP40のピンを切断して使用しています。
※ICソケットを使用する場合、丸ピンではターゲットのICソケットを痛めることがあるので、平ピンの方が適しています。

5.完成です。IDE用40芯ケーブルでPB-SRAMボードと接続します。