2012年02月07日

MachXO2 1200ZE Breakout ボード

2572円と安価に買える FPGA ボードについて。

    追記: 2012/10/8 なんと秋月で取り扱い開始! 2600 円也

    追記: 2013/4/26 LCMXO2-7000HE-B-EVN にグレードアップ。チップ置換であとは同じ。秋月では 3000 円。

     ユーザーズガイドの回路図すら直してない。VCCIO4,5 が VCCIO3 のままになってる。



簡単な説明

    FPGAは、Lattice 社の MachXO2 1200ZE 。価格は $29.99。発表は 2012/1月

    このボードには、FT2232H が載っていて、非常に安易に使える。USB に接続するだけだ。Lattice 社の合成ツール Diamond でもサポートしていて、ビルドしてから、2オペレーションで書き込みが可能。

      (1) Tools→Programmer を選ぶと ダイアログが出る。
      (2) (一回設定した後は) Download ボタンを押す。

    FPGA に接続されているデバイスは、JTAG と シリアル と LED x 8 。

      5mm x 7mm のオシレータのパターンもある。(スタンバイモードがある) ASYMB 24 MHz あたり を Breakout ボードと同時に買っておくのが良さそう。ただし、300 円ぐらいであまり安くないので、後でマルツで買うのも良いかも。
      ちなみに、回路図に載っているのは、CB3LV-3C の 50MHz。

    製品 URL : MachXO2 1200ZE Breakout Board Evaluation Kit Resources

MachXO 2280 Breakout ボード との違い

    MachXO 2280 Breakout ボード もまた、同価格で安価に入手できる。こちらの方が規模が大きく、使えるピンの数も多い。ただし、EBR RAM は、9kb がたったの 3 つ。MachXO2 1200ZE は、7 つあり プログラムに使えるメモリを 4KB は割り当てられる。

    MachXO2 1200ZE Breakout ボード の方は、FT2232H の機能を流用しやすくなっている。JTAGENB ピンが コネクタに出ているので、Disable すれば JTAG ボードとして流用可能。Serial ( BDBUS0-6) も ジャンパすれば FPGA で使える。

    ちょっと FPGA を試してみるとかといった使い方には向いていそうだ。

      追記:JTAG として使えないようにするには、config で JTAG_PORT を DISABLE に設定する。その場合 JTAGENB ピンが専用ピンになり、H レベルにすることで、JTAG が使えるようになる。

      要するに JTAG 関係のピンを全部 HI-Z にして、 JTAG_PORT を DISABLEにした config データを書き込めば、JTAG を外部回路用に引き出せる。JTAGENB ピンを H レベルにするスイッチを付けて ON にすれば再度JTAG を使用できる。

      (追記2)JTAG コネクタは、Lattice 用 8pin タイプ

      (1) (8)
        3V3 TDO TDI NC NC TMS GND TCK

      こうなっている。 デジタルデザインテクノロジー No.1(ISBN:9784789849401 : ググるとまだ売っている)の XP2 基板 に接続する場合は、(1) を 除いて 接続すれば良さそう。

      追記(注意): 1200ZE は、低消費電力向けチップで、スピードグレードは 、1 。HC あるいは HE が最大周波数 150 MHz のところ ZE は、60 MHz 。趣味の範囲できっちり守るべきかどうかは分からないが、あまり高速で動かすものではないのは確か。

      追記: BDBUS のシリアルを使うには、裏面の R14〜R21 をジャンパするか、そのパターンを使って引き出す。割り当ては、

      R14 BDBUS0 TXD
      R15 BDBUS1 RXD
      R16 BDBUS2 RTS
      R17 BDBUS3 CTS
      R18 BDBUS4 DTR
      R20 BDBUS5 DSR
      R21 BDBUS6 DCD


MachXO2 7000 が購入可能になっている。

    思いのほか安くて驚いた。TQ144 の LCMXO2-7000HE-4TG144C が 1239 円。4000 までは EBR SRAM が少なく面白くないのだが、これは 9kb の EBR SRAM が 26 個付いている。

      Spartan-6 LX9 も 1346 円と同じような価格。こちらは 18kb の ブロック RAM が 32 個。規模も大きいんだろう。そういえば MachXO2 は 乗算器もない。いままで 1200 しかなかったのが、7000 になって喜んでみたが、実は大したことはないのかも。

      ちなみに、MachXO2 1200 は、Spartan-3A 50 より規模が小さい。50A は、704 スライスだが、1200 は、640。50A のブロックRAM は、18kb x 3 で 1200 の 9kb x 7 と同じようなもの。
      MachXO2 7000 は、3442 で 400A の 3584 スライス と同じぐらい。400A のブロックRAM は、18kb x 16 なので、9kb x 26 の 7000 はちょっと少ない。

    TQ144 の 7000ZE とか 7000HE とかを MachXO2 1200ZE Breakout ボード のチップと入れ替えられると便利なような気がするのだが ...

    外すのは、SMD取り外しキット:1575円を使うとして ... さて。

    追記: BSDLファイルを比べてみたが、載せ替え自体は可能なようだ。

      4000/7000 2000 1200
      30 VCCIO3 VCCIO3 VCCIO3
      7 VCCIO4 VCCIO4 VCCIO3
      16 VCCIO5 VCCIO5 VCCIO3

      15 v NC NC
      17 v NC NC
      31 v NC NC
      63 v NC NC
      87 v v NC
      89 v v NC
      103 v NC NC
      129 NC NC NC

      電源,NC の違いは、こう。2000 以上はバンク 4,5 があるが、VCCIO3 が割り当てられている。あと、1200 は、NC が多いため、載せ替えると使えないピンが出てくる。ちなみに信号名の割り当ては違うが、ピン番号で指定するからあまり関係ない。機能のピンの割り当ては同じようだが未検証。JTAG や I2C は同じだったが、他は見てない。

      ところで、HC の BSDL ファイルしかないが、HE,ZE も信号線は同じなんだろう。HC はレギュレータ付きだが、HE,ZE との違いは良く分からない。(レギュレータ用のピンが見つからない。むしろ HE,ZE 用に見える。) まぁ 7000HE,7000ZE の載せ替えは可能そうだ。

      ついでなので、機能のピンの割り当てに付いても調べた。

      4000/7000 2000 1200

      5 PCLKT5_0 PCLKT4_0 PCLKT3_2
      6 PCLKC5_0 PCLKC5_0 PCLKC3_2
      19 PCLKT4_0 PCLKT4_0 PCLKT3_1
      20 PCLKC4_0 PCLKC4_0 PCLKC3_1

      104 R_GPLLC_IN
      105 R_GPLLT_IN
      106 R_GPLLC_FB
      107 R_GPLLT_FB
      111 R_GPLLC_MFGOUT2
      112 R_GPLLT_MFGOUT2

      2000 以上は、バンクの関係でクロック入力の名前が変わった。あと、4000/7000 は PLL が増えた。

      違いは、これだけ。これなら、ターゲットデバイスを変更するだけで 1200 用の コードもそのまま動く。

      追記: HC と HE/ZE の BSDL ファイル がリリースされていたので比較してみた。

      どうも電源ピンの定義は同じようだ。違いは ID 。

      device code 0x012B 2043 -- 1200ZE/HE
      device code 0x012B 3043 -- 2000ZE/HE
      device code 0x012B 4043 -- 4000ZE/HE
      device code 0x012B 5043 -- 7000ZE/HE

      device code 0x012B A043 -- 1200HC
      device code 0x012B B043 -- 2000HC
      device code 0x012B C043 -- 4000HC
      device code 0x012B D043 -- 7000HC

Lattice (MachXO2) がお気に入りの理由

  • 開発ツールが小さい

    小さいといっても Lattice Diamond は、1.7GB もあるのだが ... それでも Xilinx の ISE なんかと比べるとはるかに小さい。使い勝手も良いみたいだし、気に入っている。

  • Digikey で買える

    Digikey で買えないものは候補にならないのだが、幸い購入可能。電子工作レベルで使える TQFP 100 や 144 品の種類も豊富にあるのが良い。

    TQFP 100 だと、2000 まで 、144 では 7000 まで。

  • お手軽

    FLASH を内臓しているし、レギュレータや 内臓クロックもあるので、チップ単体で 動かすことも可能。

    開発ツールもあわせて、総じてお手軽に使えるというのが良い。

    ついでに書いておくと ライセンスキーは、Mac アドレスに対して発行される。この Mac アドレスは、USB Wifi ドングルのものでもよい。要するに インターネットカフェのようなところでも実行が可能なのだ。プログラムも小さめなので、インストール時間は短めで 実際に 利用可能。

      内蔵クロックは、133 MHz を 1 , 1.5 , 2, 2.5 ... 62 で分周した周波数を出力可能。64 通りの設定がある。精度は±5% だそうで、あまりあてにできないが、とりあえずは便利に使える。MachXO も 持っているのだが、周波数は設定できず 20MHz (18 MHz - 26 MHz) 。( MachXO2 で設定できる近い周波数は 19.00 Mhz ?)

        分周比は、1 〜 16 の範囲では、0.5 刻み。16 〜 32 は 1 刻み、32 〜 62 では 2 刻み。

      ちなみに Breakout ボードには、3.3v 5mmx7mm のオシレータも載せられるようになっている。PLL もあるので、周波数を変換することも出来る。

  • 残念な点

    残念な点としては、規模が小さいこと。ブロックメモリも少ない。自作コアだと 1200 でようやく載るレベル。

    内臓の ハードマクロ の I2C /SPI/ TIMER を生かせば、結構規模を節約できそうだが、専用設計になってしまうのでちょっと面白くない。

    ただ、TQFP 144 に限ると規模の大きいものの品種は限られる。Spartan-6 LX9 , Lattice XP2-8 , MachXO2 7000 ぐらいか。それ以下だと XP2-5 , Spartan-3E 250E , MachXO2 4000 。Spartan-6 LX9 使えば良いのだが、xilinx の ISE が嫌なら MachXO2 7000 とかも良いかなという感じ。

  • 参考 文献

自作コアと MachXO2

    以前 AVR互換COREを作成したのだが、MachXO2 でとりあえず 合成できるところまで確認して 凍結していた。

      AVR互換CORE といっても、互換なのは、米粒AVR の ATtiny10 系統。Mega や Tiny 互換ではなく、AT90S の AVR とも互換ではない。

    最後のバージョンは、rtavr-0.9.3.tar.gz

    README を読み返すと

    (4-A) クイックビルド 『WebPACK ISE』

    以下に 3 種類の 標準的な構成を示します。

    (1) rtavr を top-layer にした 最小構成

    configs/50A/rtavr_defs.v と configs/rtavr_common.v , soc/*.v
    および、tests/tbi_001/rom_data.mem を使い 『WebPACK ISE』を使用して
    Implement します。

    この構成は、USART および SPI を含み実用的なものでありながら、
    XC3S50A で Implement 可能なように しています。

    なお、USART , SPI については、レジスタの定数化により機能を縮小
    しています。 使用する機能に適合しない場合は、rtavr_defs.v を
    編集する必要があります。

    と書いてあるが、MachXO2 では、configs/1200HC/rtavr_defs.v を使用することで 一応合成できるようになっている。できるのは 50A と同等の機能なのだが、MachXO2 では、ROM_PSEUDO_DP が define されて DUALPORT の ROM を使わないようにしている。DUAL PORT を使うと ROM データの READ で 8bit の 別ポートを使うが、define すると 16bit の ROM からデータを読み込むようになり、規模が少し増える。

      こうした理由は、Diamond が DUALPORT ROM を推論してくれないため。最新版の 1.4.1 でも試したがだめだった。

    で、できたものは、ちょっとのデバッグで動くような気がしているが、試していない。

    デバッグするためのツールを作成している段階で放置していたのだった。MachXO2 1200ZE Breakout ボード を reference として使うことにして 作成を再開したい。

PORTの実装

    実は、PORT の 入出力の動的変更がうまく行っていない(かも)
    Lattice のリファレンスデザインを見ると

    inout sda_pin;
    wire scl_pin;
    assign sda_pin = sda ? 1'bz : 1'b0;

    こんな感じで記述されていた。データバスも近い記述で 1'bz の部分が出力データで可変になっている。

    現在のコードをこれに準じた記述に変更したほうがよいかも。ただし、プルアップ/プルダウンを 制御するのは無理そう。制御用の線を割り当てて 信号線と 抵抗でつなぐしかないか。

rtavr 更新

  • rtavr-0.9.4.tar.gz
  • rtavr_tools-0.5.tar.gz

    ここで書くべき内容ではないのだが、XO2 Breakout ボードに対応したものを作って更新した。

    ... といっても対応しただけで、内容的には進展なし。

    rtavr の方は、JTAG ポート経由でアクセスできる 2 つのポートがあるのだが、ここに ISP と SPI(SLAVE) を接続。あと USART の TXD/RXD を シリアルに接続。LED の D1/D2 に PORT を接続。

    これが動けば結構すごいと思うのだが、残念ながら規模を見るのが目的のもので、動作は期待できない。

    device utilization summary: XO2
    PIO (prelim) 14/108 12% used
    14/108 12% bonded
    SLICE 590/640 92% used
    OSC 1/1 100% used
    JTAG 1/1 100% used
    EBR 6/7 85% used

    規模的には、Spartan-3A 50A より少し余裕がある感じ。 synplify Pro を使っているのだが、Xilinx の標準ツールより効率が良い?

      上記は、Diamond 1.1 の結果。1.4 だと 612 SLICE (95%) を消費している。

      あと、

    ISP は、attiny10 系のものをベースに簡易化したもので、ROM の読み書きだけができる機能。(ツールは未対応)

    rtavr_tools の方は、JTAG 経由の通信が本当にできるかのテストなど。JEDEC ファイル の書き込みとかベリファイも仕込んであるが、未テスト。MachXO2 はちょっと複雑で 大分デバッグが必要そう。セキュリティ関係の機能もあるので不用意にテストすると 書き込めなくなる恐れがあり、デバッグも慎重にやる必要がある。

      progname : [rtavr_tool.exe]
      cbl_name = mpsse
      cbl_type = ft245r
      port = ft0
      bitclock = 115200.000
      baudrate = 115200
      ispdelay = 0
      rtavr_tool.exe: BitBang OK
      rtavr_tool.exe: drain OK
      open OK
      bitclock = 102400.000
      ft245r: bitclk 102400 -> ft baud 38400
      ft245r: bitclk 102400 -> ft baud 38400
      load_conf LCMXO2_1200
      -- device_type 12b2
      -- sucsess
      -- device_id 012b2043
      cmd> spi_test
      spi_test -- sel_chan test
      spi_test -- spi_echo test1
      30 00 (00)
      31 30 (18)
      32 31 (18)
      33 32 (19)
      34 33 (19)
      5535 3455 (1a2a)
      aa5536 35aa55 (1ad52a)
      37 36 (1b)
      38 37 (1b)
      39 38 (1c)
      ff 39 (1c)
      ff ff (7f)
      spi_test done
      cmd>

    spi_test で 入力データを echo back させるぐらいは出来ている。といっても、rtavr の SPI と同じコードではなく簡易なものでのテスト。すり合わせも出来ていないので、rtavr の方で動くことは期待できない。

    まぁ、いまのところはこんな感じ。

SVF ファイルについて

    忘却が激しいのでメモ。

    SVF ファイルとは、コンフィグする際のシーケンスが記述してあるもので、これを解析してツールの機能を作ろうとしている。

    論理合成して作成されるのは、JEDEC ファイルで、SVF ファイルを作成するには、ispVM を起動する。SVF アイコンで SVF ファイルに変換するのだが、さまざまなオプションがある。Flash に対して Erase/Write/Verify の組み合わせがあるし、background モードというのもある。

    それに加えて SRAM への直接 Write という機能もある。Flash を汚さないし便利そうな気がするのだが、JEDEC ファイル を bit ファイルに変換しないといけない。変換は UFW アイコンで行う。

      ちなみに、Flash のデータは圧縮されている。SRAM へ直接書きこむデータはたぶん圧縮されていない。伸張ロジックを知っていないと JEDEC ファイルを書き込むようには出来ない。

      あと、EBR RAM は SRAM に含まれているのかどうか? EBR RAM は Flash からのロードしかできないような気がするのだがどうなんだろう?

      ちなみに、MachXO や XP2 は、Flash 用と同じデータを SRAM に書き込める。

    注意) 上記は、Diamond 1.1 での話。1.4 を試してみると ... Diamond に ispVM は組み込まれなくなった。ispVM は別のソフトとしてインストールすることができる。Programmer を動かすと xcf ファイルが作成されるようなので、これを ispVM で Open すると上記のオペレーションが出来るようになるようだ。

Lattice Mico8 について

    Lattice だと Mico8 / Mico32 という 2 つの IP プロセッサがある。このうち 8bit の Mico8 は、結構 AVR に近い感じ。驚いたことに gcc も移植されている。

    Mico8 は、レジスタ数 32 のタイプと 16 のタイプがある。16 のタイプは MachXO2 で 262 LUT で組めるそうだ。(32 は 313)

      自作コアの RTAVR は レジスタ数 16 だが configs/core_test で core のみ生成すると 660 LUT 。(GPR_16 というシュリンクオプションなしだと 690)。結構頑張ったつもりなのだが...

      まぁ、Mico8 の方は パイプラインプロセッサでないし、命令も 18 bit 使っていたり、AVR のような 特殊な命令コードないしで、差が出るのは仕方がない。

    ところで、Mico8 のアドレス空間は 8bit しかない。16bit あるいはそれ以上の空間にアクセスするには、Page Pointer というのを使うそうだ。要するにバンク切り替え。

    プログラム空間は、12bit ある。18bit x 4K であり 8KB の AVR Tiny などと同じぐらい。ただし、プログラム空間のメモリをデータとして使うことはできない。

    実をいうと、自作AVRコアは、gcc が使え、FPGA メーカを選ばない (規模が小さい)8bit のプロセッサを目指した。Mico8 で gcc が使えるのを知っていたら、違うものを作っていたかも知れない。まぁ、FPGA メーカが作るコアは、自社のデバイスに最適化するから 他社のデバイスに移植するようなものではない。移植性が特徴として残っているから これで良かったとは思うのだが...

MachXO2 Breakout ボードのピン配置

    J4 J3
    (1)(2) (1)(2)
    3V3 VCCIO3 1V2 VCCIO1
    3V3 NC 1V2 NC
    PL2A 1 2 PL2B (TXD)PR10C 74 73 PR10D(RXD)
    PL2C 3 4 PL2D (CTS)PR10A 76 75 PR10B(RTS)
    PL3A 5 6 PL3B GND GND
    PL3C 9 10 PL3D (DCD)PR9C 78 77 PR9D(DSR)
    GND GND PR9A 82 81 PR9B(DTR)
    PL4A 11 12 PL4B GND GND
    PL4C 13 14 PL4D PR8C 84 83 PR8D
    GND GND PR8A 86 85 PR8B
    PL5A 19 20 PL5B GND GND
    PL5C 21 22 PL5D PR5C 92 91 PR5D
    GND GND PR5A 94 93 PR5B
    PL8A 23 24 PL8B GND GND
    PL8C 25 26 PL8D PR4C 96 95 PR4D
    GND GND (LED D2)PR4A 98 97 PR4B(LED D1)
    (EXTOSC)PL9A 27 28 PL9B GND GND
    GND GND (LED D4)PR3A 100 99 PR3B(LED D3)
    (EXTOSC_EN)PL10A 32 33 PL10B (LED D6)PR2C 105 104 PR2D(LED D5)
    PL10C 34 35 PL10D (LED D8)PR2A 107 106 PR2B(LED D7)

    内側の2 列分の信号配置。

    5cm x 5cm で基板を作れば 使えるかと思ったのだが、コネクタ間の間隔は 5cm を超えていた。あと、内部機能との重複が多い。重複を退けると 37 pin 。SRAM には十分だが、SDR SDRAM 16bit には少し足りない。(1200ZE では、全然高速に動かせないのでオーバースペック)

      追記: 37 pin では、4Mbit (16bit幅) の CY7C1041DV33(10ns) の駆動は無理だった。一応訂正。

      追記: シリアルのピンは、実際には接続されていない。抵抗パターンが 7 つ並んでいる所があるのだが、そこをジャンパする必要がある。


    J2 J5
    (1)(2) (1)(2)
    NC VCCIO0 NC VCCIO2
    PT17D/DONE 109 110 PT17C/INTn +-PB20D 71 69 PB20B-+
    PT17B 111 112 PT17A (R39) +-PB20C 70 68 PB20A-+ (R37)
    GND GND +-PB18D 67 62 PB18B-+
    PT16D 113 114 PT16C (R35) +-PB18C 65 61 PB18A-+ (R33)
    PT16B 115 117 PT15A GND GND
    PT15D/PROGn 119 120 PT15C/JTAGen +-PB15D 60 58 PB15B-+
    GND GND (R31) +-PB15C 59 57 PB15A-+ (R29)
    PT15B 121 122 PT15A GND GND
    (SDA)PT12D 125 126 PT12C(SCL) +-PB11B 56 54 PB11D-+
    PT12B 127 128 PT12A (R41) +-PB11A 55 52 PC11C-+ (R40)
    GND GND GND GND
    PT11D/TMS 130 131 PT11C/TCK +-PB9B 50 48 PB9D-+
    PT11B 132 133 PT11A (R38) +-PB9A 49 47 PB9C-+ (R36)
    PT10D/TDI 136 137 PT10C/TDO GND GND
    GND GND +-PB6D 45 43 PB6B-+
         PT10B 138 139 PT10A (R34) +-PB6C 44 42 PB6A-+ (R32)
    PT9D 140 141 PT9C GND GND
    PT9B 142 143 PT9A +-PB4D 41 39 PB4B-+
    GND GND (R30) +-PB4C 40 38 PB4A-+ (R28)

    外側の2列はこんな感じ。(SDA),(SCL) は、外部抵抗でプルアップされている。こちらは、JTAG 関係を除いて 48 pin 分。

      訂正: 一番右の J5 は、全て差動受信用に 100 Ωのターミネータを入れられる(抵抗は空きパターン)。あるいは、10kΩとか入れて動的プルアップに流用するとかも可能。といっても 小さいのでハンダ付けはなかなか厳しい。

    EXOSC , EXOSC_EN は、5mm x 7mm のオシレータのパターンにつながっている。スタンバイモードがある ASYMB 24 MHz とか CB3LV-3C が digikey で買えるので、Breakout ボードと同時に買っておくのが良さそう。ただし、300 円程する。

    PLL があるので、発振周波数は、割りとなんでも良い。PLL は、EHXPLLJ というのを使うのだが、基本的に

      f = CLKI/CLKI_DIV(1-40) x CLKFB_DIV(1-40) x CLKOP_DIV(1-128:default 8)

    の周波数が VCO の周波数になるようだ。実際に合成して Warning を見ると、VCO 周波数は、400 〜 800 MHz の範囲でないといけないらしい。... が、多分間違いで、データシートを見ると 200 〜 800 MHz の範囲。CLKOP_DIV が 8 なら CLKOP の範囲は、 25MHz 〜 100 MHz ということに。

    CLKOP の出力は

      f = CLKI/CLKI_DIV(1-40) x CLKFB_DIV(1-40)

    だが、CLKOS, CLKOS2, CLKOS3 は、

      f = CLKI/CLKI_DIV(1-40) x CLKFB_DIV(1-40) x CLKOP_DIV(1-128:default 8) / CLKOSn_DIV(1-128:default 8)

    になるみたい。ただし、あくまで基本で、もっと多彩な機能がある。

これで何をしたいのか?

    MachXO2 breakout ボードは、1200ZE で高速でもなく、規模も小さい。自作AVRコアのテストには便利だから、当面その目的で使うつもりなのだが、実用として考えたときにこれで何が出来るのだろう?

    だいたい 100 pin の 1200 は、1 個 630 円ぐらい。( 256 まで規模を落とすと 365 円 まで下がる。) 随分安くなったものだが、AVR と比べると大分高い。32 bit の Coretex-M0 や PIC32 などと比べると価格差が大分小さくなるが、今度は実現できる機能差が大きい。

    ついでに書いておくと 100 pin だと 2000 がある。こちらは少しだけ高くなって 875 円。あと、144 pin だと単価が上がる。1200 で 751 円、2000 で 991 円。

    さて、こういう条件なのだが ...

  • とりあえず、MachXO2 Breakout ボードを使う方向で考えてみる。安く手に入るし、USB インターフェイスが付いているので、ソフトをなんとかすれば、HOST との通信ができる。シリアルだと最大 12Mbaud までだが、MPSSE だと 30Mbps (3.75 MB/sec)。接続されている範囲では、これが最高速度。(実は Fast Serial の方が速くできるかも知れないのだが、あまり使われているようには思えないし、とりあえず無視)

  • 開発専用だと、作ったモジュールの単体テストとかには便利そう。そういえば、FPGA 同士で通信するモジュールを作りたかったのだった。この場合 いったん外に出して外側で接続すれば、単体テストはできそう。

  • 秋月の480x272 LCD とかのインターフェイス。PC から垂れ流した データをそのまま表示してもなんとか見えそう。ただ帯域が少々足りない。キャラクタディスプレーとかだと内蔵 RAM でもいけるから、端末にするのも一興か。

  • ロジアナも工夫次第。圧縮して 内蔵 RAM をバッファにするとかすれば、測定対象次第で結構取り込めるかも。外付け RAM を付ければ良いのだが、ZE で遅いので 苦労しがいがない。内蔵だけで工夫するのが楽しそう。

  • チップ単体で使うにしても HOST との通信はクリアしておきたい。USB だと SPI で扱える MAX3421E とか SL811HSTが有名だが、1000 円ぐらいする。これなら USB が付いた MCU の方が安いと思える価格。作れるものなのかどうか分からないが、複数チャネルが扱える (12Mbps)USB コントローラなんてのが作れると良さそうな気がする。

Mouser で、WLCS-25 (1200ZE) が 出ている

    在庫 0 だが、1個単位で買える。20 個なら単価 400 円。これを使えば 24 pin DIP (とか)の モジュールを作れそう。最も、基板をなんとか出来たときの話。25 pin とは言え 0.4mm ピッチの BGA だから 趣味のレベルでは難しい。BSDLファイルを見ると、JTAG 4 , GND 2 , VCC 2, VCCIO0,VCCIO2 の 10 pin を除く 15 pin が 入出力に使える。JTAGENB もあるし、config 用の PROGRAMN/INITN/DONE もあるから 正確ではない。あと I2C,SPI のハードマクロの PIN も 。

    1.2V レギュレータ 載せた上で 24 pin ナロー DIP のモジュールとか、誰か作らないかなぁ ... と思ってみたり。


    こんなの(8ビット双方向ロジックレベル変換モジュール)があると 嬉しいような ...

      1 2 3 4 5
      A PT17C/INITN PT15D/PROGRAMN PT12D/SDA TCK TDO
      B PT17D/DONE PT15C/JTAGENB PT12C/SC TMS VCC
      C PT16A VCCIO0 GND VCCIO2 TDI
      D VCC PT12A/PCLKT0_1 GND PB6D/SPISO PB6C/MCLK
      E PB20D/SISPI PB20C PB11A/PCLKT2_1 PB9A/PCLKT2_0 PB4C

      とりあえず、ピン配置を作ってみた。(行と列は逆かも) 。外側の 16 ピンだけで なんとかならないかと思ったが無理。やっぱり 4 層基板 + 極小スルーホールでないと。

    ところで、これの最高周波数は 133 MHz になっている。最も遅いのは、1200ZE 100pin C の 104 MHz 。あと スピードクラス 4 の I は、550 MHz 。60 MHz/150 MHz というのは、実用回路の目安?

    追記: Aliexpress の基板作成サービス

      Aliexpress にも 基板作成サービスをしているところがある。

      Loision's PCB factory だと、4 層基板のサービスがある。Min. Hole Size: 0.2mm, Min. Line Width: 4MIL だそうで、 WLCS-25 のモジュール基板を作成できるかも知れない。
      基板さえ作ることが出来れば、ホットプレート・リフローとかの方法でハンダ付けは可能そう。

      ITeadStudio でも 4層基板 を扱っている。5cm x 5cm (10pcs) で $65 。2層 $9.9 なのと比べると大違いだが これでも安いのかも。ただ、ここだと Hole の最小サイズは 0.3mm で 0.4mm ピッチの BGA のパターンは無理。

Synplify Pro と LSE

    論理合成エンジンに Synplify Pro と LSE が選べる。デフォルトは、Synplify Pro だからそのまま使えば良さそうなのだが、ちょっと 気持ちが悪い Warning がある。

      Initial statement will only initialize memories through the usage of $readmemh and $readmemb. Everything else is ignored

    というもので、どうも initail 文は、$readmemh とかを使わないケースでは意味がないらしい。では、初期値は 0 固定なのか? ... というと良く分からない。まぁ、rtavr 本体は、GPR(汎用レジスタ) と RAM データの初期化にしか使っていないので良いのだが、isp.v の状態変数は、initial 文を使っている。初期値は 0 に統一しているので 0 固定なら問題ないのだが、気になる。

    LSE を使ってみると、そういう Warning は出ない。ただ、同じものを合成しても Synplify Pro は、612/640 スライスだったのが、LSE では、617/640 スライスとちょっと増える。Diamond 1.1 を使っていたときは、Synplify Pro は 590/640 スライスで、LSE はさらに規模が小さかった。増えるのはバグ修正が理由だとすれば、Diamond 1.1 は、結構バグがあったのかも。

    ただ、それでも XilinX の Spartan-3A より効率が良く、704 スライスの 50A より回路が入るようだ。

      Number of ripple logic: 81 (162 LUT4s)

    ひょっとすると、リップルモードの言うのが肝なのかも。LUT4 の代わりに、2bit カウンタとか 2bit 加算回路、乗算回路として使えるようになっている。

    GPR_16 というシュリンクオプションなしで合成すると 規模が 30 ほど増えるはず(24 スライス分 分散 RAM に 余計に使用する)なのだが、ためしにやってみたら Synplify Pro で 623/640 , LSE で 639/640 と なんとか収めて来た。ひょっとしたら余分な LUT が最適化(遅延低減)のために使われるのかも知れない。

MachXO2 Breakout ボードと 秋月 C 基板

    MachXO2 Breakout ボードと 秋月 C 基板を現物合わせしてみたところ、長辺 を横にして、外側の 1 列づつ まで覆えた。ただし、短辺のスルーホールは 17穴なので、20x2 コネクタ全部は使えない。 あと、外側だとギリギリなので、13 穴しかない。

    3V3 電源 は、上にしか出ていないので、1 番 PIN まで上に寄せて 装着することになりそう。そうすると使えないピンが出てきて面白くない。ここは、B 基板を使うのが良いのかも知れない。

    あと両脇について。両脇は C 基板がかぶさるので、上方向にピン/フレームを出すのはどうかと思う。横方向外側に出した方が良さそう。

    内側 の方は、フレームで良さそう。ちなみに、2 列のフレームを使っても全部のピンを接続する必要はない。80ピン 全部 接続する と外すのに随分力がいる。適当に間引いた方が良いと思う。

rtavr 更新

  • rtavr-0.9.5.tar.gz
  • rtavr_tools-0.6.tar.gz

    PLL を組み込んで 四相クロック化。rtavr_tools の方も PLL を組み込んだテスト回路にした。

    四相クロック化をすると何故か随分と規模が減った。Synplify Pro で 623/640 だったのが、 572/640 まで減った。これは、GPR_16 というシュリンクオプションなし。

    LSE でも 639/640 だったのが、607/640 に。

    以前は、2 倍クロック + ロジックで生成した 標準クロック。それを元にして、さらにタイミングを作っている。それ以外に シフトレジスタ x 4 を使った擬似四相クロック のモードもある。

    たぶん 四相クロック が一番すなおで、実際のクロックラインが少ないんだろう。... ということで納得しておこう。

追記 dealextreame の基板
posted by すz at 17:54| Comment(0) | TrackBack(0) | MachXO2
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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