« 2019年11月 | トップページ | 2020年1月 »

2019.12.31

2019年をふりかえって

今年はいろいろ大変でした。

ざっと振り返ってみると、2018年12月に100㎡あった旧事務所を退去し、バーチャルオフィスやコワーキングスペースを駆使して仕事をすることにしました。

コワーキングスペース、バーチャルオフィス、レンタル倉庫2件、倉庫1件、自宅。全部で6つの不動産を借りるという不動産王でした。(意味が違う( ;∀;))

事務所を手放した目的はいろいろあるのですが、14年間溜まりに溜まったゴミを捨て、すっきりして、新しい仕事を始めたかったからというところでしょうか。

 

従業員ゼロの状態からの再スタートだったので、実装工場の手配や販売事務まで全部自分でやることになりました。

最初、部品や資材を3か所の倉庫に分散させてしまったので、いつもの基板を作るための部品を集めるだけで区内を自転車で走り回るという超効率の悪いことをしていました。

そんな中で悟ったのは、

  • 原材料(抵抗とかコンデンサ)を蓄えてはいけない
  • 備蓄してよいのは、製品と、製品に近い仕掛品
  • 製造が容易ではない少数の部品以外は常に新品を使う。Digikeyは私のための大きな倉庫

ということでした。

普通、実装用の抵抗やコンデンサ、ICを買う時は少し多めに買いますが、残ったものは次回の実装に回すのではなく容赦なく捨てるということです。そうしないと、前回の残りを数えるという作業からスタートすることになり時間が無駄になります。(もちろん、Webアプリを作って残数や購入年月日をデータベース管理しているのですが、それでも残り部品を使うということは手間を増やすことになります。)

原材料や、思いの詰まったもの、書類を一気に捨てることはできないから、一度倉庫を借りてそこに詰め込んでおき、後で暇になったら捨てようと思っていたのですが、暇になることなんてありませんでした。何のかんので1年間借りてしまいました。来年こそは全部捨てなきゃ。

 

9月に入り、さすがに自転車で走ることに疲れてきました。ついに9㎡で家賃20万円のレンタルオフィスを借りることにしました。

坪単価にすると6万円くらいなのでしょう。すごく狭くて高いけど、快適です。

雑居ビルとは違い、受付から、荷物受け取り、コーヒー、掃除、トイレ、ネット回線、無線LAN、会議室。何でもついてきます。本当に借りてよかったと思います。

振り返ってみると、

  • 1月
    • DACから完璧な信号が出せるように研究開始
    • Cosmo-Z Miniの特定用途版を設計開始
    • 旧事務所の不動産会社とオーナーが保証金を返さないので内容証明を送ったら、相手も弁護士を付けて内容証明返しをされた
  • 2月
    • 高速DACから完璧な信号が出せるようになった
    • ZynqberryでRasPiカメラ2.1が使えることの確認
    • MITOUJTAG 3.41のリリース
    • あまりにも頻繁に回路が壊れるので厄除祈願
    • Cosmo-Z Miniの特定用途版設計の続き
    • Cosmo-K DVIを製造したが動かない
  • 3月
    • Cosmo-Z Miniの特定用途版設計の完成
    • 怒涛のごとく納品
    • Cosmo-K DVIを製造して動かない理由は実装不良だった
    •  
  • 4月
    • 令和版Spartan-7ボードの設計開始
    • MITOUJTAGでDigilentの旧USB-JTAG Programming Cableを使えるようにした
    • ZYNQのEMIO経由でI2Cを動かす方法を解明
    • ZYNQのLinuxからLAN9514を操作する方法
    • MITOUJTAG Proで大規模基板のバウンダリスキャンテストを受注
    • VivadoのTclの理解
  • 5月
    • VivadoをGitと連携させて使うTclスクリプトの作成
    • EZ-USB FX3とFPGAをC#から動かす
  • 6月
    • AXI DataMoverの実験
  • 7月
    • ドイツも輸出管理厳格化。UltraScale+ボードの輸入が面倒に
    • ZynqberryにUbuntu19を入れる
  • 8月
    • ZynqberryのUbuntu18.04インストールイメージを作る
    • Cosmo-ZでWebSocketを動かし、オシロアプリを作成開始
  • 9月
    • 新しいオフィスを借りる
    • Vivado 2018.2以降とそれ以前のFSBLの違いを解明
    • Linuxのカーネルモジュールに関する理解
    • ZYNQ Linuxに最適なUSB-WiFiはWDC-150SU2Mと断定
  • 10月
    • ZYNQ EPP7000の低消費電力化の研究
    • ZYNQのGigabitEtherの性能測定
    • trenz.jpサイトをhttps化
    • ZYNQ LinuxのUSB-WiFi速度を測定
  • 11月
    • ZYNQ EPP7000の低消費電力化の研究
    • ET/IoTが落ちぶれているのを見て慨嘆
    • VivadoのBlock Designのアイコンに任意の絵に変える
  • 12月
    • Tang nanoのJTAG調査
    • GOWINのケーブルやボードを輸入
    • Spartan-7ボードの設計再開と実装完了

今年はそんなに多くの受託開発は受けていなかったのですが、やはり実装用部品の仕入や検査を自分で行わなければならないため時間を取られてしまったのと、オフィスと倉庫が分散して効率が悪く、開発にあまり時間を回せなかったなと反省しています。

 

| | コメント (0)

2019.12.30

年末年始の営業と限定販売

特殊電子回路は、年末年始も休まずに営業します ( ノД`)シクシク…

社長一人の会社ですが、働き方改革をして、こうなりました。

もとい、

特電のFPGAボード製品などはAmazonの倉庫に預けてあるのでクリック一つで即日出荷できるし、Amazonに預けていない製品は自宅から近い事務所に行って簡単に出荷できるようになったというのが大きいです。事務の効率化を突き詰めたら、年中無休にできたという感じですね。

それに、年末年始は取引先企業が休んでいて問い合わせは来ないし、製造をしようにも外注先の工場が休んでいるし、UPSも来ないので開発に専念できるのです。それならばサポートと開発は実質的に年中無休じゃないかということで、年中無休の看板を出すことにしたのです。

世間様が休んでいる間に、「1月8日まで送料無料」というキャンペーンを行います。

まず、大変長らくお待たせいたしました。Zynqberryスタータキットを販売再開します。

Enaonexvaailcwo

これは、RaspberryPi形状のZYNQボードで、ZYNQが乗ったUbuntu 18が動きます。

使い方はQiitaに前編、後編に分けて書きました。

UltraScale+と比べると処理能力は低いのですが、家庭用サーバとしても最適だし、消費電力も少ないので常時稼働させても安心です。

在庫はあと7台しかないので、お早めに。売り切れると正月休み明けまで製造ができません。

次に、MITOUJTAG Lightを販売再開します。MITOUJTAG Lightは、自分でFPGAの基板を作ったりするハイレベルなエンジニアのためのツールで、個人ユーザ向けという位置づけです。

フルセットPが、先着5名様向けに49800円(税込)で送料込みとなっています。

MITOUJTAG Lightについての詳細はこちらをご覧ください。

Mjjpkj

最後は、GOWINのFPGAを搭載したトレンツエレクトロニック社製ボードとGOWIN FPGAダウンロードケーブルの販売です。

TEC0117-01は、8MByteのSDRAMを内蔵したGW1NR-9を搭載しています。LUT数は8640個で、TangNanoで使われているGW1N-1の7.5倍もあります。

製品販売ページはこちらをご覧ください。

ただ、販売開始とほぼ同時に売り切れましたので、次回の入荷は1月の中旬~下旬となります。

Ena5vluucaayp7p

FPGAダウンロードケーブルはこちらです。

詳しいことはわかりませんが、これでGOWINのFPGAに何でも書き込めるのではないかと思います。

https://www.tokudenkairo.co.jp/quote/detail.php?pid=29175

Ena1khu0aawu0m

在庫は2台なので、どうかお早めに。

 

| | コメント (0)

2019.12.28

Spartan-7ボードのDDR3メモリが動いた

開発中のSpartan-7ボードでDDR3メモリが動きました。

下の図は、FPGAの端子の状態をモニタしたものです。読み出しと書き込みを周期的に繰り返しています。

Sp7mig

どういう回路を作ったかというと、BlockDesignを示します。

Sp7_mig_design

このMIGの中身ですが、まず、メモリのクロック周期の選択が3000ps~3300psと、めっちゃ選択範囲が狭いです。

とりあえず3000ps(333MHz)にしておきます。333MHzのクロックということはDDR3は666MHzで動きます。

PHYは4:1にします。

メモリの型番は8bit幅で512MB型のものにするとDDR3メモリの配線がA0~A15まですべて使われます。

Mig_setting1

 

次のページ。データバスの幅などを選びますが、特に変更なく64にしておきます。

Mig_setting2

 

次にまたクロック速度を指定するところが出ますが、これはMIGのモジュールに何MHzのクロックを入れるかということです。3000psの周期、つまり333MHzのクロックを入れます。

Mig_setting3

 

最後にクロックをNoBufferにすればおしまいでs。NoBufferというのは、外部からのクロックピンから直接入れるのではなく内部でMMCMなどを使って作ったクロックで動かすときの設定です。

Mig_setting4

 

最初のBlockDesignを見てください。sys_clk_iにはダイアログで設定した333MHzのクロックを入れます。ここに333MHz以上のクロックを入れるとMIGをだましてオーバークロックが試せますが、それはまだ今度の機会にしましょう。

clk_ref_iには200MHzのクロックを入れていますが、これは設定にかかわらず200MHz固定です。XILINXのプリミティブが内部で時間を計るのに使います。

 

MIGの出力するui_clkは333MHz/8=83.333MHzを出します。8で割るのはDDR3だからです。4:1やデータバス64bit幅というところを変えれば変わるかもしれませんが、どんなバグを踏むかと思うと恐ろしくてできません。データ速度を変えたい場合はAXI Interconnectでやるとよいでしょう。

こうしてデザインを作って、うまくDDR3メモリが認識されて初期化されてキャリブレーションが完了するとinit_calib_completeがHになります。

 

| | コメント (0)

2019.12.27

Spartan-7基板が届いた

待ちに待ったSpartan-7基板の実装が上がってきました!

Sp7top

令和元年シルクもばっちりです。

Sp7bot_20191228003701

さて、電源を入れようと思ったのですが、忘れていました。チップ集合抵抗が実装されていないのです。

手作業で実装し、いざ火入れ!

・・・

・・・

・・・

電源が入らない。

これはやばい!

焦ります。

安定化電源は5Vで、電流は0.14Aを示しています。だからショートではない。

今回から登場したMOS FETによる電源供給スイッチの回路が悪さしているのでしょうか。

試しにソースとドレインをショートさせてみると、電源が入りました。しばらく回路図を見て原因が分かりました。

P MOS FETを使わなければならないところに、N MOS FETを実装していたのです。

このような問題はありましたが、無事に電源も入りました。

Sp7pweron

USBチップのCY7C68013Aも認識でき、Spartan-6ボードと同じファームウェアを書き込んでUSB-JTAGを認識させることもできました。

USB-JTAGが認識できたらMITOUJTAGを使ってバウンダリスキャンでFPGAの端子が見えました。

Sp7bscan

ここまでくれば一安心です。少なくともFPGAは生きていることがわかります。

自分で基板を作る場合、FPGAの端子が見えるとすごく安心できます。

Sp7tempe

温度も見えました。

自分でFPGA基板を作る場合には「動く」とわかるところまでがストレスの連続なのです。動かなければ基板作り直しで何十万円もドブに捨てることになるわけですから。ZYBOのような既成のボードで使っている限り決して知ることはない苦しみです。

IoTの機器を作る場合も同様。

FPGAの端子が見えれば超安心できますね。

 

| | コメント (0)

2019.12.26

Cosmo-Zの製造100台目の実装不良

今回、Cosmo-Zを2台製造しました。シリアル番号を見ると、100番と101番。

もう100台も作ったのです。

 

感傷に浸っている暇などありません。困ったことにネットワークがつながらない!?

12月末で締めてもらうためには今日中に納品しないと間に合いません。さあどうする!?

状況としては2台とも少しずつ違っていて1台目はPHYチップKSZ9031の25MHzクロックが発振せず。U-bootの段階でもPHYチップが認識されていない。

もう一台はクロックは発振し、PHYチップは認識されるが、ネットワークがつながらない状況。

納品までに残された時間はわずかです。

 

バウンダリスキャンを使ってFPGAからPHYまでの信号を確認したところ問題なし。PHYチップに供給される3種類の電源も問題なし。

そうすると、PHYチップが壊れているか、もしくは下の赤枠で囲った部分のはんだ付け不良が疑わしいということになります。

Rightline

赤枠で囲った右下の端子はR306の電流設定抵抗(12.1kΩ)につながっているので、ここが浮いているとクロックの発振が怪しくなるはずです。

斜めから見てみます。

今回の実装したもの↓

Dec

前回のもの↓

Oct

なんとなく、今回のものははんだ付けが甘いような気がします。

 

そこで右側のラインのはんだ付けだけをやり直してみると、2台とも無事に動きました!

やはり、この部分のはんだ付けが良くなかったようです。

右側のコネクタの影に隠れてリフローに問題が出たのかと実装工場に問い合わせてみると、コネクタは貫通部品なので後から付けているからそういうことはないとのことでした。ただ、この部分のはんだ付け不良については次回から注視していくとのことでした。

このような実装の問題が起き非常に焦りましたが、何とか納期に間に合わせることができました。

 

この101台目の基板はアナログ的な性能が抜群で、未キャリブレーション時のオフセット電圧が1LSB以下といういままでの中の最高の成績でした。

Histg

正弦波を入れたときの歪率も-90dB以下で測定不能となり、アナログは完璧でした。

Spec

 

今回製造したCosmo-Zは、100台目と101台目です。

検証用と在庫で6台を所有しているので、実際には今までで95台出荷しています。

次回の製造時には100台出荷を達成できるでしょう。

 

| | コメント (0)

2019.12.25

Cosmo-Zの32ch版を製造

ふと思い出したように夜中に会社に行き、ある大学のお客様から注文をいただいていた32ch版のCosmo-Zを急遽仕上げることとなりました。

Company

その大学の購買課は26日からお休みになってしまうので、25日中に納品しないと12月末として受け入れられず1月頭の納品となって2月末の入金となってしまうからです。クリスマスどころではありません。

いま会社に届いているのはCosmo-Zの拡張基板が4枚です。

Extboard

本体基板は25日の午前中に到着予定で、まだ来ていないので、既存のCosmo-Zに接続して動作を確認しています。

Cosmoz32

Cosmo-ZのFPGAデザインを32ch化するには、VivadoのBlockDesignのコメントにあるMAX_ADCCH=を32にするだけでOKです。

Config32

こうして論理合成したデザインを書き込むと、全32チャネルがリンクアップします。

Linkup32

全チャネルの波形が一度に見えるのは壮観です。

Adc32

そして、まごころを込めて1つ1つのチャネルを測定していきます。

Test1

正弦波発振器から綺麗な正弦波を入れ、歪率が大きいチャネルはないか、ノイズが乗っているチャネルはないか、異常がないことを丁寧に確認していきます。

Distort

全部のチャネルで歪率-80dB以下を達成し、24ch分の拡張ボードの部分は無事に動くことを確認しました。

本日、本体基板が来たら同じ検査を行い、ようやく出荷となります。といってもお客様の大学に手持ちで納品することになるでしょう。

 

 

 

| | コメント (0)

2019.12.22

Spartan-7基板の生基板が届いた!

木曜日に出図したSpartan-7基板の生基板が届きました。

12枚面付です。

金フラッシュもちゃんとかかっていて安心(結構忘れたりする)

Pcb12

 

基板の表面。

あうっ!ちょっとしたミステイクが・・

Top_20191223053601

裏面の令和元年シルクは問題なくできました。

Sp7bot

今週中に実装ができるでしょうか。

 

| | コメント (0)

2019.12.20

UPSから荷物が届かないのでチャーターを使った

Spartan-7ボードの製造で届くはずの部品がUPSから届かないという事態が起きました。

本来は木曜日に届くはずだったのですが、飛行機の乗り継ぎに失敗してアラスカで一日足止めされ、金曜日に成田に来たのですが、通関が12時を超えたため翌日扱いになるという例のパターンです。

すると木曜日に届くはずだった荷物が月曜日に届くという4日遅れになるので、これはどうしても回避しなければなりません。

 

UPSはおそらく新木場まで来て、新木場で通関処理を行っているのだと思いますが、10時40分に成田だとまず新木場を12時に出るのは間に合いません。

「この動きは怪しい」と思ったらすぐに電話します。

今回、はじめて「チャーター」というのを利用しました。

Ups

UPSは12時までに通関しないと午後の運送トラックに乗れないのですが、乗れなかった荷物は翌日のトラックに乗って新木場で待機します。

この荷物を当日受け取るには、新木場へ取りに行くか、バイク便(チャーター)で運んでもらうかです。

チャーターは別途料金が5000円くらいかかりますが、電子部品の価格を考えれば安いものです。

18時半に無事にSpartan-7ボード用の荷物を受け取ることができました。

 

チャーターを使うには、昼頃に荷物が来ないことを気配で察したらすぐに電話しないといけません。

夕方遅くになって電話をしてもトラックに荷積みしてしまった後では見つけられず間に合わないそうです。

理想的には通関前に電話しておくのがよさそうです。

 

| | コメント (0)

2019.12.19

Spartan-7ボードの完成と出図

Spartan-7ボードですが、今日も夜中から微調整を行い、3時ごろにようやく設計完了です。

微調整のはずが、FPGAの奥の方のパッドからLEDの配線を8本引き出したり、全然、微ではすみませんでした。

1219_1

シルクの図を紙に印刷して、シルクとパッドが被っている場所がないかなど、念入りに確認します。

裏面には、令和元年を奉祝する文字を入れました。この「令和」の文字を入れるために部品を少し動かしたり。

ピンヘッダの横にFPGAのピン番号を入れました。これで、回路図を見なくてもピン配置がわかる!

1219_2

面付成功したのは3:50ごろ。眠くて吐きそうになったので、今日は寝ます。

1219_3

そして、寝て起きてびっくり。

面付した基板のシートは別の基板のものを流用していたので、デザインルールが違っていて、実は電源ラインが細いやばい基板になっていたとか。

やはり、時間をおいて再確認は必須ですね。

朝起きて面付しなおして、ガーバビューワで確認。

1219_4

よし、これなら大丈夫。

 

朝の9時ごろ、基板データ送信完了。

超特急コースなので6層基板だけど3日後の日曜日には届きます。

私は近畿地方のある基板メーカーにいつもお願いしています。

昔は某.com経由で東アジアの国で製造していましたが、数年前から国産メーカーに切り替えました。

こっちのほうがはるかに安くて早いのです。

 

そうしたら、実装用の配置座標ファイルや外形図、シルク図、メタルマスク図、部品表などを実装屋さんに送ります。

本来はDigikeyから部品が今日届くはずだったのですが、悪天候でUPSが一日遅れて明日になるようです。

本当に明日に来るかな?

| | コメント (0)

2019.12.18

Spartan-7ボード、ひとまずの完成

日付も変わって、設計再開です。

まずは未配線のネットを引きつつ、未配置のコンデンサや抵抗などを配置していきます。

1218_1

午前3:12。

ようやく全配線ができてViolationが消えました。

1218_2

表面は

1218_3

裏面は、

1218_4

ただし、まだ完成ではなくて、この後、

  • REFDESの付けなおし
  • ポリゴン貼り
  • 配線の微調整
  • LEDの配線
  • シルクの位置調整
  • シルクで様々な説明を入れる
  • 面付

などの微調整が残っています。

ところで、今回の基板のダウンロードページをgithubに作りました。

https://github.com/tokuden/Spartan7

今後、回路図やFPGAの設計データなどはここに公開していきます。

 

| | コメント (0)

2019.12.17

Spartan-7ボードのI/Oの配線とLANの設計

Spartan-7ボードのI/Oポートへの配線を始めます。

1217_1

わずか数センチの配線なのですが、平行線を見ていると無限に長く感じてきます。

下側の汎用I/Oへの配線が引けました。

1217_2

上側も1時間程度で引けるはずなのですが、午前6時なのでちょっと仮眠を取ります。

💤

寝て起きて、日常の業務を終えた後で再び基板の設計に戻ります。

USBとFPGAとDDR3Lの面積が小さくできたのと、I/Oを配線しても大して面積は食わないことがわかったので、空いたスペースにイーサネットコントローラ(100BASE)とMicroSDカードとMIPI-CSIのコネクタを置いてみました。

1217_3

イーサネットのコネクタはさすがに乗らないので8ピンのピンヘッダを立てておくことにしました。

1217_4

100BASE-TXのイーサネットは、TX+/-、RX+/-の4本の線だけでよいのですが、パルストランスの中点やGND、LEDを含めても8本あれば十分です。そのため8ピンのピンヘッダを立てておいて、LANを使いたい人はここから配線を引き出せばよいようにしておきます。

ただし、LANチップの裏はSDカードなので裏面にパスコン等を配置することができないため、実質的に片面基板になりました。ここが一番苦労したところかな。

頑張った甲斐があって、FPGA、USB2.0、DDR3、100BASEのLANインタフェースICと、MIPI CSI、MicroSDカードを載せてI/Oの配線もすべて引くことができました。

FPGAにMicroBlazeを入れれば、一応、組み込みLinuxのボードになりますが、本命はRISC-Vですね。

未配置の部品と未配線はあと100か所くらい残っているので、明日には終わるかなという感触です。

1217_5

 

| | コメント (0)

2019.12.16

Spartan-7基板のUSBと電源まわりの設計

少し回り道をしたけど、電源の保護回路の方針などが決まったのでSpartan-7基板の設計を再開します。

今はこの状態。

1215

まず、USBのコネクタを何にするか。

選択肢としてはB、Mini-B、Micro-B、Cがあります。

ノーマルのBは大きすぎるので論外。

Micro Bは工業用製品に使うには弱すぎます。粗雑に扱うと壊れそうで怖いし、ケーブルが弱い力で引っこ抜けます。
最近では充電器をはじめとして様々な機器に使われてきていますが、MicroBが意外と丈夫なのはケースとケーブルが密着して力がケーブルの樹脂の部分に分散するからです。MicroBのコネクタの金属の部分だけだと簡単に折れます。

FPGA評価ボードはケースがなくて金属の部分だけで支えるので、破断する可能性が高いのでMicroBもやめることにします。

Type-Cはオーバースペックすぎる。

結局のところ、評価ボードにはそこそこ丈夫なType-Bがちょうど良いという結論です。

昨日のMOSFETによる保護回路と合わせてUSB周りの配置とざっくりとした配線ができました。

1216_1

また、USBインタフェースICのCY7C68013AからFPGAへの配線がですが、意外と簡単でした。

このくらい↓の配線なのですが、

1216_2 

かなりすっきりと配線できました。

1216_3

現在の基板の全体像はこのような感じです。

USBとFPGAとDDR3メモリの配置とざっくりとした配線ができました。

1216_4

10年前のSpartan-6基板と比べると狭いところに詰め込めていて、かなり基板の面積が余りそうな感じです。

 

| | コメント (0)

2019.12.14

Vivado 2018.3でMIGを使うデザインがクラッシュする原因

Vivado 2018.3でMIGを使うデザインがクラッシュするという問題の原因がわかりました。

先行する報告としては、AR# 71898 に「MIG 7 Series - パッチ - 2018.3 での既知の問題」というのがありますが、ここに書いてあるパッチを適用しても改善されません。また、フォーラムの記事でもAR71898を試したが改善しなかったという例が出ています。結局2019.1にアップデートして回避したようなのですが、Vivado 2018.3のMIGにはまだ知られていないバグがあるようです。

 

現象としては、プロジェクトの読み込み時や、Synthesisを開始したときに、何のログも残さず、突然Vivadoごと落ちるというものです。

その原因がついにわかりましたので紹介します。

まずは確実にクラッシュするプロジェクトの作り方です。

① Vivadoで新規プロジェクトを作ります。

デバイスはSpartan-7の50にします。

Migcrash1

② BlockDesignを作成し、MIGを配置します。

Migcrash2

③ 配置した直後は、クロックとリセットしかないMIGなので、ダブルクリックして設定画面を開き、Nextを押し押し最後まで設定します。

Migcrash3

④ 最後までカスタマイズすると、いろいろなポートが出てきます。

⑤ Vivadoで一度セーブします。

Migcrash4

何も特別なことをしていないMIG使用デザインですが、実は、この時点で諸悪の根源であるバグが埋め込まれています。ポートを付けたりして論理合成を開始するとクラッシュするでしょう。運が良ければ動くかもしれませんが。

 

では、原因を究明します。

MIGはユーザが設定した内容をprjというファイルに保存します。

prjは<プロジェクトフォルダ>\<プロジェクト名>
.srcs\sources_1\bd\design_1\ip\design_1_mig_7series_0_0 にありますが、中身はXMLファイルのようで、

Migcrash6

これだけ見るとそんなに悪くはなさそうに見えます。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project NoOfControllers="1">
<ModuleName>design_1_mig_7series_0_0</ModuleName>
<dci_inouts_inputs>1</dci_inouts_inputs>
<dci_inputs>1</dci_inputs>
<Debug_En>OFF</Debug_En>
・・・

ところが、バイナリエディタで開いてみると

Migcrash7

<?xml の前に、EF BB BFという3バイトのゴミがくっついていました。

どうやらこのゴミが悪さをしているようで、Synthesizeの開始時やプロジェクトのオープンの際にクラッシュしてしまうようです。バイナリエディタを使って綺麗に取り除くと、クラッシュしなくなります。

この3バイトのゴミは、

  • Vivado 2018.3でのみ発生する (2018.1、2018.2では発生しない。2019.1は未確認)
  • デバイスのファミリによらない。Spartan-7だけでなくKintex-7、ZYNQ、Artix-7でも発生する。MIG 4.2でのみ発生すると考えられる。
  • AR71898のパッチを当てても改善しない
  • この3バイトのゴミの内容は変わることがある
  • パソコンの問題ではない(少なくとも3台のPCで検証した)

という特徴があります。

 

どうやって気が付いたかというと、Vivado 2018.2で作ったプロジェクトをVivado 2018.3にアップグレード際にはこの問題が発生しなかったので、そのBlockDesignをTcl化してDIFFしてみました。TCL化BlockDesignの中ではmig_a.prjを生成する関数があるのですが、要するにprjファイルをベタに埋め込んでputsでファイルに書き込んでいるのですが、そこにゴミが映っていたのです。↓

Migcrash8

このDIFFで見つけることができました。

今は2019.2が流行しているので2018.3を使う機会は少ないかもしれませんが、困っている人がいたら是非prjファイルの先頭をバイナリエディタで見るということを伝えてあげてください。

 

| | コメント (0)

2019.12.13

Spartan-7のMIGの配線を検証する

Spartan-7ボードのDDR3メモリの配線が正しいかどうかを検証するために、MIGを使ったデザインで回路図のとおりに配置を指定して、論理合成できるかどうかを確かめるというプロセスを行います。

こんな感じのデザインを作りました。

Mig4

回路図を見ながら、MIGの設定画面で一つずつピン番号を入力していきます。

Mig3 Mig2

Mig5

そして保存して、いざ論理合成!とすると、突然、Vivadoが落ちるのです。

酷い時にはMIGのIPをクリックするだけで落ちます。

Mig1

いろいろ回避策を試しました。

まず、AR71898という「MIG 7 Series - パッチ - 2018.3 での既知の問題」というアンサーが出ているのですが、プロジェクト名/ディレクトリにスペースはないので、これも違います。一応、パッチのAR71898_vivado_2018_3_preliminary_rev4.zipもあててみました。

関係ないですが、このパッチは面白いですよ。

ZIPファイルを解凍すると、AR71898_vivado_2018_3_preliminary_rev4というフォルダが出来るので、D:\Xilinx\Vivado\2018.3\の下に自分でpatchesというフォルダを作り、このAR71898_vivado_2018_3_preliminary_rev4フォルダをコピーするのです。どのファイルをどうするとかではなく、フォルダごとpatchフォルダの下にコピーするのです。 Mig8

すると、次からVivadoを起動したときにタイトルにパッチ名が付いて、更新済みVivadoであることが示されるわけです。

Mig9

残念ながらこの方法でもうまくいかなかったので、Vivado 2019.2を試すことにしました。

せっかくだからVitisを入れようとしたのが失敗。

24GBをダウンロードして100GBのアプリをインストールするわけなので、午前中から昼過ぎまで何もできませんでした。

Mig6

Vivado 2019.2ならクラッシュせずに論理合成ができたのですが、何か腑に落ちないですね。

Mig7

ここで終わらせてはいけないので、徹底的に原因を探りたくなります。

 

| | コメント (0)

2019.12.11

Spartan-7とDDR3Lの配線

Spartan-7とDDR3Lの配線が引けました。

Mig_1

過去に作成したSpartan-7基板のメモリの部分から配線のデータをコピーしてきて、Spartan-7のBank35につなげます。

XILINX FPGAのDDRメモリインタフェースは一つのバンクのT0~T3で表されたブロックの中にデータ線とDQSとDMを入れておけば配置は自由にできるので、Bank35のT3にデータバスを押し込み、T0~T2にアドレス線や制御信号を詰め込みました。

つまり、メモリからFPGAに引きやすいように配線を引いて、後からFPGAの端子を割り当てる作戦です。

DDR3の配線をしなければならないというのは気が重くなりますが、やってみるとそんなに難しくはなかったです。やはりメモリが一個だからでしょう。

 

基板全体に占めるFPGAとメモリの面積は下の図のような感じです。

Mig_2

Spartan-6基板(2009年の設計)の頃と比べると随分と縮んだように感じます。

デバイスの面積が小さくなったせいでしょうか?

| | コメント (0)

2019.12.10

Spartan-7ボードの設計を再開します

1年くらい前から設計途中で中断していたSpartan-7評価ボードをやはり仕上げることにしました。

Sp7_board

Spartan-7を中心として、DDR3L SDRAM、USB2.0(USB-JTAG付き)、2.54mmピッチの40pinピンヘッダ2個にI/O 64本、7cm×5cmという仕様です。

10年くらい前ならこういう評価ボードは日本の各社から結構出ていてたのですが、現在ではアジア製の安い評価ボードが簡単に買えて、

 - 具体的に言うと、Zyboとか、Artyとか、PYNQとか。

しかもリファレンスデザインも充実しています。

今、誰もが最初に購入しようとするFPGAボードはZyboかArtyかPYNQじゃないですか?

学校とかでFPGAで何かを作る課題があったとして、実際に使うボードは上の3つのどれかじゃないですか?

こういう安くてコモディティ化したボードが巷にあふれている状況で、シンプルなボードを、名もない日本企業が、そんなに安くもない価格で出す意味があるのか、と悩んでいました。

 

海外ボード勢の価格は、日本で作ろうとしたらどう頑張っても原価さえ回収できず赤字となってしまいます。しかもgithubで手の込んだリファレンスデザインも出しているとなっては、もう手も足もでません。おそらくFPGAやメモリ、電源ICなどのを、一般価格よりも相当低い価格で仕入れることができているのでしょう。

 

そういう理由で、もうFPGA評価ボードは作るのをやめようと思っていた次第です。

 

しかし、FPGAを工業用の組み込みモジュールとして使うなら、スイッチやLEDやLAN、PMODなどが出ていないほうが使いやすいのではと思うところもあります。はがき大のサイズのボードだと機器に組み込むにはちょっと大きいし、背の高いLANコネクタは邪魔になります。

それに、原価低減のためなのか実装面積を削減するためなのか、こういった海外ボードはユーザガイドに示された推奨数のパスコンが乗っていないこともあります。(Kintex以上だとパスコン内蔵ですが)

小型高密度で、ちゃんとパスコンを載せたボードがあってもいいかもしれない。

されど高密度で極小サイズで作ってしまうと、コネクタがメザニンになってしまい、万能機版が使えなくなり、評価用や1台~2台の工業製品に組み込むボードとしては使いにくいものになってしまいます。

よって、2.54mmピッチのコネクタにたくさんのI/OがついたFPGAボードというのは、まだ少しでも需要があるかもしれない

・・

などと、ぐずぐず考えて判断した次第です。

ただ、こういう汎用の「何にでもなれるけど何者でもないFPGAボード」を設計するのは最後にしたいと思い、このボードの名前を以下のように決めました。

LAST BOARD(ラスト☆ボード)

 

| | コメント (0)

2019.12.09

GOWINの書き込みケーブルと、TEC0117というボードを仕入

ドイツTrenzElectronic社が開発したTEC0117というボード、それからGOWINのケーブルを入荷しました。

Gowin

この"TEC0117-01"というボードは、GW1NR-9という8MByteのSDRAMを内蔵したFPGAを搭載しています。

Gowin_top

1NR9って型番おかしいんじゃないかと思ったのですが、エンベデッドメモリ搭載ファミリで正しい型番でした。

LUT数は8640個で、TangNanoで使われているGW1N-1の7.5倍もあります。

https://www.gowinsemi.com/ja/product/detail/2/

のGW1NRファミリ(エンベデッドメモリ搭載)というところを見てください。

8MByteですよ。結構なサイズです。

何ができるでしょうね。RISC-Vのメインメモリとかでしょうか。

この基板の裏には何も部品が乗っておらず、つるつるでした。

Gowin_bot

0603サイズ(ミリメートル)の部品はふんだんに使っているようで、相当な高密度でした。

USB-JTAGはFT2232を使って実現するようなのですが、USB-JTAGの機能を使うためのファイルがまだ提供されていません。

また、マニュアルの整備が追い付いていないようで、存在するドキュメントは回路図のみという状況です。

 

GOWINのデバッグケーブルもついでに購入しました。

Gowin_cable2

このケーブルは世界中を旅してきたようで、新品のはずなのですが砂っぽかったです。

TEC0117とUSBケーブルは近いうちに発売します。

 

| | コメント (0)

2019.12.02

Cosmo-Zのディスクリを正負両対応にしたのと、Vivadoにおけるスマートなパラメタライズ

Cosmo-Zは放射線を計測する際に、無信号時の信号レベルよりどれだけ下がったらトリガをかける、というトリガが使えます。これをディスクリと呼んでいます。

お客様からの要望で、(無信号時の信号レベル-設定値)ではなく、(無信号時の信号レベル+設定値)でもトリガを掛けられるようにしてほしいというのがあったので、対応しました。

Pos_discri

書くのは簡単なのですが、ここに至るまでに、いままでのぐちゃぐちゃになっていたソースを全面的に見直したり、ISEで書いたコードをVivadoに移植したりといろいろ大変でした。

このお客様はCosmo-Zに拡張ボードを2枚挿して24chにしているので、通常のお客様用の8chとは別にソースをつくらなければなりません。

お客様ごとにソースを作り分けていてはバージョン管理ができなくなるので、VivadoのTclのライブラリを作り、Block Designのコメントを利用してパラメタライズを行えるようなTclの関数を作りました。

 

デフォルトでは下の図のように「ADCのCH数は8、分解能は12」と書いておきます。

コメントにはFPGAのバージョンなんかも書けます。

Discri1

各IPのパラメータは↓のようにパラメタライズできるようになっていて、最初は12bitで8chになっています。

Discri2

ここでMAX_ADCCH=24に書き換えて論理合成を開始すると、

Discri3

TCLのコメントが、子IPの中にあるMAX_ADCCHというパラメータを書き換えてくれます。

Discri4

Discri5

そして、24ch、12bitのデザインが出来上がります。

これで、ユーザはソースを書き換えることなく、また、IPのパラメタライズダイアログを出すこともなく、コメント欄を書き換えることで自分用の設定に変更することができるようになりました。

 

 

| | コメント (0)

2019.12.01

Tang nanoのJTAGを調査

秋葉原のShige ZoneでTang nanoを手に入れたので、JTAGを調査することにしました。

Tn1

Tang nanoは、中国GOWIN社のGW1N-1-LVというFPGAを搭載した小型FPGAボードです。

この基板にはTCK、TDI、TMS、TDOと書かれた端子があるので、ここにピンヘッダをはんだ付けし、フライリードケーブルを接続します。

Tn2

JTAGの電源は何Vかわかりませんが、5Vではないと思われるので、Vbank0/3と書かれたところから電源を取ります。

MITOUJTAGで普通に自動認識させてみても見つからないので、MITOUJTAGのSVFプレイヤーを使ってTDOから何か出てくるかを調査しました。

TRST OFF;
ENDIR IDLE;
ENDDR IDLE;
STATE RESET IDLE;
TIR 0 ;
HIR 0 ;
TDR 0 ;
HDR 0 ;
SIR 32 TDI (55555555) TDO (F5FFFFFF) ;

これは、TDIから0x55555555という値を入れて、F5FFFFFFというものが出てくるのを期待した構文ですが、期待値が適当なのでエラーとなります。しかし、そのときに実際にTDOから取得された値が表示されるので、動作がわかるというわけです。

結果は、

2019/12/01 22:28:18  Error:Line 9 Operation error.TDO(expected) ='F5FFFFFF' TDO(mask)='FFFFFFFF' TDO(captured)='FFFFFFFF'

となりました。

つまり、TDIから入った信号がTDOから出て来ていないわけです。FPGAはJTAGの信号を通していないことが分かります。

 

おそらくオンボードのUSB-JTAGとぶつかっているのだろうと思い、回路図を見ながらオンボードのUSB-JTAGと、JTAGコネクタの境界にあるRY1を外すことにしました。

Tn3

実際に外した写真が下のものです。

Tn_ry1

これで再びSVFプレイヤーを実行してみると、

2019/12/01 22:30:36  Error:Line 9 Operation error.TDO(expected) ='F5FFFFFF' TDO(mask)='FFFFFFFF' TDO(captured)='55555519'

となって、0x5555519という何かの値が出てくるのが確認できました。

SVFでIRに送るコードを適当に変えて、

SIR 32 TDI (ffff0fff) TDO (F5FFFFFF) ;

にしてみると、結果は

2019/12/01 22:47:53  Error:Line 9 Operation error.TDO(expected) ='F5FFFFFF' TDO(mask)='FFFFFFFF' TDO(captured)='FF0FFF19'

になりました。19という値はStatus Registerの規格に合致しているので、IRの長さは8bitと推測されます。

 

再びMITOUJTAGに戻って、GUIから自動認識させてみると、genericデバイスとして認識されました。

IDCODEは0900281Bであるようです。

Gowin_idcode

ただ、BSDLファイルがないためピンの可視化ができていません。

GW1N-1-LVのBSDLファイルが得られるかどうかは、GOWIN社のサポートに問い合わせました。

 

| | コメント (0)

« 2019年11月 | トップページ | 2020年1月 »