2012年06月06日

QFN32の FPGA

ふと、MachXO2 でググってみたら、あらたに 32pin QFN が出るらしい。



デジキーでも LCMXO2-256HC のエントリーが出来ている。製品ページを見ても、なにやら情報が出ている。

Mouser では、1個買いの単価が出ている

    330円 (4 グレード)
    371円 (5 グレード)
    418円 (6 グレード)
    まだ在庫なし。工場リードタイム すら出ていない。

      (2012/7/3) 6 グレードだけだが、リードタイムが出ていた。9 週間。価格も安くなっていた。
      244円 (4 グレード)
      279円 (5 グレード)
      314円 (6 グレード)
      256 なんだし、これぐらいでないと。お、4 グレード は、25個時 単価 214円 か。これぐらいだと、AVR とかのサポート用に使える。


  • I/O 数は 22 -- これはどういう計算なんだろう?

    BSDLファイル は既にある。VCCIO が 4 バンクあって 電源だけで 10 pin 。残りが I/O という計算らしい。

    JTAG を専用にすると .. 18 I/O 。それに、PROGRAMN/DONE/JTAGENB の扱いをどうするか。

WLCSP25 は、1200 なのに、QFN32 は、256 のみ。1200 だったら大喜びしてたのに... 残念。

... とここまで書いて、以前の自分の記事に QFN32 のことが載っていることに気がついた。 忘れていたのか。

まぁ、そのことは置いておいて、今は、実際に 電子工作で扱える小ピンの FPGA が出ることはすなおに嬉しい。



これは、ストロベリーリナックスの CP2103 USBシリアルボードだが、こんな風に変換基板を作ることができれば、ナローDIP FPGA ボードになる。ただし、作ることができるとは限らない。CP2103 は、QFN28 なので QFN32 だとより条件が厳しい。1個分のホールを潰せば、ナローDIP化はできそうだが、ランドが少ない。果たして手ハンダが可能なのか? リフローもやってみたいが、それしか方法がないのもどうかという気がする。

    QFNパッケージのはんだ付け

    この記事には、『位置合わせさえ確実であれば無洗浄タイプのフラックスを使ってはんだ付けが可能です。』と記されている。楽々だったとも。

    ランドは、標準より少し 広げているようだ。パッケージの端から 0.5mm ぐらい?

それは後にして、そもそも この LCMXO2-256HC は何に使えるのだろう?

  • 4LUT 数 256
  • ブロック RAM なし
  • I2C, SPI, タイアカウンタ ハードマクロあり
  • PLL なし
  • 内蔵 クロック あり

まぁ ALU ぐらいは出来るだろう。ならば 74HC181 ピン互換が可能になるような、ピン配置にして 24pin の DIP モジュールにするのはどうか? 出来れば、データシートすら、なかなか見つからない 74LS281 互換にもしてみたい。

『CPUの創りかた』で 74HC181 を使っているらしいのだが、入手困難らしい。価値のある使い方がひとつできることになる。ランドも大きくすることが出来て、手ハンダも可能になるはず。

    電源を 3.3V 専用にして、2 pin 分にし、残りの 22 I/O を出すことは可能。

    ただ、Config で JTAG を Disable にすると、JTAGENB が JTAG を強制的に enable するための専用ピンになる。-- 要するに I/O が足りず完全互換にするのは無理。

    出力のうち めったに使われない P または G に JTAGENB を割り当てることでごまかそう。

    あとの問題は、電圧範囲で 3.3V 専用になることぐらい。



    こちらは、aitendo の CP2103モジュールだが、ちょうど 24pin 。こんな風に部品を載せる余裕が随分ある。

そうそう 低容量(128B)の ROM/RAM にはなる。

    8KB ROM と 2KB RAM は、

    A7 (1) (24) VCC
    A6 (2) (23) A8
    A5 (3) (22) A9
    A4 (4) (21) A12 /WE
    A3 (5) (20) CS /OE
    A2 (6) (19) A10
    A1 (7) (18) A11 /CE
    A0 (8) (17) D7
    D0 (9) (16) D6
    D1 (10) (15) D5
    D2 (11) (14) D4
    GND (12) (13) D3

    こんな ピン割り当て。(9) または (11) に JTAGENB を割り当てるので、互換にするのは無理。

    D2 を A8/A9/A10 のどれか に持っていくしかないかな。

    低容量(128B)でも、CPU を創るなら役にはたつ。マイクロプログラムなら 容量よりビット幅だし。

    訂正: 256B が行けるかと思ったのだが、実際にやってみると 128B までしか作れなかった。

    1LUT は、16bit (2B) の容量のはずで、256 LUT あれば 512B 分。ロジックに使う分があるから 256B の計算だったのだが ...

あとは ... 折角 I2C やら SPI やら付いているのだから、なにか デバイスを作ってみるとか。CPUは、入らないから、ステートマシンで作ることになる。内蔵クロックは、最大 133 MHz なので、超高速 PWM ってのも可能。

差動入力もある。コンパレータがわりに使えるかも。

ところで、こいつの電圧範囲はどうなるのだろう? 上限が 3.3V なのは良いとして下限は?
VCCIO は、3.3V/2.5V/1.8V/1.2V は行けそうなのだが、Config で決めた電圧でないといけないのだろうか? それとも、半端な電圧でも良いのだろうか?

ちなみに、ライタは、FT232RL が使えるものを 作った。デバイスを追加しないといけないし、実際には FT232RL での動作を確認していないが、たぶん大丈夫。論理合成ツールは、Diamond 1.4.2 以降で対応済みだそうだ。

追記: 74281 (P/G なし)を合成してみる。

    ピン配置
    XO2-256 74281 74281 XO2-256
    27 A1 1 24 VCC
    28 A2 2 23 A0 25
    29 RS1 3 22 CP 23
    30 RS0 4 21 SIO0 21
    32 RC 5 20 AS0 20
    1 SIO3 6 19 AS1 17
    4 A3 7 18 AS2 16
    5 Cn 8 17 M 14
    8 ~G 9 16 F0 13
    9 Cn+4 10 15 F1 12
    26 ~P 11 14 F2 11
    GND 12 13 F3 10

    以前 74281 の コードを XC2C64A 向けに作ってあったので、試してみることにした。

    実は基板は、eagle で設計済みで、モジュールへのピンアサインも決めてしまっている。

    実際にピンを割り当てるときに、まず JTAG_PORT を DISABLE にしないといけなかった。次に JED ファイル生成でエラーになった。どうやら MUX_CONFIGURATION_PORTS を ENABLE にしないといけないらしい。

    Number of registers: 4
    Number of SLICEs: 24 out of 128 (19%)

    Number of logic LUT4s: 42
    Number of ripple logic: 3 (6 LUT4s)
    Total number of LUT4s: 48


    CPLDだと厳しかったが、小規模でも FPGA だけあって 楽勝 のようだ。74181 は作ったことがないが、これも P,G なしにするし 楽勝だろう。

    基板は、もうすこし練りたい。例えば TDO は出力 だが、JTAG を Disable にし忘れると 回路を壊してしまう恐れが ... 抵抗ぐらいは入れておきたい。他にもオプションとして仕込んでおきたいものもある。

    思ったより回路が入るようだし、サンプルをいくつか用意出来るといいなと思っている。

    ALU と ROM/RAM は作るとして、後は?

    4桁7セグを使った時計とか? 電流は多少流せるようだし、いけるかも。あと、周波数カウンタなんかも出来そう。

基板の設計(1)



    まだ部品も手に入らないわけだが、基板を設計してみた。

  • QFN は、デザイン優先で(というかワザを覚えたので)ナナメにマウント。
     ただ、ちゃんとしたパッドの作り方がわからないので、そこは適当。
     シルクもナナメを使ってみたり。

  • コネクタ部分は、0.8φで小さめの径。秋月の細ピンヘッダを想定。

  • 今回は、裏に部品を付けない。いずれ リフローやってみたい。

      ホットプレートを使うらしいが、小型の電気鍋 (鍋 MG-500 とか 鍋 KG-152 とかでググると多数みつかる) ではダメなんだろうか? 保管場所を取るのはちょっと避けたい。

  • I2C は、プルアップ抵抗を付けられるように。XO2 は、I2C からコンフィグできたりするので実験用。 (普通は)付けない。
  • TDO は、ミスで出力がぶつかるのを危惧して抵抗付き。LED を付けるのにも便利なように配慮。
  • セラミック(or 水晶)発振子を付けられるようにしてみた。
     もうひとつ端子間に抵抗を入れられるようにしてある。
     この 2 つ -- 1M Ωを入れてしまうと、使い方に制限が出るわけだが、私が作るものは、配慮する。

    いつもの gerbtool で画像はつくれなかった。ナナメの部品には対応できていないようだ。



      原因だけは、分かった。ナナメの部品を使うと G36 というコードが使われるようになる。これは、多角形の塗りつぶしを指定するもの。

      そんなアルゴリズムは持っていないので、おかしくなっていたのだった。とりあえず G36 で アパーチャ を小さな矩形にしたところ上のようになった。対応するのは面倒なので、放置になりそう。

  • xo2qfn-05.zip

    eagle の ソース。部品が手に入るまで寝かせておく。(最新版に更新)

      更新: JTAGENB の位置が違うパターンを追加。

  • ここまで作って 74HC181 に合わせられないことが分かった。P/G のピンアサインを確認したつもりが ... 違った。どうしたものか。...



    結局、74HC181 の互換にできるように変更。281 互換にできたとしても、設計できる人しか有用である可能性がない。設計できるなら、ピン互換であることは重要でないだろうし、そもそも こういうものは使わないだろう。

    JTAGENB は、G である 17pin に移動。

    ところで、74HC181の コードを作るのは (P/G なしでも) 結構面倒だと分かった。そもそも Cn+4 の論理が分からない。回路図があるんだから、追っていけば分かるのだろうけど。

    追記: 多角形のフィルに対応。ちょっとインチキで形に条件が付くのだが、多分大丈夫。



    ナローDIP 版も設計してみた。1pin 分潰すだけではダメで 2pin 分になった。でも DIP28 だしソケットは使える。ブレットボードなんかでは、N.C. があるのは逆に便利かも。信号の並びは、ワイド版と同じだが ... おまけの部品は付けられず。まだまだ FPGA が手に入るのは先だろうから、これをベースに練っていこう。



    追記: 練ってみたら、こんなものに ... 。ワイドとナロー両方いけるうえに、1 列だけのユニバーサルエリア付き。切ればナローにもなる。なにか不恰好だが、発注するならこれか。

  • gerbtool-0.8.zip

    多角形のフィルに対応したので、gerbtool 単体もアップデート。

74HC181 とかの コード

  • qfn32samples.zip

    書いてみただけで、ピンアサインも前の案ベースになっていたりするのだが、74281, 74HC181, ROM, RAM のコードをまとめた。

    74HC181 は、とりあえず、回路図のロジックをそのまま組んでみた。

    追記 : ALU については、別記事にした。→ 『TTL ALU 74181』 。
    結構わかってきたので、拡張したりしてみている。

  • qfn32samples-03.zip とりあえず更新版 (2012/06/12)

    ALU だけではなく、いろいろ作ってみたいと思っている。ちなみに、I2C や SPI のモジュールは、バスから使う仕様なので、マイクロコントローラが必須に思えてきた。なので、256 では無理。何故 256 にこんなものが付いているのか? .. とも思ったのだが、コンフィグに使えるから意味はあるのだろう。

    次は、7seg 使った時計 .. かな? 時計自体は楽勝で入るのだが ... 時刻設定のインターフェイスが必要。ここが難しそう。チャタリング対策も要りそうだし。

    追記: 『FPGA時計の設計』設計はできてしまった。思いの外簡単だった。規模もまだ余裕がある。

  • qfn32samples-04.zip 更新版 (2012/06/17)

    なんと 無理だと思っていた CPU の実装が出来た。EFB にもアクセス可能。ただしメモリは、プログラム 128B(最大) + RAM 16B 。これでまともなコードが書けるかというと 無理そう。もうひとひねり要りそうだ。

    あと、FPGA時計にアラーム機能を追加したり、ALU の検証をしたり。

    後はなにを設計しよう --- 周波数カウンタ? 全然違うものとしては、DC/DC コンバータ? 高速 PWM も可能だし、コンパレータも 差動入力の流用で可能。面白いかも。

      そう言えば 『簡易シグマデルタ ADC』なんてものが、リファレンス・デザインにある。規模は 54 LUT だそうだから、載らないことはなさそう。温度計とか作れないかな? 一体 どれぐらいの周波数(sps)で AD変換可能なのだろう? 手軽に買える範囲だと PIC32MX が 1.1Msps だそうだ。それ以上になると AD9283BRS-80 の 80Msps 。10 Msps 程度がない。6bit でも良いから 簡単にできるのなら、(各種)液晶を RGB モニタに出来るかも。 まぁこの FPGA で作る必要はないのだが、何種類か ADC のモジュールを持っていると応用範囲が広がりそうな気がする。

      ... 高性能なのは、やっぱり無茶か。温度計とかが精々?

      コンパレータとして使うには、LVDS25 などを設定する。設定できるピンには制限がある。xxxT2_0 , xxxC2_0 とか T/C が含まれるピンのペア。T が非反転入力で このピンにアサインする。C は反転入力で指定しなくとも自動で選ばれる。QFN32 では、4/5 , 11/12, 13/14, 21/20, 28/27 の 5 ペアのみ。

      コンパレータとして使う場合、入力電圧の範囲が広いかどうか? ドキュメントには、LVDS を使ったときは、わずかに 低くなると書いてある。 VCCIO - 0.5V まで?

      MachXO2 のデータシートには、 (VCCIO=3.3Vのとき)入力コモンモード電圧 は、0.05V 〜 2.6V と書いてあった。(2.5V のときは 0.05V 〜 2.0V ) あと差動入力閾値 は、± 100mV だそうだ。

      入力電圧の範囲が問題になるのは、非反転入力に ダイレクトに ADC入力 を接続する場合。オペアンプと同じような話で、抵抗を直列に入れて (ADC入力 + 生成電圧) を 仮想GND と比較する場合は関係なくなる。

      ところで ADC が出来たとして データを 10進数に変換するのは、どうしよう? MachXO2-256 の規模では、無理なんじゃないかと思えてきた。可能にする方法として思いつくのは、内部形式を 出力形式に合わせることぐらい。そんなことが出来るものなのかどうか?

追記(2012/6/21)

  • qfn32samples-06.zip 更新版 (2012/06/21)

    ADC は置いておいて ... DAC が出来ないか検討。なんかいけそうなので、コード追加。

    あと MCPU 。オリジナルベースは捨てて、rewrite 版のみ残した。何種類もあってもメンテできないし。

    ところで、Mouser で、1個買いの単価が出ているが、6 グレードが発注可能になった。リードタイムが9週間になっているが、ボチボチか。基板を発注する時期が近づいている。

    アナログ回路を組むなら、VCCIO のいくつかを別電源にしたいところ。なのだが ... ナロー型では、無理だった。ワイド型なら とも思ったのだが、なかなか難しい。VCCIO1 と VCCIO3 の 4pin 分をパターンカットで分離可能にするのが精一杯。

追記(2012/6/23)

    基板変更。VCC, VCCIO 0/2, VCCIO 1/3 をパターンカットで分離可能にした。VCCIO 1, VCCIO 3 だけもさらに分離可能。追加したコンデンサが 4 つになったが、全部裏側。従来どおり 追加コンデンサなしでも使えるのだが、位置の関係で、パターンをいくつかショートさせた方が良い ... という変なものに。まぁ 追加コンデンサ付けるし。

    電源は、VIA を寄せて 2mm ピッチのコネクタにしてみた。

    これをIteadStudio (新サイト)に、ついに発注。発注したのは 2 つで 最初に作ったワイド版と ナロー版。IteadStudio の DRC でチェックしたら、0.3mm のドリルが DRC でエラーになった。0.4mm に変更。

    送料は、$5.59 。

    6/30 : 発送の連絡

    実は、ナロー版について、『問題が出るかもしれない、そのときは相談させてくれ』という内容のメールをもらった。が、なにごともなく製造できたようだ。

    7月9日 20:27 国際交換支店に到着

    来ても眺めるしかないが、いよいよか。
    実を言うと Muser で 6 グレードのやつを 6/24 に発注した。8/27 に発送できる見込みだそうだ。

    7月13日 基板受け取り。

    来た。書くのを忘れていたのだが、両方 1mm 厚にした。大きい方は 10 枚ぴったりで、テープで巻いてあるだけだった。小さい方は 16 枚でパックされていた。

    一見しただけだが、とても作れそうに見えない。まぁチップが来たら頑張ってはみるが。

    8 月 1日 Shipment Notification がキタ。予定よりずいぶんはやい。



追記: 2012/8/26 ようやく組立て



    はんだ付けは、位置さえ決まれば、簡単だった。足がないためか .. ハンダがとなりとくっつかず切れが良い。吸い取り線を使うまでもなかった。

      (注意)簡単なのは、底面と側面のパッドがつながっているタイプなので QFN ならなんでも簡単というわけではない。あと PIC32MX にも QFN があって興味が出てきたのだが、こちらのピッチは、0.65mm 。基板を起こすときに注意しないと。

    今は、とりあえず組み立てただけ。PIC32MX が終わったら、こちらに戻ってくる予定。

    LC など部品についてすっかり忘れていた。

      R2/R3/R5 -- I2C のプルアップや、セラミック発振子を使うときピン間に入れる 1MΩ用。これは今後も使わないようなオプションなので付けない。

      右下のソケットと R1/C5/C6 は、水晶振子を付けるためのもの 1MΩ/22pF で一応付けてみた。

      忘れていたのが、ジャンパなのだが、左下 と 右(ナナメ)の VIA は、電源の引き回しがながいのを嫌う場合のショートカット用。裏面にパスコンを付けるなら不要だし、そもそも不要かも知れない。様子見するので、ショートカットしない。

      あと、上の2x3の VIA は、I/O電圧を 3.3V 以外にする場合に使う。ウラのパターンをカットして使うが、3.3V 以外は考えていないので変更なし。

      左の 300mil 幅のやつは、オプションがほとんどない。(あっても裏面を使う) 。付けたのは、コンデンサ 3 つのみ。

    作ったは良いがどう書き込むかについて。

      JTAGツールとSYNCBB』にある、rtavr_tools-0.10 を使って 書き込む予定だが、MachXO2-1200 しか対応していない。ちょっと修正が必要。

      あと、『MachXO2 1200ZE Breakout ボード』 も 少しの改造でライタにできる。Diamond から直接書き込めるからお薦め。JTAGENB を有効にする オプションで なにもしない回路をコンフィグし、JTAGENB を L にするスライドスイッチを付けるだけ。JTAG 用のコネクタがあるので、そこから 出力。JTAG をチェーンする方法もあるが、パターンカットとか配線とかが面倒。

eagle の ソース

関連記事
posted by すz at 22:11| Comment(0) | TrackBack(0) | MachXO2
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/56290094
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック