« 2019年6月 | トップページ | 2019年8月 »

2019.07.30

ZYNQのUbuntu 19にデスクトップを入れる

昨日からチャレンジしている「ZynqberryにUbuntu 19をインストール」ですが、そのままではHDMI出力もコンソールになっていて味気なかったので、デスクトップマネージャを入れてみました。

何をどういう順番でインストールしたかは覚えていないのですが、

$ apt install xinit

$ apt install lubuntu-desktop

などを実行した気がします。

最初に動いたGUIがこれです。

Zb_ubuntu18

GNOME関係が動くようになったときがこちら。

Loginloop

ただ、GNOMEを入れると、パスワードを入れても再びログイン画面に戻ってきてしまうようになったので、

$ systemctl disable lightdm

$ systemctl disable gdm3

でこれらのウィンドウマネージャが起動しないようにしておいて、startxで起動しました。

LDXEという軽量なウィンドウマネージャならログインループすることなく起動することができて、FirefoxでWebが見えるようになりました。

Ubuntu_lxde

しかし、極めて遅いですね。

Zynqberryのメモリは512Mバイトですが、ほとんど使用中だったのでSWAPを設定してみました。

なんとかYoutubeまで見えましたが、ほんとうに遅いです。

Zb_youtube

そもそもZYNQですから、計測用のシンプルなLinuxが動けばよく、リッチな環境は必要ないのですが、試してみたくなりますね。

ZynqberryはGPUを積んでいるわけではなく、ZYNQのPLでDMAを使ったFrameBufferで画像を表示しています。FrameBufferというのはメモリ上の値をそのまま画面に出すというシンプルなものです。アクセラレーションも何もないただのVRAMのことです。

それでもここまで動くなんて、Linuxってすごいですね。

 

| | コメント (0)

2019.07.29

Zynqberry(ジンクベリー)にUbuntu 19をインストール

ZYNQ搭載のRaspberry Pi型ボード「Zynqberry」にUbuntu 19.04をインストールすることに成功しました。

Te0726_0

やりかたを説明します。

① まず新しいSDカードを用意し、2つのパーティションに分けておきます。

第一パーティションはFAT32で100~300Mバイトくらいにし、第二パーティションはext4で4GB以上にします。

(後ほどデスクトップ環境を入れることを考えると8GBくらいは必要)

② 第一パーティションにはZynqberryのUbuntu14.04で使ったのと同じ中身のファイル(devicetree.dtb、devicetree.dts、u-boot.rgba、eEnv.txt、uImage)を入れておきます。

Firstpartition

次に第二パーティションを作ります。

③ ホスト側マシン(Ubuntu 18.04LTSを推奨)に必要なパッケージをインストールする。

$ sudo apt install qemu-user-static debootstrap

※最初、Ubuntu 14.04でやっていたところ、不完全なイメージが作られインストールに失敗しました。

④ SDカードの第2パーティションをマウントする。

$ sudo mount -o loop /dev/sdb2 /mnt

⑤ debootstrapを使ってARM向けUbuntuをSDカード上に展開する。

$ sudo debootstrap --foreign --arch armhf disco /mnt http://ports.ubuntu.com/

※discoにすると19.04が、xenialにすると16.04LTSが、bionicにすると18.04LTSが、cosmicにすると18.10が入る。バージョン番号とコードネームの対応はhttps://ja.wikipedia.org/wiki/Ubuntuを参照。

⑥ Ubuntuの初期設定をするためにQEMUを使ってホスト側マシンでログインする。

$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
$ sudo chroot /mnt
/usr/bin/groups: cannot find name for group ID 0
I have no name!@ubuntu:/#

⑦ debootstrapで初期設定をする。

I have no name!@ubuntu:/# ./debootstrap/debootstrap --second-stage

⑧ rootパスワードの設定とユーザの作成

I have no name!@ubuntu:/# passwd
I have no name!@ubuntu:/# su
root@ubuntu:/# passwd
root@ubuntu:/# apt update
root@ubuntu:/# apt install <任意のパッケージ>
root@ubuntu:/# adduser zb ←作成したいユーザ名

⑨ 仮想環境から出る。

root@ubuntu:/# exit
I have no name!@ubuntu:/# exit

⑩ 基板にSDカードを挿入し、Zynqberryの電源を入れます。

起動中にWelcome to Ubuntu 19.04!と出ています。

Ubuntu19_start

rootではログインできないので、先ほど作成したユーザでログインします。

⑪ 作成したユーザでsudoできるよう、visudoで権限を与える。

⑫ netplanでネットワークの設定をする

$ sudo vi /etc/netplan/50-cloud-init.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
dhcp6: no
#addresses: [192.168.1.80/24]
#gateway4: 192.168.1.1
#nameservers:
#addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4]
$ sudo netplan apply

※Ubuntu14以前は/etc/netword/interfacesで設定していたが、15以降はnetplanで設定するようになった。

sshdの設定などを行い、SSHでログインしたところ。

Zb_launched

⑬ その他の細かい設定

・コンソール経由で自動ログインされるよう

systemctrl edit --force serial-getty@ttyPS0

で設定する。

・時刻が日本式で表示されるよう

$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

・.emacsファイルの作成

(keyboard-translate ?\C-h ?\C-?)
(global-set-key (kbd "C-h") 'delete-backward-char)

 

 

これで一応動くようにはなったのですが、やはり重い。

Linaroの14.04を動かしていたときには結構軽快だったのですが、19はARM用に最適化されているわけではないのでしょう。

 

 

| | コメント (0)

2019.07.25

USB.orgのベンダIDの期限はどれくらい?

USB.orgにいくらかお金を払うと、USBのベンダIDを発行してもらえます。

PCI の場合はPCI-SIGに「年間更新料$4000 = 約40万円」を払って1年単位でベンダIDを更新します。

では、USBのベンダIDの期限はどれくらいあるでしょうか??

下記のページを見ると、

https://www.usb.org/getting-vendor-id

「The annual membership fee is US$5,000(年間更新料は50万円だ)」と書いてあります。

毎年PCI-SIGに安からぬお金を払っていたのにUSBには払っていないな・・と気になって2014年にUSB.orgにメールで
問い合わせていました。

その際の回答を見つけたので書きますと、

The VID number assigned to your company never expires and is valid for as long as the company exists without further fees.」(貴方の会社に割り当てたVIDは決して期限切れになったりすることはなく、会社が存続している限り追加の料金を支払う必要はないよ

とのことでした。

太っ腹~♪

ちなみに、毎年の年会費がかかるmembership-feeというのは、仕様書を見るためのメンバーシップ会員になる場合だそうです。メンバーシップ会員になるのでなければ、年間更新料は必要ありません。あと、USBのロゴを使ってよいかどうかというのも別の問題なので、ややこしいことを避けるためにも使わないのが吉です。

大事なことなのでもう一回言います。USBのVIDは最初に$6000払えば一生有効です。

この金額はだんだん値上がりしていて、私が取得したときには$2000だったと思います。お早めに。

では、USBのベンダIDはどこで確かめればよいのでしょうか?

"USB vendor id list"とかでググると出てくるlinux-usb.orgのページ↓

Linuxusb

http://www.linux-usb.org/usb.ids

はダメです。すべてのIDを網羅していません。特電も入っていません。

 

正確なのはUSB.orgが発行しているVendor IDのリストですが、見つけにくいし、新しいのが出るとリンク切れします。

今は、developersのページのValid USB Vendor ID Numbersにあります。

Where_is_vid

現在の最新のリストはこちらです。

https://www.usb.org/sites/default/files/vendor_ids052019.pdf

Vid_tokuden

8489というのを16進数で表すと0x2129。特電のVIDですね。

私はメンバーシップにはなっていないのでUSB.orgにログインはできませんが、Vendor IDリストは見れます。

 

| | コメント (0)

2019.07.24

UltraScale+ボードの輸入管理が厳格になります

特殊電子回路が扱っている、ドイツTrenzElectronic製のFPGAボードのうち、TE08xxで始まるUltraScale+ボードについては、輸入管理(ドイツ連邦から見て輸出管理)の遵守と安全保障の観点から使用目的などをおたずねすることになりました。

ご注文の際には、

  1. エンドユーザ名(および連絡先、住所、Webサイトのアドレスなど)
  2. 最終的な製品の用途
  3. 最終的な仕向国
  4. 用途
    1. 化学兵器、生物兵器、放射線兵器、核兵器、その他の爆発性装置の開発、ミサイルの開発、製造、保守、保管が可能なその他のシステムそのような武器を運搬すること、またはクラスター弾や対人地雷の開発、生産、取り扱い、運用、保守または保管、または人権侵害のための開発、製造、取り扱い、運用、保守、保管、検出、識別または配布に関連して使用しないか。(はい、いいえ)
    2. エンドユーザに、軍隊または国内の治安維持部隊が含まれるか?(はい、いいえ)
    3. この製品を民事目的のみで使用するか?(はい、いいえ)

をお伺いいたしますので、正確にご回答ください。

なお、日本国外への再輸出を行う場合には、ドイツから日本への輸入前にBAFA(ドイツ連邦輸出管理庁)への事前の申告が必要です。面倒を避けるため、原則として日本から海外への再輸出はご遠慮いただきます。

万が一、不正確な申告、省略された申告または虚偽の申告をされた場合には、当社の今後の輸入が難しくなるだけではなく、相手方へ迷惑をかけることになります。「り地域」やその他のテロ支援地域な地域に再輸出されると国際問題に発展しかねないので、何卒ご協力をお願いいたします。

ドイツ連邦の輸出用書類の書き方については下記の文章をご覧ください。

この文章の内容を要約すると、民事と軍事に使用できる「デュアルユース品」についてはドイツから輸出される際に最終用途証明書(EUC)の提示が必要であることを述べています。EUCは正確に記載する義務があり、虚偽の申告や違反をすると、ドイツ当局によって「信頼できる荷受け人」とみなされなくなり、今後の輸出が遅延したり許可が下りない可能性が書かれています。

何事も信頼されるというのは重要なことですね。

| | コメント (0)

2019.07.23

ADCの入力にあるコンデンサの役割

ADコンバータの入力に並列にコンデンサをいれることがよくあります。

Adc_cap

これはどういう意味があるのでしょうか?

ある研究所向けに低消費電力版のCosmo-Z拡張ボードを作っていて、妙に特性が出ないので気が付きました。

Adc_circuit

普通のCosmo-ZはTHS4520という高速タイプの作動アンプを使っているのですが、このボードは低消費電力化のためTHS4521という、少し周波数特性の劣るけれども消費電力が極めて少ないタイプのものを用いています。

ノーマルのCosmo-Zは100kHzの正弦波を入れた場合に歪率が-80dB~-100dBの性能が出ます。

Ths4520_no_c

しかし、今回作った回路では-100dBはおろか、たくさんの高調波が見えたのです。

Ths4521_no_c

2つの回路の違いは、最初の図の赤いコンデンサの有無でした。

そもそも、このコンデンサがなんのためにあるのかというと、SAR型のADCはスイッチドキャパシタといって、入力をコンデンサでON/OFFする構造になっています。

Swcap

このため、入力端子はコンデンサがONした瞬間に急激に電荷を引き抜かれます。SAR型でなくても、サンプル/ホールドコンデンサを使っているADCでは皆、サンプリングする瞬間に入力端子の電圧が少し減ります。

そのため、入力した電圧はサンプリングタイミングで少し下がるわけです。

イメージ図で描くとこのようになります。

Swon

(場合によってはリファレンス端子の電圧も同様に引き抜かれるので、他のADCにも波及します。)

この現象を緩和するため、ADCの入力にはコンデンサを入れるのですが、コンデンサを入れるということはLPFになるため周波数特性が犠牲になります。それを避けるには出力電流が大きく周波数特性が良いOPアンプを使わなければなりません。

こうして、ADCの入力回路には、ADCの帯域をはるかに超えるOPアンプが使われます。

Cosmo-Zのノーマル版は周波数特性向上のために並列のコンデンサを入れていませんが、OPアンプは出力電流が大きく周波数特性の良いTHS4520であるため対GNDのコンデンサだけでよかったようです。

しかし、今回、消費電力を抑えるため帯域の低いTHS4521を用いたので、この「電荷引き抜き」現象によって対GNDのコンデンサだけでは貯留した不足し、歪率が上がってしまったようです。

遅いTHS4521でも並列のコンデンサを入れたところ、歪率は-80dBにまで回復しました。

Ths4521_1000pf

結論としては、

  • 低速OPアンプ+大きめの並列コンデンサ・・・歪率〇。周波数特性×
  • 高速OPアンプ+コンデンサなし・・・歪率〇。周波数特性〇
  • 低速OPアンプ+コンデンサなし・・・歪率×。周波数特性×

となります。


余談ですが、ADCのデータシートには、対GNDではなく差動線間のコンデンサだけを入れていました。線間だけにコンデンサ入れてもいいと思うのですが、やはり入力インピーダンスが高いと歪率が増えてしまうので、この回路だとどうかなと思います。

Refcircuit

 

| | コメント (0)

2019.07.22

C#でUSB3.0をコントロールする場合の安定化

特電Artix-7ボード用に、C#のコントロールソフトを作っています。

このボードはCypressのEZ-USB FX3が乗っていて、CypressのCyAPI(とデバイスドライバであるCyUSB3.sys)を使ってコントロールしています。

Artixboardt

CyAPI.DLLにはシンプルなBulkInやBulkOutの機能しかないので、そのまま使うのは意外と難しいです。実際には「これから何バイト送るか」や「何バイトのデータが欲しい」という事前情報がないとFPGAとしては動きにくいのです。

そこで、FPGAとインテリジェントな通信を行うために独自のtkusbfx3.dllでラッパしていて、C#のアプリからはtkusbfx3.dllを操作するという形になります。

しかしながら、C#でアプリを作ったとき、すぐにハングアップしてしまっていて長い間悩んでいました。そのため、C#版のアプリもまだリリースできていませんでした。

今日、徹底的なデバッグを行い、

EndPoint->XferData(data, len);

で失敗していることを突き止めました。

CyAPIのドキュメントの中に、SetXferSize()という項目を見つけ、その中でCyUSB3.sysの最大転送サイズが4Mバイトであることが書かれていました。

Xfersize

これで安定して300MB/sec以上の速度で通信できるようになりました。

Usb3_ddr3_test

めでたしめでたし

| | コメント (0)

« 2019年6月 | トップページ | 2019年8月 »