root = 電子工作 load 電子工作 load 電子工作/XC9572XLと8U245AMで作るUSBシリアルIO load 電子工作/CPUを設計してみよう load 電子工作/XC9572XLで作るGBAのMMCカセット load 電子工作/ボード設計 load 電子工作/3.3V_S232C load 電子工作/メモ load 電子工作/FPGAで何をしようか load 電子工作/bluetooth load 電子工作/XC9572XLで作るROMライタ can't load 電子工作/XC9572と8U245AMで作るシリアルIO can't load 電子工作/XC9572で作るROMライタ can't load 電子工作/論理回路入門 load 電子工作/USBN9603 can't load 電子工作/おもいついたこと ref BlueTooth.html ref 電子工作/論理回路入門.html ref ComLink.html ref 電子工作/XC9572と8U245AMで作るシリアルIO.html ref 電子工作/おもいついたこと.html ref BlueTest.html ref 電子工作/CPUを設計してみよう.html ref 電子工作/XC9572で作るROMライタ.html ref ゲームボーイアドバンス.html ref 電子工作/XC9572XLで作るGBAのMMCカセット.html ref 電子工作/3.3V_S232C.html ref 電子工作/メモ.html ref NP-BBRsx.html ref SuzTiki:不定期にっき.html ref カシオペアEXX.html ref 電子工作/XC9572XLと8U245AMで作るUSBシリアルIO.html ref 電子工作/FPGAで何をしようか.html ref RquestType.html ref PocketCamera.html ref SuzTiki:電子工作.html ref RequestType.html ref PocketPostPet.html ref 電子工作/XC9572XLで作るROMライタ.html ref 電子工作/USBN9603.html ref 電子工作/ボード設計.html ref 電子工作/bluetooth.html 300 Fri Jul 12 20:19:28 JST 2002 電子工作.html SuzTiki:不定期にっき


近いうちに作りたいもののリスト ( 2002/04/05 記)

L-Router 復活の呪文

フラッシュメモリも500円で売ってくれるのか .. そろそろ注文しなくては。

4/24 よおくみたら、L-Board の M27V160 と ピン接続は
互換性があった....

  o 側面に 余白があるが、ここは 削らないといけないかも。
  o L-Board にうまく乗っからなければ、... 上を切っちゃう?
     -- そんなことしなくとも 40pin しかつかっていないから、
         40 pin の IC ソケットを かまして浮かせば良さそう。

                                        Morphy
        M27V160                         ROM ボード
        (42pin)                         (48pin)

                                      NC         ~RESET
                                      NC          ~WE
                               RDY/~BUSY          NC
    A18          A19              A18/NC          A19/NC
    A17          A8                  A17          A8
     A7          A9                   A7          A9
     A6          A10                  A6          A10
     A5          A11                  A5          A11
     A4          A12                  A4          A12
     A3          A13                  A3          A13
     A2          A14                  A2          A14
     A1          A15                  A1          A15
     A0          A16                  A0          A16
     ~E          ~BYTEVpp            ~CE          ~BYTE   
    Vss          Vss                 Vss          Vss 
     ~G          Q15A-1              ~OE          DQ15/A-1
     Q0          Q7                  DQ0          DQ7
     Q8          Q14                 DQ8          DQ14 
     Q1          Q6                  DQ1          DQ6
     Q9          Q13                 DQ9          DQ13
     Q2          Q5                  DQ2          DQ5
    Q10          Q12                DQ10          DQ12
     Q3          Q4                  DQ3          DQ4
    Q11          Vcc                DQ11          Vcc


その他 気になるもの


02/07/03

近いうちに作りたいものがだいぶハッキリしてきた。

だいたいこのあたり。それぞれは一応関連しあっている。

Flush ROM ボード は、L-Router のソケットにはいるやつで、 L-Router の復活に必要。

そのための ROM ライタは、手に入れたが まだ動いていない。それは 動かすつもりだけども、自分でも作ってみたい。 ただし、CPLD の書き込み や バウンダリスキャン を やってみるというのが目的で、それをする題材として 選んだ。 また、SPI つかってのデバイス(MMC) 制御とかも 意識している。

で、GBA 用のカセットは、それとは別に作ってみたいわけだが、 CPLD にある程度慣れないと いけないし、部分的な実験ができる環境を先に 作った方がよい...ということで、ROM ライタと関連している。

USB JTAG,SPI ボードは、道具としての側面が大きいが、 CPLD で ステートマシンを動かす練習でもある。 そしてその練習は、その後のスパルタンII につながっていくはず。

... でもまあ、実のところ CAD で基板設計してオリジナル基板を作りたい というだけかもしれない。設計するのは好きなんだが、手配線だいきらいだし...

554 Fri Jul 05 13:10:39 JST 2002 電子工作/XC9572XLと8U245AMで作るUSBシリアルIO.html SuzTiki:電子工作

FTDI FT8U245AM でUSBを使ったシリアルI/O の実装を考える。

目標機能 6Mhz のクロックで JTAG または SPI を制御できるもの。

チップ: XC9572(XL) と FTDI FT8U245AM

FTDI 8U245AMは、どんなチップかというと、ホストからは USB RS232C として見えるが、 デバイス側からは、パラレルインターフェイスに見える USB コントローラ。 高速な転送 1MB/sec が可能。

こんな感じで デバイスとデータをやりとりする。 基本的には 姉妹品の FTDI FT8U232AM と同じようなものだが、データの伝送路があるだけで、他の制御信号はない。

プロトコルの制御を考えてやる必要がある が、CPLD で実装した簡単なステートマシンを付けることにより、 高速な転送を生かしたモノが作れそうだ。


概要

USB で、SPI/JTAG のような 3線+αの デバイスを制御して やろうというもの。普通の人には全く役にたたない。(たぶん) SPI のインターフェイスをもったデバイスは、いろいろあって、 MMC などもそれに含まれる。JTAG は、FPGA/CPLD プログラミングには 必要なインターフェイス。スパルタンII の XC2S100 とかは 1Mbit クラスの 初期化データを JTAG を通して送り込まないといけない。

ポイントは、制御をマイクロコントローラを介さずに CPLD で作った ステートマシンを使うことで、高速な通信ができること。

USB を使う利点としては、高速 以外にもある。 この装置と PC 間は USB なので 信号の劣化がない。 デバイスとをつなぐ線だけが問題なので、その線をみじかくしてやれば、 エラーが起こる率を減らせるのもポイント。

ステートマシンを作るには、 状態を定義して、どのような条件で 別の状態に 遷移するかを 定義していく。 ソフトでもステートマシンはよくつかうが、ハードでも似たようなもの。

たぶん、VHDL で記述しても C で記述しても上の説明と対応がつくコード になると思う。


プロトコルとステートマシン

      受信(HOST->DEV)

      総バイト数 (1バイト N+2)
      コマンド 5 bit
      最後のデータの有効 bit 数 ( 3bit)
      データ   N バイト

      送信(DEV->HOST)
      総バイト数 (1バイト N+2)
      最後のデータの有効 bit 数 ( 3bit)
      コマンド 5bit
      データ   N バイト

こんな感じにする。送信:受信は 1:1 に対応するが、必ずしも 1パケット毎に 同期を取る必要はない。

基本的なシーケンスは、

     1 バイト受信して転送数カウンタに入れる。
         転送数カウンタの内容を1バイト送信する。(転送数カウンタ--)
     1 バイト受信してコマンドレジスタ に入れる。
         コマンドレジスタの内容を1バイト送信する。(転送数カウンタ--)

     転送数カウンタの数だけ 次の動作をくり返す
        1 バイト受信して シフトレジスタに入れる。
        CLK を出力しながら、8 ビット分シフトする。
             ( 最後 (=1) の場合は 有効bit数分)
        入力した シフトレジスタの内容を 1バイト送信する。(転送カウンタ--)

     最初にもどる


ステートマシンの設計 その1

内部データ  計 32 bit
      コマンドレジスタ 8 bit
       転送数カウンタ 8bit
       シフトレジスタ 8bit
       シフト数カウンタ 3bit
       シリアル出力ラッチ 1bit
       RXF# ラッチ
       TXF# ラッチ

        状態 :
        転送先 DIR 2 bit
        受信/送信
        転送/他の動作

もうちょっと状態を詰める。

1バイト受信 して DIR に入れる。DIR は3種類
        0: 転送数カウンタ
        1: コマンドレジスタ 
        2: シフトレジスタ


                       _______      ______      _______     ______
  o CLK          |_____|      |_____|     |_____|     |_____|     |
  o RXE# ラッチ        ↑           ↑          ↑          ↑
                
  o ラッチしておいたRXE# が 0なら

             ____       _____
  o RD#          |_____|  
                              

  o 取りこみ           ↑

  o 次の状態に行く。

DIR を 1バイト送信。 DIR は3種類
        0: 転送数カウンタ
        1: コマンドレジスタ 
        2: シフトレジスタ


                       _______      ______      _______     ______
  o CLK          |_____|      |_____|     |_____|     |_____|     |
  o TXE# ラッチ        ↑           ↑          ↑          ↑
                
  o ラッチしたTXE# が 0なら
  o 送信元のTriState ゲート

          ________            ______________
                  |           |
                  +-----------+


  o WR             +-----+
           ________|     |________
                             
  o 転送カウンタ--       ↑

  o 次の状態に行く。

CLK を出力しながら、8 ビット分シフトする。

ロード処理
                       _______ 
  o CLK          |_____|      |

                       ↑
  o LOAD
                 +------------+
             ____|            |______
                              
  o シフト数カウンタ にロード
        転送数カウンタ == 1 かつ コマンドレジスタの 有効bit数 != 0 なら
        コマンドレジスタの 有効bit数
        そうでないなら 8
   o    転送数カウンタ == 0 なら 最初に戻る


シリアル入出力

                       _______
  o CLK          |_____|      |


   oシフト数カウンタ --
                       ↑   


   oシフト数カウンタ値 0 チェック (0 なら次)
                    
                       ↑       

   # カウンター -- は ↑後変化するから、0 チェックは、↑前の値

            _____      ______ 
  o CLKOUT       |_____|     

   o シリアル出力ラッチ 

                ↑

   o シフト(入力) 
                       ↑
                               


  状態遷移

 #   DIR     送信/受信#   転送#/他動作                遷移
 0   00       0            0                          変わらず/NEXT
 1   00       1            0                          変わらず/NEXT
 2   01       0            0                          変わらず/NEXT
 3   01       1            0                          変わらず/NEXT
 4a  10       0            1 シフトレジスタ数 ロード  状態0/NEXT
 4b  10       0            0                          変わらず/NEXT
 5a  10       1            1  シリアル入出力          変わらず/NEXT
 5b  10       1            0                          変わらず/状態4a 


状態遷移を整理するとこんな感じ。NOP 入れて 12 状態にすると、

   DIR 送受信 転送/他動作 

となって、きれいになる。
で、状態遷移は 同じか +1 するか jump かになる。
これだけきれいだと、ROM 作って 表現しても、ロジックの組み合わせで表現しても
論理の量はあんまり変わらないかも知れない。


                       _______      ______      _______     ______
  o CLK          |_____|      |_____|     |_____|     |_____|     |
  o 主な動作          ↑           ↑          ↑          ↑
  o 遷移         ↑            ↑          ↑          ↑
  o TXF#/TXF#     |             |           |           |
     のラッチ
  o 送受信の
      切り替え    |            |          |            |           |


シリアル入出力

               ________      ____
   o CLKOUT            |_____|     

   o シリアル出力ラッチ 

                      ↑

   o シフト(入力) 
                             ↑
                               

コマンドレジスタフォーマット

     7 \\チャネル
     6 /
     5 出力1
     4 出力2
     3 出力3
     2 -+-
     1  |  最後のデータの有効 bit 数 (0 のときは 8)
     0 -+-

チャネルは  CLK/DI/DO の切り替え、外部2ch に加えて 内部入出力 or 設定も作る。
のこり はダイレクトに ON/OFF できることにする。

うまくいけば、32bit ぐらい余裕がある。これで、内部に SPI デバイスを
作る。16bit を状態そのものをあらわすデータに使い、それを設定するための
シフトレジスタとして 16bit を使う。ちなみに 8 の倍数である必要はない。

内部用としては、入力 CLOCK の 分周切り替えとか。6Mhz では厳しい場合
4bit ぐらい使って 1/16 にするとか。たぶんタイミングとか気にしなくて良いはず。
なぜなら 6Mhz のクロックよりこまかくなることがないから。


送信データなしモードも作りたいなぁ。これは HOST から送るだけにして
速度をかせぎたいとき有用だから。( 全部双方向だと 1/2 のスループット
になってしまう。) 

じゃぁ、受信データなしモードも必要か。どっちにしても、シーケンスは同じで、
実際に WR/RD# を変化させるところに条件を入れれば良いのだろう。

ただ、クロックの制限で 6Mbps 以上は出せないから... こんなの無駄かも?

後重要なのは、CLK の 正論理/負論理 切り替え。
それ以外は HOSTのソフト でどうにでもできるが、これだけはサポートしないと。
困ったときにどうにもならない。
                           
JTAG,SPI は、__↑↓__  で、動くようだ。MMC なんかだと
___   ___  みたいだ。
   ↓↑


ステートマシンの設計 その2

状態はかならず クロックと同期して 変わるように設計できた ( とおもう。)

                              ___________          __________
                    |         |         ↓         |         ↓
クロック            -----------          -----------          ______

                   |                     |                    |
                   | 状態 A              |   次の状態         |

制御はクロックの立ち下がり(↓) で状態を遷移させる。
  次の状態  = f(今の状態)
で済むなら話は簡単だが、状態遷移には、他の条件が はいってくる。 その他の条件が いつ確定するかというと、状態 A になる直前に 決まっている ように (設計できた)

まず あげられるのは、 送信できるか/受信できるかという信号線 TXF#/RXF# の状態。

外から来る信号なので、状態の変化は、クロックとは非同期なわけだが、 送信したから、送信できなくなるのであり、受信したから(空になって) 受信できないという 状態になる。依存関係があって、突然 送受信できなくなる ことはない。そういうわけなので、状態が変わるときの 値を おぼえておいて (ラッチして) 今の状態で 送信/受信できるかどうかを判断する。

あと、送信データが来るかどうかの判断。 シフトレジスタ数 と名前付けたレジスタに 何が入っているかで判断できる。 何が入っているが確定するのは、値を変更した次の状態に入ってからで、 どの状態に遷移するかの 判断には使えない。そういうわけで、 シフトレジスタ数 ロード という状態を独立に作っている。

さてそうやっていって整理したら


  状態遷移

 #   DIR     送信/受信#   転送#/他動作                遷移
 0   00       0            0                          変わらず/NEXT
 1   00       1            0                          変わらず/NEXT
 2   01       0            0                          変わらず/NEXT
 3   01       1            0                          変わらず/NEXT
 4a  10       0            1 シフトレジスタ数 ロード  状態0/NEXT
 4b  10       0            0                          変わらず/NEXT
 5a  10       1            1  シリアル入出力          変わらず/NEXT
 5b  10       1            0                          変わらず/状態4a 

こんな風になった。... よおく見ると 2進数の値に近いように なっている。じゃぁ完全に 2進数にしたらどうか というのが ひとつの案になる。


  状態遷移

 #   DIR     送信/受信#   転送/他動作#                 遷移
 0   00       0            0                          NEXT(NOP)
 1   00       0            1                          変わらず/NEXT
 2   00       1            0                          NEXT(NOP)
 3   00       1            1                          変わらず/NEXT
 4   01       0            0                          NEXT(NOP)
 5   01       0            1                          変わらず/NEXT
 6   01       1            0                          NEXT(NOP)
 7   01       1            1                          変わらず/NEXT
 8   10       0            0 シフトレジスタ数 ロード  状態0/NEXT
 9   10       0            1                          変わらず/NEXT
10   10       1            0  シリアル入出力          変わらず/NEXT
11   10       1            1                          変わらず/状態8

4つも状態が入ってしまって遅くなったわけだが、状態の値そのものが 意味を持つから、変換のための論理がなくなる。 しかも だいたいの状態変化は、0 か +1 である。

こうなると、バイナリカウンタで シーケンスを組める。 バイナリカウンタの動作は、なにもしないか、+1 するか、 決まった値をロードするか。( 0 にするか )。 例外的なのは、

だけだから、それを 0 にする、値をロードするという機能に割り当ててもよい。

また、N ビットの ROM に何をするかを割り当てて 状態から引いてきた ROM の値 で動作をきめてもよい。

 #   DIR  送信    転送   シフト     シリアル
          /受信#        レジスタ数 入出力      ジャンプ先(3bit)
                         ロード                
 0   00    0        1     0          0          000           
 1   00    1        1     0          0          000
 2   01    0        1     0          0          000
 3   01    1        1     0          0          000
 4   10    0        0     1          0          000 (状態0)
 5   10    0        1     0          0          000 
 6   10    1        0     0          1          000
 7   10    1        1     0          0          100 (状態4)

こんな感じで、アドレス 3 bit データ 9bit の テーブルとしても表現できる。 (テーブルから引くなら状態が整然としていても得しないので、 NOP は削る。)

なおここで書いた ジャンプ先は、なにもしない, +1 , 値をロードする という3つの撰択枝のうち 値をロードするときの 値。


FT8U245AM 関係

このチップは外づけの回路がちょっと多く 少し面倒らしい。 実をいうと リセットまわりで どういう回路を組めばよいか良く分からない。

それとは別にひとつみつけた。

リセット回路系は 三者全部ばらばら。なんとなく、リセット回路を使った のがよさそうに思える。ちなみに 千石電商では、ミツミのリセット回路 PST600C を扱っている。これは 4.5V でリセットがかかるもの? MCP100-4.5 と同じようなものなのか? IPI は、MPC100-450 というのを 扱っていた 。

それととっても気になっているのは、ソフトウェア側からリセットできないのか? という点。

普通 ドライバがなんかおかしいと 認識したら、チップに対してリセット かけたりするわけだが、それができるのかどうか。

FT8U245AM の信号をみると そんなものはないようにも見える。

もしなければ、どうしよう。手動リセット回路を付ける?

633 Mon Jun 24 00:24:18 JST 2002 電子工作/CPUを設計してみよう.html SuzTiki:電子工作

秋月C基板でスパルタン2 のページ見ていたら、基板だけじゃなくて、部品も分けてくれるらしい。 気になる値段は、XC2S50 付きで 15000 円ぐらい。XCS30 付きで 12000 円ぐらい。

それぐらいなら、買えるかもしれない。

それはともかく、スパルタンII とは、そして開発キットはどのようなもので 私の手におえるのだろうか?

まずは、学生時代に設計した 簡単なCPU を再現してみて、考えてみよう。

WebPACK_ICEの使い方 という 紹介ページをみてみると、今は 開発用のソフト WebPACK ISE というのが あってただで手にはいるらしい。そして回路図エディタも使える。

VHDL なんて全然知らないからなぁ。


まずは、Arithmetic logic unit(ALU) の回路を入力してみる。

データシートの回路図そのままだから、時間はかかったものの 入力できた。

コンパイル?が通った。こいつから VHDL も生成されたっぽい。

これを2つつかって、アキュームレータを作らないといけない。 それも 回路図エディタで作りたいわけだが、どうするのか?

ファイルは、全部 Text ファイルみたい。いいねぇ。


8bit ALU を作ってみよう。

さて 74181 ができたので、2 つくっつけてみる。 それは簡単なのだが、問題がでた。他の部品は BUS を使っている。 bus を扱うのはどうしたらいいのか?

散々悩んだあげく、なんとかできた。


ROM はどうするの?

回路図エディタで ROM が 入力できるような気がしない。 VHDL でなんとかしないといけなさそう。

正弦波発信器というページで、 どうしたら良いかわかった。

でも このページの 6ビット用正弦波ジェネレータ のある、小容量の ROM でも 結構ロジックを使う。 どうも、ロジックで ROM を構成するやりかたのようだ。

じゃあ RAM で初期値付きにできると良いのかとか思って、 RAM の VHDL をさがしてみる...

似非VDP_バージョン履歴 というページの ram.vhd を拝借してテストしてみる。

RAM の初期値付きはダメだった。

とりあえず先に進むことにする。


CPU の回路のレイアウト

いちおう部品が揃ったので、レイアウトしてみる。

うーん。これベースに、CLOCK と 状態を入れていけばできてしまうのか? ほんとうかなぁ....

ちなみに、これができて動いたとしても、とてもまともな CPU とは言えない。 できるだけ簡単に作るという目的で作ったもので、ものすごくタコなのである。

とか...

-----

設計メモ


ほんとうに 実際に動かす必要があるんだろうか?

動作確認するのに、本物の RAM と ROM を付けるのはたいへんだから、 それも組み込んでしまう。... そうすると、シミュレータだけで 動作確認できて しまいそう。実際に デバイス買って動かすまでもないのか...

いやいや、動くところみたいし.... でもその先に 大規模 FPGA で なにかをしたいというものもないなぁ。

どうも 大規模 FPGA で 実現したいというものが思いつかない。

考えてみれば当然かもしれない。FPGA で作ることができる モノで有用なもの は、専用のチップになって世の中に出ている。世の中に出ていないもので 有用なものを設計できる能力があるなら ハードウェアのプロになっている。

だから、過去のものを再現するとか、実験してみる... そういった目的でしか 使えるような気がしない。

エレキットとか 電子ブロックの 21世紀版かつ大人用と割り切った方が よさそうだ。

そういう 大規模 FPGA にくらべて CPLD は便利なものみたい。 単価が安いし、 インターフェイスの部分に使うと配線が楽になったり、部品を減らせたりする。 そういう使いかただと、複雑な論理回路を扱うよりは、スイッチ的なもの が主体になるわけだ。

ただ、オリジナルななにかを作る場合

という技術は必要。私はどちらも 持ち合わせていない。

ハンダづけは、L-Router 復活のコンテキストで経験するよていだが、 いずれは、基板製作にも手を出してみたい。

基板製作は、EAGLE という CAD ソフト (Linux 版アリ、free の制限版もある) で作って ブルガリアの OLIMEX に発注するというのが、人気があるらしい。

このパターンで製作できるのが、100mm x 80mm の両面基板 (レジスト/シルク付き)。 2 週間ぐらいで届き 、コストは (送料込みで) $33 (US) ぐらいらしい。

参考:

EAGLE の練習をしてみた。題材は Flush ROM ボード。L-Router のソケットに あう大きさに分割できるようなモノを考えてみた。

簡単なアートワークぐらいはできるようになったが... これを 1 枚の 基板の 上にならべて配置して 切ってもらう .. ような指定をどうやってするんだろうか?

欲しいものとは、いまのところ。

かなぁ。

02/06/23

ちょっと、定規をつかって(= 精度が悪い) GBA , GBC の基板を計ってみる。

どんな感じになるか EAGLE で 書いてみた。

ちょっと部品をおいてみた。左は、48pin の Flush ROM 右は、64 pin の CPLD を想定。自作基板だけ入れ換えるという作戦だと Flush カセットを 作るのがせいいっぱいという感じ。

GBC のカセットは、GBA と同じように カセットに 切り欠きをいれれば、GBA 用のカセットになりそうだが、 この基板はどんな感じだろう。

おいてみた部品の 左上は、SD/MMC スロットのだいたいのサイズ。概ね 横 28mm x 縦 29mm 、(端子含まず)。

VQ64 のサイズの CPLD を想定して置いてみたが、GBA サイズでも 100 pin がはいる。

なんとなく、秋月 C 基板 と 208 pin の PQ208 パッケージを置いてみた。

うーん。でかいなぁ。208 pin の chip は、全結線なぞしなければ、 秋月 C 基板 に載るかも知れない。 ... 何をしたいかはっきりさせないと 載ったところで 意味なぞないが...


Xilinx の FPGA/CPLD の値段がどれぐらいのものか さっぱりわからなかった のだが http://www.plis.ru/price.html というページをみつけた。

このページ見てもよくわからないのだが... 相対的な値段は なんとなく ...

なるほど... -7 なんて付くのは、-10 より何割も高いわけだ。

それはともかく スパルタン II .. というのは どれぐらい?

え? これぐらいの値段 なのか。そういえば、XC2S200 の コンフィグ用 ROM が やたら高く FPGA と同じぐらいするなんて既述を見たことがある。

XC2S200-6PQ208C がやたら欲しくなってきてしまった。 しかし これを手に入れたところで... どうにもならない。

このページで作ろうとしている CPU なんて、FPGA ならなんでもよさそうだし... とりあえずの目的もないぞ。

CPU は別として、いまのところ 妄想以外は思いつかない。

CPU だってまともなものは妄想だが... 妄想系としては

161 Fri Jul 12 12:52:30 JST 2002 電子工作/XC9572XLで作るGBAのMMCカセット.html SuzTiki:電子工作

ゲームボーイアドバンスの カセットを作ってみたい。 でも 単なる Flush ROM のカセットでは おもしろくない。

ではどういうものを作りたいかというと

CPLD でいったい何ができるのか?という可能性を考えていたら これに行きあたった。 本当にこんなものが出来るかどうかは分からない。 ただ可能性はあるようだ。( → ゲームボーイアドバンス を参照)

さて、これを本当に作ろうとしたときの 大きな障害は何かというと デバッグできないこと。デバッグのコードを入れる余裕はない。 では、他の Flush ROM カセットを使うのか?というと MMC インターフェイス を持っていないから難しい。

というわけで、まずは、開発用に 大きめのカセットを作り Flush ROM も 載せたものを作りたい。

ただし、それに着手するのは随分後になる。まずは、

を作って CPLD および FLush ROM を扱う ノウハウを溜めて、実際にボードを 設計する手順になる。


GBA のカセットに関する考察

GBA カセットを空けて基板のサイズを計ると 横幅 5.0 cm コネクタを含む 縦幅 3.0cm (コネクタ部 8-9mm。)

MMC スロット 山一電機 FLS007-30 (サンハヤト の変換基板 CK-16 にも採用されている。)--- サイズ 横幅 30mm ぐらい (耳含む) 縦幅 22.8 mm

MMC スロットは、基板から 1,2 mm はみだせるとすれば、縦幅は OK。 横幅は、30mm だから 中央にあるネジが邪魔で入らない。 (ネジをなんとかできれば OK)

さて、のこりのスペースは? 横 20mm x 縦 20mm ぐらい ここには、配線パターン も必要だし、基板をカセットに固定するための 切り欠きも ある。ネジをずらすとすれば、それもここに入れないといけない。

というわけで、物理的に入りそうなのは、12mm x 12mm の XL9572XL-VQ44 か おなじサイズの XL9572XL-VQ64。XL95144-TQ100だと 16mm x 16mm --- ぎりぎり 入るかも知れないが 無理じゃないかという気もする。

このサイズより大きくて良いなら、撰択枝が急に増える。 開発用のカセットは、GB のサイズ(5cm x 6cm) を使い、Flush ROM も載せる つもり。


7/10 ちょっと考えてみた。

XC9572XL-VQ64 は、52 I/O 。ターゲットでは、MMC インターフェイス 4 I/O。 GBA インターフェイス 28 I/O で 計 32 I/O 必要だった。

Flash をさらに載せたとしても上記 I/O は削るつもりはない。 そうすると 使えるのは、20 I/O 。

どうすれば良いのだろうか。

とりあえず、Flash ROM のデータ線は、GBA と直結する。 で、アドレスは Flash ROM に供給してやらないといけない。 それとは別に 制御用の線も CPLD から供給する必要がある。 制御用の線は、OE#, WR#, RESET# の 3 本とすれば、 供給できるアドレス線は、17 本。16 bit アクセスだから、 使えるメモリは、256K バイトまで。

使用する予定の 29LV400 。これは、4M bit / 512K Byte なので、1/2 しか利用できないことになる。けどまあいい。

さて、ちょっと配線してみたら、うまく配線できない。

CPLD 自体について 順不同でつないでいくのは良いのだが ... ROM に配線するデータバスがうまく配線できない。... たった 16 本なんだが... 主な理由は、pin 番号を合わせようとしたために、配線に制限が出たため。 別に 順不同でも構わないわけなので、書き直すつもり。

位置関係は、たぶんこれで FIX 。 pin 間の接続も 表はこれで FIX。( 線自体は引き直す必要があるけど)

黄色の線は、SIGNAL の接続関係で、位置関係だけで Data と ROM の Data を mapping している。GBA のコネクタの 裏から配線して、 ROM 内に PAD を設けそこで表に出てROM に配線する予定。

ROM 内のエリアに 16 個の PAD ができるわけだ。それはたぶん 2 列で斜め に配置され 左は、最初のパターンと同じように左上からまわりこませる。 右下は そのまま下に伸ばして配線する。... ということは、黄色の 信号線の配置は変わる。最終的に D0-D7 は、一致しているが、D8-D15 は 逆転しているという配線になりそうだ。

1160 Wed Jul 17 01:21:39 JST 2002 電子工作/ボード設計.html SuzTiki:電子工作

EAGLE で デザインして、 OLIMEX で作ってもらうというのを前堤にして 作ったデータ。

オリジナルのデザインってのは、いいねぇ。 実際に作らなくても作ったような気にさえなる。

02/07/12 -- Flash ROM ボードの方は 発注。

02/07/17 -- ROM ライタの方も、発注のメールを出してしまった。


L-Router 向け Flash ROM ボード

モルフィー企画の ROM ボードを買ってみたけども、そのままでは L-Router の ROM ソケットにささらない。削ったりいろいろするのは面倒なの で、デザインしてみた。発注したけども、動くかどうかは作ってみないと わからない。

セールスポイントは、

データ ( 02/07/09 更新 )

コストの目安

7/9 EAGLE の使い方をまったく間違えていたので、書き直し(ver 1.2)。

02/07/10

3-4 週間もかかるのなら、できた順に order かけていこうと考え ROM board を order したいというメールを出してみた。

レイアウトを 考えたら 最大 12 枚入るので、その旨も 書いてみた。

          desirable board layout (6.00  x 3.95 inch)

           +----+----+----+----+----+----+----+----+
           |    |    |    |    |    |    |    |    |
           |    |    |    |    |    |    |    |    |
           |    |    |    |    |    |    |    |    |
           |    |    |    |    |    |    |    |    |
           |    |    |    |    |    |    |    |    |
           |    |    |    |    |    |    |    |    |
           +----+----+----+----+----+----+----+----+
           |                 |                 |
           +-----------------+-----------------+
           |                 |                 |
           +-----------------+-----------------+

返事と MS Word ファイル が来た。

Word ファイルの中味は、FAX 用 order form 。で、ちょっと気になること

02/07/16


電子工作/XC9572XLで作るROMライタあんど 電子工作/XC9572XLと8U245AMで作るUSBシリアルIOの合体ボード

ROM ライタ部の構想

NAXJP というフリーの CPLD 書き込みソフトを知ったので、 それでいろいろ遊んでみたいぞ と思って設計したもの。

---

電子工作/XC9572と8U245AMで作るシリアルIO? と 電子工作/XC9572で作るROMライタ? が合体したボードの構想

大きさは、8cm x 5cm 。OLIMEX に発注したとき 4 枚取れるのが前堤。

使い方は、

の3通りを想定。

ピンの配置

さて、ROM ライタ側のことを考えると、ホストとの通信のために 4 本。 相手ての接続のために 8 本 の I/O 線が必要ということになった。

これで 12 本。全部で 52 本だから ROM 側に使える I/O 線は 40本。

8bit アクセス専用ときめたら、7 本も余ってしまったが、無理につながなくて 良いならそれにこしたことはない。なんどか 配線してみたが、 信号の取り回しがけっこう厳しい。

ところで、D8 - D14 の 7本は、BYTE モード固定なら HI-Z だそうだ。 他のデータ線と共有しつつ、ROM ソケット上に信号を回すこともできる。 ... というわけで 入力用の 4 bit と TCK/TMS/TDI の 3 本 の 合計 7 本を ROM にも出すようにした。(TCK/TMS/TDI を ROM に出しても何の役にも立たない のだが、配線がすっきりする。)

USB B タイプコネクタの形状はわかった。 DC ジャックは、秋月で売っている マル信無線 の MJ-179P の形状がわかった。


02/07/10 発注を前堤に 書き直し。

02/07/11 回路 チェック。

おおむね OK だが、USB 部 CPLD の JTAG 配線が 間違っていた。

チェック内容

JTAG のバグだけ直して、 確実に 4 枚取れるように 基板のサイズをチェックすれば、発注はできそうだ。

修整したもの

サイズチェック

ドリル数チェック

メモ: 部品リスト


   SMD 用 
          0.01 u 
          100K
          470K
          TR 

   http://rswww.co.jp で購入可能。
        抵抗:  MCR10 シリーズ 2012 (2.0mm x 1.2mm)  50個 300円
        トランジスタ:    2SA1576AR (SC59) 10個 70円 とか?
        コンデンサ: 秋月 20個 100円

   SMD or 小さいサイズ

           0.1u
           10
           470
           1K5
           2K2
           4K7 (10K でもいいかも)
           10K
           100K

        SMD は、上記と同じ 50個 300円。
        足つきなら、秋月で  100本 100円
 
  電解コン
           4u7 (不用かも)
           33u (あたり?)

           47u の SMD タイプ 10 個 200-300円 @ rswww


   6MHz セラロック (秋月)
   電源レギュレータ 3.3V TA48M033F (千石)
   XC9572XL-VQ64 x2 (トリプルワン)
   FTDI FT8U245AM  (IPI)
   93C46 (5V 用) オプション?(秋月) 
   USB B type (IPI/秋月) 
   DC コネクタ ジャック (適当 / テスト用)(秋月) 

   PIN ヘッダ 1x10 (CN1 用)
   PIN ヘッダ 1x10 (CN2 用 テスト用)
   PIN ヘッダ 1x5 (CN3 用 USB部 JTAG )
   48 pin DIP ソケット
    8 pin DIP ソケット (93C46 使用時)


改良すべき点

   o 電解コンデンサの SMD 対応 (直径をでかくしておく?)
   o ROM ソケットへの +5V 供給 (NC のところを使う)

   なんかもう面倒だからいいやという気になってきた。
   SMD の電解コンなんかつかわないと思うし、ROM ソケットも
   3.3V 専用と割り切れば良いと思う。

   これももう発注してしまいたい。

02/07/16


メモ: XC9572XL-VQ64 のピン配置


                                                 
                                     V  G  T     
                                     c  N  D     
          g2 2  2  2  2  2  2  4  4  c  D  O  4  4  4  4
          -----------------------------------------------  
         /64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 \\
     2  |  1                                           48 | 4
    g2  |  2                                           47 | 4
 Vccint |  3                                           46 | 4   
     2  |  4                                           45 | 4   
    g2  |  5                                           44 | 4  
     2  |  6                                           43 | 4  
     2  |  7                                           42 | 3  
     1  |  8               XC9572XL-5-VQ64             41 | GND    
     1  |  9                                           40 | 3  
     1  | 10                                           39 | 3  
     1  | 11                                           38 | 3  
     1  | 12                                           37 | Vccint    
     1  | 13                                           36 | 3  
  GND   | 14                                           35 | 3  
    g1  | 15                                           34 | 3  
    g1  | 16                                           33 | 3  
        \\ 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 /
          -----------------------------------------------  
          g1 1  1  1  G  3  1  3  3  V  3  T  T  T  3  3  
                      N              c     D  M  C        
                      D              c     I  S  K        

g:    global pin
1-4 : function block #

TDO , TCK, TDI, TMS : JTAG

Vccint : 3.3V
Vcc(io): 2.5/3.3V


一番ピンを 左上になるように して、信号線を書き入れてみた。 ファンクションブロックは 1-4 まである。あまり気にするつもりはなく、 同じファンクションブロックは 近く、違うファンクションブロックは 遠い ぐらいに考えるつもり。左側の角にある グローバルのピンもあんまり気に するつもりはないが、クロック入力などは、できるならこれを使った方が 良いかも。

メモ その2 FT245AM の ピン配置

          E  R  A  A  X  X  V  D                 
          E  C  V  G  T  T  c  0   
          C  C  C  N  O  I  c      
          S  L  C  D  U  N          
             K        T              
          ------------------------  
         /32 31 30 29 28 27 26 25 \\
EESK    |  1                   24 | D1
EEDATA  |  2                   23 | D2
VCC     |  3                   22 | D3  
RESET#  |  4                   21 | D4  
TEST    |  5     FT245AM       20 | D5 
3V3OUT  |  6                   19 | D6 
USBDP   |  7                   18 | D7 
USBDM   |  8                   17 | GND  
        \\  9 10 11 12 13 14 15 16 /
          ------------------------  
           G E  E  R  V  T  W  R                     
           N E  E  X  C  X  R  D     
           D G  R  F  C  F     #     
             N  E  #     #           
             T  Q                    
             #  #


これで何をしたいか


困っていること

OLIMEX について http://www.paken.org:8080/aaf/eda/olimex.html で 日本語で詳しい説明があるんだが、思うように 設定できていない。

EAGLEをうまく使えていないのだ。 だいたい、CAD など さわったことがないので、誤解していることが多い。

だいたい慣れたら

このあたりちゃんとチェックしないとダメらしい。

Q: ドリル径の設定はどうやるの?

メニューでは、10,12,16,24,32... とでてくる。 設定したいドリル径は、 24(0.6mm), 28(0.7mm) ,35(0.9mm), 39(1.0mm) ... 。

まず、view で mil 単位にする。 コマンドラインを使って

    change drill 130
とすれば、希望のサイズに変更できる。

Q: DRC (デザインルール チェック) って?

OLIMEX では、8mil の デザインルールでも、線の太さが 10 mil Space が 8mil でないといけない。

それをチェックする のが DRC で、OLIMEX で、8mils.dru または 10mils.dru を配布している。

それを使うのは良いのだが、 0.5mm ピッチの IC を扱おうとすれば、ピッチは、19.xx mil。 誤差などを考えると、11 mil の 太さの PAD を 0.5mm 間隔で並べていかないと いけないのではないかという気がする。それはともかくいずれにせよ。 この場合、8mils.dru でチェックすることになる。

さて、IC はライブラリで 描くが、そのとき RECT で 絵を書くのではダメ。 それではシグナルがのるものとして認識してくれないようだ。 ライブラリは作れてしまうのだが、後で DRC するときに困る。 RECT と Wire を重ねると、接続されずに、2 つのものが近づきすぎている というエラーになる。

ではなにを使うかというと SMD 。任意のサイズの SMD を作るには、 コマンドラインで、

   SMD x_width y_width
とする。単位は、view -> grid で指定した単位らしい。

変更する場合は、

  change smd x_width y_width 

XILINX.lbr に付属の VQ64 は、12 mil x 59 mil の SMD パッドを使っている。 これでは、DRC にひっかかるので、11 mil x 59 mil にしないといけない。

それだけではダメだということが、分かった。 SMD のサイズを変更しても、接続してくれない。

どうも、ボードエディタというのは、部品を配置して、その部品間をつないで いく。そういうものらしい。で、まったく部品とつながっていない線は 部品とは接続できない?

少なくともこの手順なら、DRC でエラーにならない ボードができる。

ということは、部品から書き直ししないとダメらしい。

ROM ボードの場合は、部品といっても、48 pin DIP と プルアップ抵抗2つだけ だから、書き直しはそれほど苦でもない。PAD で書いた ROM ソケット全部消し 部品にした 48 pin DIP を置き換え、1本1本 配線を消して書き直す。 ... と書くと大変なようだが、デザインの方が大変なので、デザインをこわさずに 書き直せるのは楽なほう。

それはともかく、EAGLE のユーザインターフェイスは、興味深い。 メニューでも省略した操作できるが、コマンド入力ラインをもっていて、 メニューでできることは全部できる。コマンドラインでパラメータを省略 すると、メニューとか オブジェクトを指すといった GUI でそれを補う。 で、コマンドラインの部分は、スクリプトでも動かせる(ようだ)。 うまく GUI と コマンドラインインターフェイス(CLI) が統合されていて、 慣れれば使いやすいような予感がする。数字を入れれば済むところで、 GUI で撰択したり、アバウト or 感覚的に操作したいのに数字をいれなくては ならない...といったことでうんざりさせられないわけだ。

ただし、メニューだけですべての操作はできない。初心者なら、 なにができるか分からないわけで、戸惑うポイントでもある。


02/07/04

なにを デザインして、OLIMEX に発注するかの 方針が定まった。

まず ROM ボード。これは いうまでもない。

それとともに、FTDI + XC9572XL-VQ64 で作る汎用 I/O ボート と CPLD ROM ライタ を くっつけて 8cm x 5cm に 入れたボードを 設計し発注する。

ふたつのボードは切り離すこともできるようにして、ROM ライタの方は パラレルポート接続も考えておく。

02/07/08

やはり完成形は、

というもので、開発の際に 部品の付け方で

というものを目指すことにした。基板は C 基板サイズよりちょっと大きいが、 十分小さいので、わざわざ 切り離して使えてもメリットがないと判断。

さて、このボードで なにをしたいか/なにができるか 再度考えてみる。 USB インターフェイスだから、お手軽に高速で 作業ができるのは大前提。

この2つは、主目的だが、その他として

これぐらいできれば、とりあえず満足かも。

回路まで変更してアドオンのボードを作れば、ちょっとしたことはできそうだが、 一応想定しているのは、

これ以外に、RAM とクロックが載った ROM サイズ の ボードを作ってみたい。 それで何をするかというと

82 Tue Jun 04 01:46:11 JST 2002 電子工作/3.3V_S232C.html SuzTiki:電子工作

RS232C につないでみたい機器が、やたら多くなってきた。

共通するのは、どれも 3.3V の 信号レベルだということ。 PC につないでみるには、レベルコンバーターを入れないといけない。

... さてどうしよう。

秋月には、SP3232ECP という 3/5 V 両用の チップ (DIP 16pin) が 250 円で売っているようだ。 これ使ってみよう。( あと、SP3222ECT もあるけど、 表面実装 (1cm 四方ぐらいなので こっちは基板を作らないといけない)

まあ、それは いずれやるとして ... 今手持ちとして、E-55 の クレードルを 分解したものがある。( これは、カシオペアと直結できるので、3.3V )
とりあえずこれ使いたいが ... カシオペア用のコネクタを基板から外さないと いけない。

ハンダ付けの練習としてちょっとやってみようかな。


そういえば、ハンダ付けの練習用として、100 円のジャンク基板を 買ってきていたのを思いだした。

ハンダ付けするには、まず外さないといけない。

6/4

なんかむずかしいぞ。

SMDのハンダ付け というページを参考にしてみたんだが ...

ファンのエナメル線では細すぎる? ほんのすこし力をいれただけで切れてしまう。

今回の練習は、チップ抵抗を外すだけに終ってしまった。

2mm ぐらいのやつなんだが、それを外すのも一苦労。特殊な形状のハンダゴテ なぞもっていないから、両端を同時に 熱するのがむずかしい。 片方にハンダを盛っておくと 割りと楽なのは発見したが、それでは 再利用は無理か。チップ抵抗なぞ再利用しようと考えること自体ダメらしいが。

とりあえず次の練習は、ランドに半田を盛る。これぐらいからやってみよう。

395 Mon Jul 15 22:51:05 JST 2002 電子工作/メモ.html SuzTiki:電子工作

2002/7/12

電子工作でもマイクロコントローラ系でない方、 論理回路の方でなにかを作りたいという場合について。

CPLD については、 このページ なんかが分かりやすく解説されています。

この CPLD で なにかを作ってみたいという向きには、 strawberry-linuxCPLDキット なんて良さそうです。

PLD-PGM キットが 2500円。XC95108 ボードキットが 3300円。

こういうので、7セグのLED を光らせるとかして経験をつんでいくのが良いと 思います。XC95108 だと結構いろんなことができると思います。

strawberry-linuxのページで、 CQ 出版の "VHDLによるハードウェア設計入門" が紹介されていますね。

私は、CQ 出版の トランジスタ技術 SPECIAL "初歩のHDL設計学習帳" なんてものを買ってみましたが、ざっと読んで理解したら上の本みてみよう かと思っています。

2002/7/11

ハードにはまったく疎いのでよくわからないんですが、こういうやつのデバッグっつうのは どうやってやるんですか?もしかして目視のみ? --ksr

全く知識ゼロの素人が、USB2.0ベースのコンピュータ間高速通信ボードとか作るのはどれぐらいたいへんでしょうか?1 無謀 2 1,2年はかかる。3 まあちょっとやればできる 4簡単にできる 5割に合わん。

なんとなくですが、計画的にステップアップしていって、2-3 年でなんとか なるんじゃないかと思います。

また、計画的にやらないと、そこには到達しないんじゃないかとも思います。

とにかく、ハードに興味をもたれたのであるなら、 比較的簡単に作れて、たのしめるものから始めるのが良いと思います。

おすすめは、秋月の AKI-H8/3664F タイニーマイコンキット を買って組み立て、プログラミングしてみること。

CPU のマニュアルは、http://www.hitachi-semicon.co.jp から入手できます。 ( ここから入って、電子デバイス->マイクロコンピュータ->マニュアルダウンロード に行くと H8/3664 シリーズ ハードウェアマニュアルがあります)

こういったものを いくつか自分で設計して作る。 データシートを読んだり、電子回路の組み立てやっていけば、 次のレベルにいけると思います。

2002/5/19

秋月 で売っている H8/3664 を組み立てた。 組み立ては、簡単だったが、さて何につかったらいいんだろうか。

うーんなんかイマイチだなぁ。やっぱり PC と接続してなにかする ... 用途をかんがえてみよう。

USB みたいな高速 大容量の転送をしないのであれば、シリアルでも 十分使えるはず。

とりあえず、そういう使い方をめざしてみよう。


02/05/24

大昔 、大学の実験で 簡単なCPUを設計したことがあるのだが、 再現したいと 思っている。

おぼえているのは、

ただ、ALU に 何を使ったかおぼえていない。 ... 調べてみると どうも 74181 か 74281 らしい。

現在でも 181 は生き残っているようで、 データシート が手にはいった。

うろおぼえなのだが、だいたいこんな感じ

            ROM                      ROMindex            data bus 
        +--------------------------+        +--+          ||
        |                   next   |  <-----+  |<---------||
        +-------|--------|---------+        |  |<--+      ||
         ||||||||||||||      |              +--+   |      ||
         ||||||||||||||      |               |     |      ||
          control(16bit)     +---------------|-----+      ||
                      |                      |            ||
                      = |>-------------------+            ||
         +------------|---------------------------------->||
         |            | 74181 x 2                         ||
         |            |   /---+                           ||
         |  レジスタ  +- /    |<--------------------------||
         |   +---+      /     |                           ||
         |<--|   |<---   ALU <                            ||
         |   |   |      \\     |                           ||
         |   |   |       \\    |<-+        +--+    +--+    ||
         |   +---+         ---+  |        |  |<---|  |<---||
         |                       |        |  |    +--+    ||
         +-----------------------+   +=== +--+            ||
                                     |    |  |<-----------||
                                     |    |  |            ||
                                     |    +--+            ||
                                     |   PC: 16bit counter 
                                     |
                                     |
      ================================================
       address bus           +------------------+
                             |Address Register  |
                             +-------------------

要を得ない説明だが、まあこんな感じ。

RAM がある FPGA の 方が プログラムも格納できるから、たぶん便利なはず。


部品購入先のメモ

http://rswww.co.jp

685 Sun Jun 30 22:16:26 JST 2002 電子工作/FPGAで何をしようか.html SuzTiki:電子工作

趣味として、FPGA を何につかったら、満足が得られるか考えてみる。 ほんとうのところは、ただ ただ FPGA を使ってみたいのだが、 使ったことで満足を得られるかどうか ... これがポイント。

CPU を作るというのは、興味深いのだが、出来たからどうなのだろう? 成果物が実際のなにかの役に立つような気がしない。

CPU を作るのは手段ならば良いが、目的にするにはすこしおもしろくない。

自分が満足する条件を考えてみると

この2つの条件を満たすものを考えていたのだが

というのを考えてみた。もちろん 10Mbps 程度のイーサネットではおもしろくない。 100 Mbps の PCI の チップをつなぎ 実際に高いスループットで転送できる ようなもの。


なにが出来るかわからないが、なにをしないといけないか...考えてみる。

ステップ1

ステップ2

ステップ3

ステップ4


最終的に動くものを作り上げるのは、いろんなことを知らないといけないし、 かなり難しいと思う。でも、もし作ることができたら かなりの満足が得られそうだ。

到達できなかったとしてもそれぞれのステップで十分楽しめそうだし、 とりあえずは、そういうのを目標にして、FPGA で遊ぶということにしよう。


2002/06/27

あぁ。買うことにしてしまった。XC2S100-5TQ-144C しかも 5つ。 もう 一生遊べるにちがいない。

まあ、長期に渡って遊ぶから、あわてないのだが 、評価用ボードを 手に入れないといけない。

秋月C基板でスパルタン2な ボードをわけてもらうというのを視野にいれつつ、 ボード設計も楽しいから、まずは自分で考えてみようかと思う。

上記のことを想定すると ... PCI のスロットと IDE 用のピンヘッダを 付けられる必要が ありそうだ。

EAGLE で free で使える範囲だと、10cm x 8cm までに押える必要がある。 手もとの PCI の Ethernet のカードは、端子の幅が 8cm ぐらい。 長辺で 物理的には スロットを 接続できそうだ。 IDE 40 pin は、51mm ぐらいだから、短辺でも置けそうだ。

1 スロットを 1:1 でつなぐつもりだけども、ターミネータとかいるのかなぁ。 ここは、ちゃんと勉強しないと わからない。

さて、IDE はというと、実はこれも ちゃんと勉強しないと わからない。 40 pin のピンヘッダを立てて、片側は ほとんど GND だったと思うけど それぐらいしか知らない。

で、まんなかに 144 pin の FPGA。

さて、これだけで良いか... というと .. RAM を付けておきたい。 本来の目的でも バッファに使うかもしれないし。

で、config 系は どうしよう。jtag ポートを付けるとして、それだけで 良いか。... HOST と常に接続するのを前堤にすればそれでも良いらしい。

手もとに Flush ROM と VQ64 の CPLD があるはずだから ... これを 使って config 用 の 部分を組むのがよさそうだ。

で、FPGA が enable になった後は、Flush ROM を直接アクセスできるように もしたい。

あと電源系 ... 3.3V と 2.5V のレギューレータでいいことにする。

クロックはもちろん必要。PCI 33Mhz だそうだが、正確でなくてもよさそう。 40Mhz の クロックモジュールが手もとにあるんだが...こんなんで良いのか?

まあ、そんなボード を 考えてみることにする。もちろん いろいろ調べて からでないと .. ダメだが。あわてないし、のんびりやることにする。

CPLD や FPGA を使うと嬉しいのは、pin 接続の制限がないこと。 ボードの配置を先にきめて、配線できる。

PIN 数が足りるかどうかは分からないが ... 144 pin だし、 だいじょうぶじゃないかなぁ。 もし足りなければ ROM と RAM を バス接続することにするとか ... ROM をシリアル接続だけにするとか .. いくつか方法はあるだろう。

とりあえず部品を並べてみた。

10cm x 8cm にはいらないことはなさそうだ。


XC2S100-5TQ144 のメモ

PCIのメモ


メモ

PCI 以外のインターフェイス で 100M のイーサネット

696 Wed May 29 20:06:30 JST 2002 電子工作/bluetooth.html SuzTiki:電子工作

bluetooth 関係のメモ

5/26

プラネックス の GW-BH01U という USB Bluetooth アダプタが 8800 円で 売っていたので、買ってしまう。

ケースを割って中をみてみる。...

中に入っていたのは、 WML-C06NU という ミツミ製 モジュール。

あれ? 製品の説明には、ベースチップは、CSR 製と書いてある。 CSR 製チップを使った ミツミ製モジュール?

それはともかく、ミツミ製モジュールには、インターフェイス 3 種類 x アンテナ あり/なし で 6 タイプの製品があるようだ。

インターフェイスには、UART BCSP/ UART H4 / USB --- ふうむ。 このモジュールは、USB にしか つながらないのか?

モジュールは、28 ピンで、

          Top View
 
              アンテナ

     (1) PIO[0]/RX_EN       (28) ANT
     (2) PIO[1]/TX_EN       (27) GND
     (3) GND                (26) --
     (4) GND                (25) PIO[2]
     (5) PIO[4]/IRQ1        (24) PIO[3]
     (6) PIO[5]/IRQ2        (23) UART_TX
     (7) PIO[6]             (22) UART_RX
     (8) PIO[7]             (21) UART_RTS/USB_D+
     (9) PCM_OUT            (20) UART_CTS/USB_D-
     (10) PCM_CLK           (19) SPI_MISO
     (11) PCM_IN            (18) SPI_CLK
     (12) PCM_SYNC          (17) SPI_MOSI
     (13) GND               (16) SPI_CSB
     (14) Vdd               (15)  GND

となっている。

インターフェイスがちがっても pin 配置は同じということは、ファームウェアが ちがうだけなのかも知れない。


CSR 製チップということは、 BlueCore というやつ?
このチップは、マイクロコントローラと RAM , I/O が内蔵されていて、 外付チップとして flushROM と クリスタル 、アンテナを付けるものらしい。 チップ自体は、81pin bga で、とても手がだせるものではなさそう。

で、このチップは、USB and UART version と UART only version の2つがある。


とにかく、bluetooth モジュールって 一般に かなり多様なインターフェイスを もっているようだ。

SPI とか、UART(シリアル) とか、WML-C06NU では利用できないのかも知れないが 利用できるモジュールは存在するわけだ。

シリアルでつなげられる と幸せな もの は沢山ありそうだ。


重量9g で 9800円 小さいですね。これは。--ksr

そうですね。WML-C06NU で出ている写真そのものモジュールが入って いました。

アンテナ付きのモジュールに USB のコネクタがくっついている感じ。 USB のコネクタ( 取り付け部を含む) が Bluetooth モジュールと同じぐらいの長さ。

部品をよおくみてみると、5V->3.3V の レギュレータ と 数個のチップ抵抗が あるだけ。ほとんど Bluetooth モジュールに USB コネクタ付けた だけのもののようです。

ちなみに、Linux には、bluetooth ドライバがある模様。

この linux(2.4.18) に入っているのは、bluez-1.1 だそうだ。 bluez-1.2 が既に出たあと いまは 2.1 かなりちがっているということか。


実際に なにかをしようとするときは、 Bluetooth_1.1_Specification_Book を理解しなくてはならなさそう。


あ、ミツミの WML-C06 に関する話題が Linux bluetooth-dev ML でみつかった。

VDD,GND,Tx,Rx だけつないで 115200 bps BCSP で BlueTest? という プログラムで接続できたらしい。

なるほど、OpenBTという プロジェクトがあるのか。それで動かないという話題らしい。

リプライを見ると bcsp-version of openbt が通信する セッテイングを チェックしろとある。

bluetooth のプロジェクトには、OpenBT 以外に BlueZ というのがあるらしい。 BlueZ の Hardware List には、

     Mitsumi USB Adapter CSR 1.1 hcp_usb  working

という情報が。

どうやってインストールするかというと Bluetooth_Installation_HOWO が。

これでホスト側の環境が作れるわけだ。で、どうするのだろう? PC 間をつなげることができたって、嬉しくもなんともないぞ。 NetBSD/hpcmips で という 可能性はないのだろうか?

NetBSD ではどうなっているんだろう?とか思ってしらべてみたら、

アイピースクエア なんて会社をみつけた。 なんでも NetBSD 関係の 依託開発?しているところみたい。

その FAQ には、

なんてあるぞ。自社でのportも辞さずということか。しかし、 Linux からの port だと GPL ? NetBSD で組込みやる以上 bluetooth ドライバ がないと困るだろうが... すごい意気ごみだ。

それはともかく、IrDA とちがって 誰もが欲しいものだろう。 いつか誰かが port してくれるにちがいない。


bluz の最新版をインストールしてみる。

をとにかく ./configure; make; make install しまくる。

で、bluetooth の UNIT を挿す。

とにかく 初期化されたっぽい。

さてコマンドは、

  hciattach   --- シリアル接続の BlueTooth モジュールはこれで組み込む。
                  (USB は必要ない)
  hciconfig   --- 組み込まれたドライバに対して 初期化する(up) 
  hcid        --- サービスをするデーモン?
  hcitool     --- scan するとか inquire するとか。

まずは、

hciconfig up

とすると

hci0:   Type: USB 
        BD Address: 00:A0:96:1F:AD:44 ACL MTU: 128:8  SCO MTU: 64:8
        UP RUNNING PSCAN ISCAN 
        RX bytes:1511 acl:6 sco:0 events:53 errors:0
        TX bytes:474 acl:0 sco:0 commands:31 errors:0

といったメッセージが出る。

hcitool scan

で、

Scanning ...
        00:A0:96:1F:AD:35       NINJA

相手がみつかる。

そして

hcitool info  00:A0:96:1F:AD:35

とすると
 
Requesting information ...
        BD Address:  00:A0:96:1F:AD:35
        Device Name: NINJA
        LMP Version: 1.1 (0x1) LMP Subversion: 0x72
        Manufacturer: Cambridge Silicon Radio (10)
        Features: 0xff 0xff 0x05 0x00
                <3-slot packets> <5-slot packets> <encryption> <slot offset> 
                <timing accuracy> <role switch> <hold mode> <sniff mode> 
                <park mode> <RSSI> <channel quality> <SCO link> 
                <HV2 packets> <HV3 packets> <u-law log> <A-law log> 
                <CVSD> <power control> 

それはともかく、hcid は? ... /etc/bluetooth/hcid.conf でサービスを
定義するものらしい。


hcid をうごかせば.. hcicofing up せずとも 自動的に up するようだ。
で、相手側は、

  名称 : Bluz(0)
  タイプ: デスクトップ PC

と認識してくれた。

なんかこれだけじゃダメらしい。

てのも make してみる。

make するのはよいのだがよくわからんという状態に ...

まあ、このページは、電子工作のページだから。BlueZ というのが どういうものか、だいたいわかればいいか。

主題は、シリアルに どうやって BlueTooth? モジュールをつなげるか。

まずは、

ダメなら、別のものを考える。

こんなデータをみつけた。

これによると、

BCSP ,H4 とは何なのか

の中をみてようやく理解した。H2(USB),H3(RS232C),H4(UART) という3つの 物理レイヤのプロトコルの定義は、Bluetooth_1.1_Specification_Book で 説明があった。

H3 は、9600 bps で ネゴシエーションして、通信モードを その後で設定する。ボードに載っていてエラーを気にしなくてよいケース のために H4 がある。ある固定の通信モードでネゴシエーションせずに、 通信できるものらしく、通信モードの設定について記載されていない。

そして、BCPS は、BlueCore Serial Protocol の略で CSR 社の プロトコルらしい。

H4 とおなじく、ある固定の通信モードでネゴシエーションせずに、 通信できるが、CRC や チェックサムをつけて、データの信頼性 / エラー検出 の面で、改良したもの。また、TxD/RxD のみでも通信できる。

で、H4 (or H3) と 共存はできないから、UART のモデルは、2 種類ある ということになるようだ。

ひょっとしたら、USB モデルは、CTS/RTS が使えないから、シリアルが使えると すれば BCSP に決まっているのかも知れない。

bcsp.zip には、2種類の コードが 含まれている。Windows 系用のコードと 組み込み系のコードのようだ。

さて、BlueZ で、BCSP が使えるかというと まだ無理のようだ。 ハードウェアのリストは、

    COM1 Platinum Card CSR  1.1 bcsp_cs  in progress

となっていて、開発中らしい。これ以外の BCSP モジュールは、 not working になっている。

また、メーリングリストで

上でも でてきたが OpenBT の方も Mitsumi のシリアル接続はあやしい らしい。ただし、他の CSR で BCSP での接続は 実績があるらしい。

参考:

そういったことはともかく、なんとなく、USB version では、シリアル接続 なんてできないような気がしてきた。

おとなしく、USB で使えばいい。無理矢理シリアル に USB をつなげると すれば、


     USB Bluetooth -- SL811HST (Usb HOST) -- H8 

なんてつなぎかたをすればよいのか。ただ、それができたとしても消費電力が...


ネットワーク周りだし、おもしろいところですね。何かできないかな。

なんか面白みがないですね。無線ということは 電源系さえなんとかすれば、 完全防水できるとか ...


メモ

iPAQ の Bluetooth 版は BlueZ で使えているらしい。

    Compaq iPAQ 3870           CSR       1.1   hci_uart   working
    Compaq iPAQ Bluetooth      CSR       1.1   hci_uart   working

いいなぁ。

それ関係で、http://www.cs.umd.edu/~gvijay/bluez.html というのをみつける。 なんか pskey というので設定を変更できるっぽい。

iPAQ の デフォルトは、BCSP モードなのを pskey でファームウェアを 書き変えて H4 mode にするとある。

... よくわからんが、hciattach とかに、CSR の UART speed がどうのという コードがあるなぁ。OpenBT の方にも bt_vendor.c とかあって、なんか操作 できるようだ。

pskey そのものはわからなかったが、bt_vendor.c に 設定のコードが入っている。

あとは、USB version でもシリアルで接続できると嬉しいなぁ。

311 Fri Jul 05 00:23:53 JST 2002 電子工作/XC9572XLで作るROMライタ.html SuzTiki:電子工作

CPLD (XC9572XL) で ROM ライタを作る。

広く使われている 29LV系の Flush ROM は、特別な電圧を必要とせず 3.3V 系の 論理回路だけで 制御すれば良い。ということは、CPLD の I/O 線を ROM の ソケットに とにかくつないでいって

を考えてやれば、ROM ライタになってしまうわけだ。こうやって作った回路は CPLD の中味しだいで 他の回路にもなる。

という問題はクリアになっている(はずな)ので、ROM をいれるべき ROM ソケットを 単なるコネクタと見立てて別の回路を載せたりできるはず。

CPLD をどう config するかについては、JTAG に決まっている。 NAXJP を使えば、PC の パラレルポート の線を直結するだけで 書き込むことができる。

それを前堤とすれば、HOST とどう通信するか ということも だいぶ決まって来る。 パラレルポートの 別の信号線を使うわけだ。JTAG の制御と SPI の制御は 似ているので、SPI がまあ妥当だろう。

さて、それだけできたら良いのだろうか? パラレルポートでは、別電源が必要だし、信号にノイズが載ってうまく書けない 場合があるという話を聞いている。 そして、そういったこと以上に PC のパラレル ポートが壊れると厭だ。( 自分ではPC のパラレルポート自体使ったことないんだ けども、壊れると このROMライタ自身が使えなくなるから困る。 そして 相手はCPLD なので、バグっていたらやっぱり壊れる可能性があるんじゃ ないかという気がしている)

そうすると USB が使えたら良いのではないかという気になってくる。 ただ 他の FPGA/CPLD を使うときも有用なので、 USB との通信は、独立したものの方が良い。これは、 電子工作/XC9572XLと8U245AMで作るUSBシリアルIOで考えることにする。

以下、CPLD の中の回路をどうするか について考えることにする。


作ろうとするもの

想定インターフェイス

基本的な考えかた

         +------------+
   +---- | カウンタ   |
   |     +------------+
   |        IN
   |           | | | | | | | | | | | | | | | | | | | | | | | | | | |
   |       +----------------------------------------------------------+
  ----> CLK|                                                          |
  ----> IN |                                                          |
  <---  OUT|                                                          |
           +----------------------------------------------------------+
               | | | | | | | | | | | | | | | | | | | | | | | | | | |
           OUT | | | | |
             +-----------------+
             | 制御線ラッチ    |
             +-----------------+
               | | | | |

固定長のデータフォーマットを考えると、 長い シフトレジスタを1つ考えて CLK とともに シフトさせる。

元あったデータがホスト側に行って、ホストから送られたデータがあたらしい 状態になる。CLK をカウントしておいて、全部入れ換わったら所定の動作を すれば良い。

こういう単純な構成で ROM ライタを考えると、いくつかの制御用の 信号線が、シフト動作で変わってしまうのはまずい。 そういう理由で ラッチをかませている。ただし全部ではなく、 アドレス線 などは、このシフトレジスタの OUT を直接 接続しても 良い。データ線は 入出力があるので、制御線ラッチの状態を 使って動作を規定させる必要がある。
シフトレジスタの長さを Flush ROM の信号線 に合わせて取るとすれば、アドレス 24bit データ 16bit その他 数ビット。 全部で 48 bit ぐらい。制御線用ラッチが 8bit 、カウンタが 8bit とすれば、 トータルで、64bit。XC9572 は 72 bit 分あるので、入ることは入る。

ただし、ほんとうにこのように作ってしまうと

      RD# を Low レベルにして データ方向を切り替える。
      RD# を Hi レベルにして、データの内容を取りこむ。
      データ方向を切り替える。

といった操作で、シフトレジスタ長の内容 の転送が 3 回発生する。

48 bitx3 で 18 バイトのやりとりをして、 16 bit のデータが読める ...

まあ、3回の転送の間で同期を取る必要はなく、どんどん転送すれば良いから、 それでも良いという考えもあるのだが ... もうすこし 工夫をいれたい。 それが、主なテーマということになる。

ちなみに、なにかの間違いで、シリアルの bit がずれてしまったりしたときは、 どうするんだろうか?

これに対応するには、たぶん チップセレクト CS# というのを考えて、 その立ち下がりで、カウンタを 0 にすれば良いのだろう。 チップセレクト という概念にするなら、もうすこし付加的な機能も必要。 だいたい下のような感じか。


構成を考える

どう工夫しても 上記より 必要な情報量が劇的に減るということはないが、 いくつかのステージに分けることによって、制御できれば、 効率良く転送できるようになる。

考えてみたのは、アドレスレジスタにカウンタ機能を付け、 転送数カウンタの数だけ、くり返し READ/WRITE 操作をできるように すること。

なお、基本構成では データバスを 16bit としていたが、 くり返しの操作ができるのなら、性能的なインパクトはないので、 8 bit モードにすることにする。

これでだいたい 64 bit ぐらい使う見積り。多少 減らせる見込みがあるが、 CS の制御なども必要。結果として ぎりぎりになるんではないかと思っている。


転送フォーマット

      受信                 送信
   +---------------+   +---------------+
   |  コマンド     |   |     0         |
   +---------------+   +---------------+
   |  転送数       |   |  コマンド     | 
   +---------------+   +---------------+
   |  アドレス#0   |   |  転送数       |
   +---------------+   +---------------+
   |  アドレス#1   |   |  アドレス#0   |   
   +---------------+   +---------------+
   |  アドレス#2   |   |  アドレス#1   |   
   +---------------+   +---------------+
   |      0        |   |  アドレス#2   |   
   +---------------+   +---------------+

----------------------------------------- 
                                           Option : データ転送フェーズ

   +---------------+   +---------------+
   |  データ1      |   |     0         |
   +---------------+   +---------------+
   |               |   | データ 1      |
   |      :        |   +---------------+
   |               |   |               |
   +---------------+   |               |
   |  データN      |   |               |
   +---------------+   +---------------+

   +---------------+   +---------------+
   |       0       |   | データN       |
   +---------------+   +---------------+

実はちょっと面倒なことがある。それは、1 CLK の操作で、READ/WRITE なり ができないこと。たとえば、WRITE なら、データを受け取った後に 書き込み操作が入る。それは次のフェーズにずれ込んでしまう。

また、READ の場合 アドレス確定後 すぐに 読みこんだデータを送ることは できない。

最後にダミーデータを送ってもらうことにして、 1 バイトづつ ずらしてデータを返すというのがわかりやすくて良いかもしれない。


ちょっとここで観想。

XC9572XL ってなかなか良いバランスかも知れない。XC9536XL クラスなら、規模が小さすぎて 簡単なステートマシンも 作れそうにないが、これなら ちょっとしたものなら入るようだ。

もうすこし沢山の データが扱えたらいいなぁとは思うので、 XC95144XL-TQ100 もいいかもしれない。 値段も XC9572XL-VQ64 の倍はしない。

ただ、ステートマシンの勉強としては、この規模を卒業したら、 1ケタ上を考えたいので、XC95144XL-TQ100 で遊ぶことはたぶんないだろう。

741 Fri Jul 05 00:08:59 JST 2002 電子工作/USBN9603.html SuzTiki:電子工作

USBN9603 というチップは、USB の制御用チップとしてとても有名らしい。 秋月で 600円ぐらい で手に入り入手性が良い。 このチップは、24Mhz のクリスタルが必要。

このチップを PIC や H8 で制御するための情報は あちこちにある。

USB加速度センサマウスのページは H8 使って実際にデバイスを作っている のでとても参考になる。

ほんとうは、ステートマシンで 制御回路を作ってみたかったのだが、 できたとしても、小規模の CPLD には入らないようだ。 ここでは、ステートマシンというのを視野に入れつつ H8/3664 で制御することを 考えてみたい。

実現したい機能は、USB を通して JTAG and/or SPI を扱えるもの。 JTAG でプログラミングした後は ホストとの通信経路にも使いたいので、 JTAG and SPI の 2 チャンネル?

ボードは、秋月の H8/3664(小:1600円)と USBN9603 を DIP に変換したものを C 基板に載せて使うことを考える。

6/30 方針変更

7/4 さらに変更


USBN9603 の詳細を知る。


DMA モード

こんなかんじか。


              +-----------------+
              |                 |
 DRQ ---------+                 +-------------------

~DACK -------------+                           +---------------
                   |                           |
                   +---------------------------+

~RD   -----------------+  +---------------------------
                       | ↑
                       +--

 D7-D0 ------------------<D>---------------------------

 CFGCLK ---------------------_-_-_-_-_-_-_-_-----

 CFGDATA -------------------<><><><><><><><>-----

                  |----------------------------|
                     DMA モード

DMA での転送はもっとも単純。普通は、INTR が立ったら、 (レジスタをみて)イベントを解析して それに対応する 処理を行うことになる。

それに先だって レジスタを読む、レジスタに書くという手順について レジスタは 0x00 から 0x3f まで(64個)

  • レジスタに書く

    なかなか面倒だ。

    結局 大きく4 つの状態にわけて、

                            <-> INIT モード
              IDLE モード   <-> INTR モード
                            <-> DMA モード
    

    というかんじで状態遷移するのがよさそうだ。

    INTR モード

    他にもあると思うけども、最低しなければならないことはこんな感じ?

    Set Adress

    Get Device Descriptor

    初期化

    やるべきことは、

    ぐらい?


    このあたりのコードをみていて linux の /proc/bus/usb/devices の読み方 が少しわかったのでめも。

    ってかんじ。

    ここまでわかるとなおさら疑問がいろいろ出て来るなぁ。

    なんかこんな感じのバランスで設計されている。

    じゃあ、自分で JTAG の デバイスをつくるときはどうしたら良いんだろう?

    シリアルポートそのものにして、データを 送って 、受け取る という 動きをさせれば良いのかなぁ。

    いくら遅くても良いなら、

    という2つぐらいのコマンドがあれば良いような気がする。

    信号線のセットがいくつかあれば良いし、トグルかセットかも 属性にしてしまう。

    さて、これだけで良いのだろうか? JTAG は、ホスト側から一方的に コントロールするだけだが ...なんらかのデバイスをSPI で制御するなら もっと多様な処理が必要だ。

    こういった処理させるのなら、もはや ステートマシンじゃ無理か。

    とにかく、あれだ 汎用 USB シリアル I/O ということにして、 H8 + USBN9603 で作るのをテーマに変更しよう。

    だた、H8 で性能はどうかというのが問題だ。 シリアルから来たデータを処理するのに 0.5M bps でもきついらしい。

    パラレルのデータを扱うが、1 bit づつ処理していくわけだから 0.1M bps も出れば良いほうではないか .. という気がする。

    数Mbps で JTAG なり SPI なりを制御するには、やはり CPLD を使わないと ダメではないか。

    この処理を中心にすえて、それができるように H8の処理なりプロトコルなりを を考えていくことにしよう。

    これだけで、XC9536 では無理そうということが明らかだ。 でも、制御が簡単そうだから XC9572 でできるんじゃないかと思う。
    さて CPLD はどうやって書き込むというと、このチップだけでは無理。 外からプログラミングしてやらないといけない。ただ、H8 使ったときも 条件いっしょだし...
    これで検討してみようかなぁ。
    ちなみにこのチップは、IPI で 800円。