2018.04.20

XILINXの二次元バーコードの読み方

一昨日のブログの続きです。

XILINX FPGAのシルクのうち、温度・スピードグレードは今後表示されなくなるっぽいので、この二次元バーコードを読めるようにする必要があります。このバーコードはXilinx 2D Barcode Markingsというそうです。

QRコードリーダでも読めるようなのですが、2A0QQ123123みたいな英数字が出てくるだけです。これをWebサイトに入力するという方法もあるようなのですが、一番簡単なのはXILINX GOアプリをスマホにインストールすることです。

XILINX GOは、Andoroidのスマホなら、GooglePlayに向かって「ザイリンクス」と叫べばインストールされました。

早速、起動してみます。

Xgo1

うーん。何だこれは!?

広告やニュースが配信されてくるのでしょうか?

とりあえず左上の「」みたいなところをクリックすると、画面が左にスワイプして、Device Lookupというのがありました。

Xgo2_2

ここをクリックするとログイン画面になります。

Xgo3_2

ここでLogin / Request Accessを押して、Vivadoとかのダウンロードにも使うXILINXのアカウントのユーザIDとパスワードを入れるのですが、いままでのアカウントを普通に入れてもだめで、二次元バーコードの利用ということで登録をしなければならないようです。(アカウント名自体は変わりません)

また、登録には15分くらい時間がかかるようで、登録してすぐに使えるようにはなりません。

15分くらい待ってからログインして、ユーザ名とパスワードを入れると無事に起動しました。

Xgo4

この緑の部分を目的のFPGAのバーコードに合わせます。かなり感度がいいアプリなので、カメラに入ったFPGAがバシバシ認識されていきます。

認識されると

Xgo5

と、このように無事にスピードグレードやロット等が表示されました。

sun

なんでこんな仕様になったかと考えてみると、XCN16014に

トップ マーキング情報の一部 (4 行目のスピード/温度グレード、SCD 情報) を削除することで納期短縮および製造処理数の拡大を実現します。

と書かれているので、想像ですが、FPGAはパッケージに納めた後、速度などを検査して速いものに3を、遅いものに1のマーキングをしているのではないかと思います。だとすると、シルクの印刷を2回行わなければならないので工数がかかるのかなと。

それが、最初のシルクの時点で個体識別番号を印刷しておいて、スピードグレードのようにパッケージング後にわかるものはデータベースで紐づけすることで、4行目のシルクを印刷する工数を省略するということなのかもしれません。

| | コメント (0)

2018.04.19

新しいオンラインショップの稼働開始

本日から、新しい特電オンラインショップが稼働を開始しました。

http://www.tokudenkairo.co.jp/shop/

Tokuden_shop

自社サイトとの親和性を高めるため、完全に社内で内製しました。

少しずつ進めていた案件なので5か月くらいかかりましたが、これで、製品紹介ページに「カートに入れる」ボタンを作ったり、会社のWebサイトに、カートアイコンを出したりといったことも(将来的には)できるようになります。

「5か月もかけなくても、ショッピングカートくらいいくらでもあるだろう?」

と思う方がいるかもしれません。

たしかに、Make●●とか、おちゃ●●とか、カラー●●など、今日日ショッピングカートくらいいくらでもあります。

しかし、

  • BtoBに対応している
  • デザインが完全に自由にできる
  • 販売データを自社で管理できる
  • レスポンスが早い
  • 自社サイト内に埋め込める
  • 技術情報のページを作ってまとめておける

というのはありませんでした。

BtoB対応というのは、あるショッピングカートのシステムでは、「月額〇千円」みたいな安い値段を謳っていても、お客様名には個人名しか入れられず、会社名を入れられるようにするには別料金で30万円とか平気で言われました。

それから、どれも市販の既存のショッピングカートのシステムは、自社サイト全体をショッピングカート運営会社のサーバ内に移さなければならない感じで、それが嫌でした。

それに、特電の商品は1ページで全体像が説明できるものではなく、技術情報やチュートリアル、ダウンロードページなど、たくさんの情報が必要です。

そうすると、技術情報を記した自社ページと、ショッピングカートのサイトとを別のドメインにすることになり、ドメインの遷移が発生してしまい、ユーザビリティが悪くなります。

sun

ということで、PHPとMySQLを駆使して自社で開発することにしたのでした。

これで自社サイトをEC対応にできるようになりました。

| | コメント (0)

2018.04.18

XILINX FPGAのシルクがなくなった!?

実装業者さんから、

「FPGAのスピードグレード-1Cのものと、-2Cのものがシルクが同じで区別がつかない」

との連絡がありました。

現在実装中のArtix-7基板の18台のうち、15個のシルクに温度・スピードグレードの表示がなくて、どれがどれだかわからないとのことでした。

2dcode_1

もしかしてスピードグレードを間違って購入してしまったのかと一瞬青くなりましたが、実装業者さんに送ってもらった写真を見て、たしかにシルクがなくて絶望な気分になりました。

ただ、よく見るとFPGAに2次元バーコードが印刷されていることに気が付きました。

2dcode_2

今まではあった1Cとか2Iとか3Eの表示がありません。

AR#67513XCN16014よると7シリーズ以降のデバイスでは、段階的にシルクの表示が変わっていって、XC7Aデバイスでは2017年の5月に生産されたデバイスからは温度・スピードグレードを表示しなくなるという方針のようでした。

これは困った。

このバーコードを何とか解読しないといけません。

続き

| | コメント (0)

2018.04.17

Cosmo-Z Miniの新基板の設計が完了

新製品「Cosmo-Z Mini」の基板再設計も佳境を迎えました。

まずは基板全体像。

Np1110a_1

アナログフロントエンドのOPアンプを周波数特性のよいTHS4520に変えて、等長配線を行い、

Np1110a_2

大容量の積層セラミックコンデンサを電源コネクタのそばに置いたり。

Np1110a_3

入力に大きなコンデンサを入れたのは、電車の中でモバイルバッテリで運用する際に、WiFiが動いたらリブートしたことがきっかけとなっています。

sun

本当は大容量なコンデンサは、タンタルコンデンサでやりたかったのですが、タンタルコンデンサはショートモードで壊れるという理由もありますが、それ以上に紛争鉱物」とか「3TG」といってアフリカのコンゴで採れる鉱物を使った製品や材料は使うな、という国際圧力があって、最近は使いにくいのです。

使いにくいといっても、別にDigikeyでも普通に買えるのですが、大手企業では仕入れた材料や機材に3TGが含まれているかを、取引先に調査させて報告を出させるような暇な部署もあります。

タンタルコンデンサのタンタルがどこで採れたものかはわかりませんが、コンゴで取れたタンタルでなくても、タンタルが使いにくいという世の中の風潮です。

有機アルミポリマーでも、チタンニオブでも、積層セラミックコンデンサでも大容量なのはありますが、やはりタンタルには敵いません。

はぁ、タンタルが気兼ねなく使えるようになってほしい。

sun

さて、出来上がった基板の図です。

まずは表面と裏面。

Np1110a_top Np1110a_bot

次は電源層とGND層

Np1110a_vcc Np1110a_gnd

最後に内層。

Np1110a_mid1 Np1110a_mid2

全6層です。

この基板は水曜日に出図して、土曜日に出来上がってくる予定です。来週は実装工場の予定も確保したので、4月中に完成して、出荷可能できそうな気配です。

| | コメント (0)

2018.04.16

オンラインショップのリニューアル準備中

現在、特電のオンラインショップが危機的状況になっています。

オンラインショップはShopformerというオープンソースのものを利用して作っていたのですが、2011年に導入したシステムなのでいろいろと動作が怪しくなってきていました。

Shop

それでも修正を繰り返しながら使ってきたのですが、最近になって「クレジットカード決済ができない」という不具合が発生するようになりました。

もうだめだ。

そこで、DBとPHPを駆使して全面的に作りなおすことにしました。幸い、特電では「オンライン見積システム」というのを作っていたので、それを改良して、見積の延長として注文まで行えるように改良を行っています。

「オンライン見積システム」は、このような見積書をWebやPDFで作成するものです。

Web_estim

この先に、お客様情報を入力するフォームを作って、

Web_estim2

Web_estim3

何とか「ご注文内容の確認画面」まで作りました。

Web_estim4

決済まであと1画面。ふぅ。

PHPで$_SESSIONとか$_REQUESTとか使いながらベタに作っています。結構大変です。

自由度が高く、既存のプログラムと親和性が高くて、こういうフォームアプリが簡単に作れるフレームワークがあるといいのですが。

| | コメント (0)

2018.04.15

Cosmo-Z Miniの基板再設計開始

Cosmo-Z Miniの基板再設計をはじめました。

Cosmo-Z Miniというのは、4chのADCと2chのDACを搭載した計測装置で、ZYNQを搭載しているためリアルタイムな信号処理ができるというものです。

Cszmini

まずは、現在の基板の状況を確認しましょう。

Cszmini_default

この基板にはいくつかの問題がありました。

  • 基板の端まで部品が実装されているので、ケースに納まらない
  • 使用しているOPアンプの帯域が狭く、125MHzのADC特性を活かせない
  • FPGAのVCCIOを1.8V(HRバンク)で使うと、LVDSのDIFF_TERMが使えないので、外部に終端抵抗が必要となる
  • その他細かいこと
    • リセットボタンがほしい(開発中の問題として)
    • USB電流制限ICの1番ピンがつながっていない
    • Etherコネクタの共通線(?)に電源をつなぐのを忘れていた
    • MicroSDカードソケットを大量に在庫している品種を使いたい
    • MicroSDカードのCD端子の使い方を間違っていた
    • HDMI出力にモニタをつなぐと電源が逆流してくる
    • 基板を切断するつなぎ目の場所が、コネクタの下にあると作業しづらい
    • LEDが基板の端にないと、ケースに入れたときにモニタランプとしての役割を果たさない
    • SDカードにもパスコンを入れる
    • 電源電圧の瞬間的な低下に対処するため、基板全体に大きなコンデンサがほしい

また、展示会に出してみて「ディジタルI/Oがほしい」というご意見をいただきました。

sun

現基板で最大の失敗は、ケースに収まらないこと

Conflict

↑のように、ケースと電源ICがぶつかってしまいます。

sun

これらの修正点を反映すべく、基板を設計しなおすことにしました。

使用しているタカチのケースの図面(これを解読するのは結構難しいのだけれども・・)を読むと、基板の端から4mm程度は使わないほうがよさそうなので、端っこにあった電源回路などを少し内側に移動しました。

Np1110_space

また、現在の基板でUSBコネクタの裏にある積層セラミックコンデンサ

Usb_cap

を基板の内側に移動させて、空いたスペースにJSTのZHコネクタを2個設けて、4bitのディジタルI/Oを2個設置しました。

Cszmini_dio

FPGAのクロック入力端子にもつながっているので、外部クロックを利用することもできるようになるはずです。

sun

また、アナログフロントエンドのOPアンプに、低消費電力のTHS4521を2段にして使っていますが、これがどうも歪率が悪い。

100kHzで-60dBくらいしか出ません。

Cszmini_100k

高域のゲインが足りていないものと思われます。

Cosom-Zと比べてみると、Cosmo-Z(THS4520)のほうは50MHくらいでゆるやかに落ち始めるのにたいし、Cosmo-Z Mini(THS4521)は30MHzくらいから急激に落ち始めています。

Cszmini_f

THS4520のゲインは600MHzくらいまであるので、メガヘルツ帯域での歪率も低く抑えられるはずです。

というわけで、低消費電力よりも正確なアナログキャプチャを取るため、THS4520に戻すことにしました。

火曜日に出図して基板製造開始、来週の月曜日には実装開始の予定です。今月中に納品できることを目指します。

| | コメント (0)

2018.04.05

ZynqberryにUbuntu14を入れた

ZynqberryにUbuntu14を入れることができました。

今まで、ZYNQのLinuxでLinaroのUbuntu 12.11を入れて、14.04にアップデートすると、GUIでのログインができなくなってしまうという問題がありました。ログインループというやつで、有効なユーザ名とパスワードを入れても最初のログイン画面に戻ってしまうという問題です。

この問題を回避してUbuntu 14を入れるには、最初からLinaroの14を入れるのが一番です。そのやり方は、基本的には小冊子「ZYNQのLinuxが動くまで」

Zb1

に書かれているとおりなのですが、以下の点が異なります。

  • https://releases.linaro.org/archive/14.10/ubuntu/trusty-images/alip/にあるlinaro-trusty-alip-20141024-684.tar.gzを取ってくること
  • tarのオプションは--strip-components=1 にすること
  • インストール後、デフォルトではIPv4がないので、ひとまず/etc/sysctl.confを書き換えてIPv6を無効にすること。
  • 自分で/etc/network/interfacesを書くこと

これでネットワークがつながるようになります。

Zynqberryubuntu14_1_2

また、小冊子のとおりにセットアップすることで、無線LANも無事につながりました。

Zynqberryubuntu14_2

GUIを快適に使うには、日本語化の設定が必要です。

apt-get install language-pack-ja
update-locale LANG=ja_JP.UTF-8
apt-get install fonts-takao-Mincho
apt-get install fonts-takao
dpkg-reconfigure keyboard-configuration

最後のコマンドを実行した後、Generic 105-key (Intl) PC → Japanese → Japanese → The default for the keyboard layout → No compose key

と操作します。これで日本語化も完成です。

Zynqberryubuntu14

無線化したZYNQベースのLinuxマシンに、HDMI出力とマウスとキーボードをつないで動くようになりました。

sun

このLinuxの構築に必要な情報の元(Ubuntu12の段階)は、Zynqberryスタータキットに付属の小冊子にすべて記載しています。

Zynqberry_starterkit_web

ZynqBerryスタータキットはこちらです↓↓

https://www.trenz.jp/product/zbstart/

| | コメント (0)

2018.04.04

XDMAコアでの割り込み発生方法

XILINXのPCI Expressコア(XDMA)を使って割り込みを発生させる方法を理解したので、忘れないように書いておきます。

Xdmaieq1

XDMAというのはXILINXのPCI Express IPコアで、スキャッタギャザーDMAに対応した超絶便利なコアです。

このコアにはusr_irq_req[0:0]やusr_irq_ack[0:0]という端子があります。このビット幅は1~16までIPコア設定画面の中で設定できます。つまり、最大で16本の割り込み入力が使用できるようになります。

Xdmaieq2

sun

さて、XDMAコアにある割り込み関連信号はusr_irq_reqとusr_irq_ackだけです。

この使い方を簡単に説明するち、ユーザ回路が割り込みを発生させたい場合は、usr_irq_req[0]をアサートします。

Xdmaieq6

PCI Expressでは割り込み信号の状態をホストとカードで同じ値を保持する機能はなく、メッセージパケットやメモリライトを使って、L→HまたはH→Lに遷移したことを通知します。

usr_irq_ackは、XDMAコアがホストPCに割り込みメッセージを送信した時にアサートされます。ackという名前ですが、ホストPCのOSやドライバが受け取ったことを示しているわけではありません。あくまでもXDMAコアの中で返しています。

sun

さて、ドライバが何もしていないときにいきなりusr_irq_reqをアサートしても、usr_irq_ackは帰りません。割り込みを発生させる前に、ドライバがBAR1の0x2004に1を書いて、割り込み許可をしておかなければなりません。

実は、XDMAコアはBAR1にいろいろな設定レジスタを持っていて、

Xdmaieq3

この中の0x2000~0x20A4にIRQ関係のレジスタがあります。

Xdmaieq4

割り込み許可関係のレジスタは0x04,0x08,0x0cと3種類ありますが、0x04のが読み書き可能な値が書かれたレジスタの本体です。

Xdmaieq7

0x2008はセット専用、0x200cはリセット専用です。これらのレジスタは、1を書き込まれたビットが許可されたり、禁止されたりするというものです。読み出してからビットORして書き込みという手順が必要ないので、割り込み処理ルーチンの中で操作するのに向いています。

(読み込んで、ビット操作して書き戻すと、その間に他のビットの状態が変わっている可能性があるから)

したがって、ドライバの割り込みセットアップルーチンでは、BAR1の0x2004に1を書いて、割り込みusr_irq(0)を許可するようにします。

割り込み許可マスクが設定されていれば、usr_irq_req[0]から200ns前後でackが返ってきます。その様子をMITOUJTAGを使って波形を観測しました。

Xdmaieq5

また、BAR1の0x2040と0x2048にUser Interrupt Requestと、User Interrupt Pendingというレジスタがあります。

Xdmaieq8

Request (0x2040)のほうは割り込みが発生したときに立つフラグです。Pending (0x2048)というのは、usr_irq_reqが入ったけど、割り込み許可マスクが設定されていないため、発行することができない待ち状態にあるときに立つフラグです。

sun

さて、割り込みが発生するとusr_irq_ackが返ってきますが、ユーザ回路はこのackでusr_irq_reqを下げてはいけません

ユーザ回路はusr_irq_reqをアサートしたら、ドライバがユーザ回路で作ったレジスタにアクセスして、割り込みを解除するような操作をするまでusr_irq_reqを保持し続ける必要があります。ackだけでusr_irq_reqをデアサートすると、ドライバが割り込みを処理しようとしたときにすでに割り込みが取り下げられていて、割り込みが発生しなくなってしまいます。

正しいやり方は、ユーザ回路の中にユーザ用の割り込みコントロールレジスタを作り、ドライバの割り込み応答ルーチンでそのレジスタを操作して解除することです。

下の図をもとに、正しい割り込みの処理方法を説明します。

Xdmaieq9

① 割り込みが発生し、ISRの中で0x2040を読んで、どこかのビットで割り込みが発生しているかどうかを調べます。

② 割り込みが発生していたら、その値を0x200cに書き込んで、一時的にそのビットの割り込みを禁止します。

③ DPCルーチンの中でユーザ回路で作った割り込み制御レジスタに書き込んで、割り込み発生の原因をクリアします。

④ BAR1+0x2008に値を書き込んで、そのビットの割り込みを再び許可します。

実際に作成したレジスタと、回路の例を示します。

Xdmaieq10

Xdmaieq11_2

ハードウェアからの割り込み要求は、usr_irq_reqにそのまま入れるのではなく、ユーザが作った回路の中に割り込みレジスタを設けて、その割り込みコントロールレジスタからusr_irq_reqを操作するのがポイントです。

sun

この割り込みの検証にはCosmo-K+(コスモケイ・プラス)を使用しました。

Cskp

CosmoK+は、PCI Expressと40GbpsのQSFP、DDR3メモリ、USB3.0が搭載されたKintex-7ボードです。

http://www.tokudenkairo.co.jp/cosmok/

この割り込みができるサンプル回路と、デバイスドライバは下記のページからダウンロードできます。

http://www.tokudenkairo.co.jp/cosmok/download.html

Xdmaieq12

| | コメント (0)

«Artix-7ボード製造終了のご案内