2020.10.16

ZYNQでECCメモリ使う方法(1)

データシートDS190によれば、ZYNQのメインメモリであるDDR3 SDRAMはECCをサポートしているそうです。

Ds190_ecc

ECCというのは、メモリに書き込むデータに冗長な符号を追加で書き込んでおいて、エラー検出や訂正ができるというもので、サーバ用のDIMMに搭載されているあの機能です。

ZYNQにもそういう機能があるということなので検証してみることにしました。

下の写真は、Cosmo-Z Mini(カスタム版)のDRAMをECC付きのRAMに貼り換えたものです。128MバイトのRAMしか手に入らなかったので、2つ合わせて256Mバイトしかありません。通常のCosmo-Z Miniの4分の1のサイズですが、Linuxが起動したのでよしとしましょう。

Eccdram

さて、ZYNQでECCを有効にする方法をざっと調べてみたのですが、Vivadoの中でZYNQのPSのモジュールを開いて、DDR Configurationを開きます。

Ecc_setting

この中にECCがあるのですが、初期状態ではDisabledになっていて選択できません。これをEnabledにするにはデータバス幅を16bitにする必要があります。

Ecc_setting2_20201020230401

これでECCが有効になります。

PSの設定を変えたのでFSBLを作り直す必要があるのですが、Vitisが出てから(Vivado 2019.2くらいから)はSDK用のhwdefファイルを出力してくれなくなったので、TCLコンソールから write_hedef -force ./sdk/cosmoz_mini_wrapper.hdf と打ち込んで手動で出力するようにします。

これで旧来のXSDKでもFSBLが作れるようになります。

さて、ZYNQはECCを有効にするとDRAMは16bit幅しかサポートしないので、使える容量が半分になってしまうことに注意してください。つまり256MバイトのDRAMを積んでいても使えるのは128Mバイトです。

そのため、通常はU-Bootから作り直すことになるでしょう。U-bootでメモリサイズを決めるのはU-bootのDeviceTreeですね。

U-bootからECC Enabledと表示されて、ECCメモリが認識されたことがわかります。

Ubootecc

ECC有効化のための第一歩です。

| | コメント (0)

2020.10.09

M社で電子部品を買った結果

普段はDigikeyから電子部品を購入しているのですが、今回はDigikeyにない部品だったのでM社から購入しました。

国際輸送はUPSなのですが、日本には木曜日に届いていたのに、通関検査が入ったということで木曜日には配達されませんでした。まぁ、それはよくあること。

それならば金曜日には配達されるだろうと思っていたのですが、甘かった!

M

金曜日になっても届かないのです。UPSに電話して荷物がどうなっているかを問い合わせたら、

「通関待ちの状態のようで、M社が一括で処理することになっています」

「はい?UPSの運送拠点にあるのですよね?」

「これはM社の荷物だからUPSではどうにもできません」

というやり取りでした。

つまり、UPSの流通網は使っているけど、UPSは一切関わることができないようでした。Digikeyみたいに運送を全部するのではなく、国際輸送の最初と最後をM社がやって飛行機の部分をUPSにアウトソーシングしているということなのでしょうか。

そういえば、Digikeyの配達ってUPSの職員が「UPSでーす」って来るけど、M社の場合はどうだったかな・・

 

いままで何百回も電子部品を輸入してきましたが、こんなことは初めてです。

Digikeyからの荷物なら通関で検査が入ってもUPSが処理してくれるから、必ず翌日の朝までにはパスして昼から配送してくれていました。

M社の場合はM社が通関処理をするようで、たくさんの荷物をまとめて処理するらしく、今回は2日も待たされました。土曜日は配達がないので、結局のところ月曜日まで待つ羽目になりました。

結論を言えば、Digikeyから購入するほうが通関リスクが圧倒的にリスクが低いといえます。よほど入手に困っていなければDigikeyから購入するべきだといえるでしょう。

 

| | コメント (1)

2020.10.08

特電のメールマガジンのバックナンバーを閲覧できるようにしました

特電のメールマガジンのバックナンバーが閲覧できるようになりました。

こちらのURLにございます。

https://www.tokudenkairo.co.jp/login2/newsletter.php

Melmaga

「お客様専用サイト」にログインしないと読めないので、登録してくれて、ログインしてくれるメリットになるかな・・・

 

ただ、こうして過去のメールを発掘して読み返してみると、もっと技術情報を書きたかったなあと反省が出てきます。

あまり古いのは載せていません。せいぜい3年弱くらいです。うーん、データベースってすごい。

 

今までのメルマガはテキストベースのメールだったので、文字の配置とか、★とか■の装飾とか、そういう些細なことにこだわってしまって、肝心の技術的な文章が書きにくかったのですが、今後はHTMLメールが出せるようにシステムを改良していくので、もう少し中身の濃いメルマガになるように心がけていきたいと思います。

でも、どうしてメルマガってなかなか書けないんだろう。書き出しの時候のあいさつや季節の話題も苦手だからかな。そういうのを省いて内容だけを淡々と書いていけばいいのかな。

| | コメント (0)

2020.10.06

特電お客様サイトへの新規登録を抜本的に改革しました

特電お客様サイトの新規登録を一新しました。

Loginpage

いままでは、新規のご登録が来たら、私(なひたふ)が過去のメールのやりとりや購入履歴などを確認して、IDが重複しないように新規の番号を割り当てて、それをMicrosoft Accessで作った顧客管理システムに入力し、サーバ上にあるMySQLのデータベースと同期し、手作業で「登録完了メール」を出す・・・という気の遠くなるような作業をしていました。

かなり大変なので、つい登録作業を忘れてしまうこともあり、ユーザ登録に最長で1週間とか10日とかかかってしまうこともありました。お客様から「まだですか⚡」ってクレームが来ることもありました。

大変ご不便をおかけしました。

今日の改良により、新規ユーザがメールアドレスを入れる→ボタンを押す→URLがかかれたメールが送られる→メールに書かれたURLをクリックする→登録完了!というごくあたりまえの「新規ユーザ登録」になりました。

登録申請から登録完了まで5分もかかりません。

本当にご不便をおかけし、お待たせして申し訳ございませでした💦

 

新規ユーザ登録を簡単にした理由は、それだけではありません。

今までは、特電の製品をお買い上げいただいた方しか新規登録を受け付けていなかった(シリアル番号が必須)のですが、本日からは

まだ製品を買っていただいていないお客様、つまり特電にご興味をお持ちの段階の方でもユーザ登録ができる

ようにしました。

 

そんな登録をしてメリットがあるのか・・と思うかもしれません。

今更ですが、メーリングリスト・・いまはメーリングリストって言い方は古いですね。

ニュースレター」といいましょうか。

特電の新製品情報や、ブログには書いていない技術情報、Twitterで書いた散文をちゃんとまとめて検証した情報、バグフィックス情報などを、「お客様ページ」に書くためです。

今後は核心の技術情報や新製品情報をニュースレターに書いて、登録していただいたお客様にメールで送るとともに、「お客様サイト」でバックナンバーを見られるようにします。

そのために、今、Webメールの作り方や、レスポンシブデザインを勉強しなおしています。

表のブログと裏サイトという二刀流。今後は裏のニュースレターを頑張っていきますよ~。

といってもレスポンシブデザインの勉強から入るのでスタートするまでには、あと2週間くらい必要かな。

 

ユーザ登録URLはこちらです。↓

https://www.tokudenkairo.co.jp/login2/login.php

 

誰でも登録できますので、どうぞよろしくお願いします

 

| | コメント (0)

2020.10.03

Windows10でMITOUJTAGからXILINX Platform Cable USBを認識させる方法

Windows 10の環境で、MITOUJTAGがXILINXのPlatform Cable USBを認識しないという報告をいただきましたので、検証してみました。

Xil15

MITOUJTAGでXILINXのPlatform Cable USBを使うには、ISE 14.7か、ISEに含まれれるLabToolsが必要です。

まずはISE 14.7 LabToolsをダウンロードしてインストールします。

ISEのダウンロード先はこちらのURLにあります。

下の画面のようなページが出ますが、必要なのはLabToolsだけなので14.7(Windows10ではないほう)を選んでも同じです。

Xil8

ページの中ほどにLab Toolsがあるので、これをダウンロードし、インストールします。

Xil7

LabTools自体のインストールは問題なく進むと思います。

なお、Windows 7以降でISE14.7を使う際にはlibPortability.dllの差し替えをしないといけないのですが、今回の用途では特にしなくても大丈夫です。

 

インストールが終わって、Platform Cable USBをパソコンに挿すと、下の図のように「Xilinx Platform Cable USB Firmware Loader」というデバイスとして認識されるはずです。

Xil2

Firmware Loaderとは何かというと説明が大変なのですが、Platform Cable USBの中に入っているUSBインタフェースのチップはCypressのEZ-USB FX2というデバイスでReNumerationという機能によってUSBを経由してファームウェアをダウンロードして再起動することができるものです。Firmware Loaderは本番のファームウェアがダウンロードされる前のローダーが動いている状態です。

したがって、Firmware LoaderとなっているときにはPlatform Cable USBとしては動作しません。ただひたすらファームウェアを待ち受けるだけになっています。

問題なのは、Windows10環境下では普通にインストールしてもここまでしかたどり着けないようでした。

 

ここからどうすればよいのかというと、まず、LabToolsをインストールしたディレクトリのbin\nt64を開きます。私はXILINXのツールはHDDに余裕のあるDドライブにインストールすることにしているので、

D:\Xilinx\14.7\LabTools\LabTools\bin\nt64

になります。そして、install_drivers.exeを管理者権限で実行します。

Xil9_20201003175401

必ず管理者権限が必要です。

すると、ケーブルドライバインストーラというダイアログが出て、「Platform Cable USBをいったん切断しろ」と言ってきます。

Xil11

しかし、ここで切断してはいけません。Firmware Loaderの状態でOKボタンを押さないとFirmware Loader用のデバイスドライバがインストールされないようです。

JungoドライバとXilinx Programming Cablesドライバがインストールされるので、両方とも「インストール」を押します。

Xil6

このとき、Jungoドライバも必要です。

インストールが始まるとDOSプロンプトが出て一瞬で消えますが、下の図のようなことをしていました。

Xil10_20201003180701

インストールが完了し、下の図のように、JungoとXilinx USB Cableというドライバが認識されるようになれば成功です。

Xil1

このとき、iMPACTを起動してみてPlatform Cable USBがiMPACTで認識されるかどうかは確認してみてください。

Xil16

iMPACTで認識されないようであれば、MITOUJTAGからも認識されません。

 

 

MITOUJTAGを起動したら、オプション→XILINX Cable Serverの設定を開きます。

Xil12

XILINX Cable Server設定というダイアログが出るので、以下のように設定します。

Xil13

  • ケーブル自動認識でこのケーブルを検出する→オンにする
  • CSEサーバの実行ファイルの検索パス
    • EXEファイルを自動的に検索→オフにする
    • パス→D:\Xilinx\14.7\LabTools\LabTools\bin\nt64\cse_server.exe
    • CSEサーバのバージョン 14.5
  • ケーブルタイプ→xilinx_platformusb

とします。

CSEサーバのバージョンを14.7にすると接続できません。ISE14.7のLabtoolsなのに14.5にするのは、Labtoolsが14.5以降実質変わっていないからです。

これでMITOUJTAGでケーブル自動認識を行うと、Windowsセキュリティの重要な警告というのが出ます。XILINXのcse_server.exeを起動するためなのですが、このプログラムはTCP/IPでの待ち受けをするためです。「アクセスを許可する」を押してください。

Xil5

これでPlatform Cable USBがMITOUJTAGから無事に認識されるようになり、バウンダリスキャンで最新のFPGAの端子を見ることができるようになるはずです。

Xil14

どうしてもうまくいかない場合は以下の点を再点検してみてください。

  • ターゲットボードの電源がONになっていて、Platform Cable USBにVREFが来ているか?(VREFがないとPlatform Cable USBは接続できません)
  • iMPACTから認識できるか?
  • デバイスドライバがFirmware Loaderになっていないか?
  • ISE 14.7のLabToolsは入れたか?
  • Vivadoに付属のドライバが入っているとiMPACTでは使えなくなる。ISE 14.7 LabToolsのinstall_driver.exeを実行するように。ISE 14.7 LabToolsはVivadoでも使える。

これで、XILINXのケーブルを使いながら、バウンダリスキャンによってデバッグが一層はかどることと思います。

| | コメント (0)

2020.09.30

HDMIの信号をJTAGロジアナで見る

DigilentのDVI2RGBコアの出力をVideo In to AXI-4 StreamでAXI Streamに変換し、AXI Subset converterを入れて32bitにします。AXI Subset converterというのはSliceやconcatみたいなものなのでしょう。左側に8bitのゼロを詰めてくれるようですね。

Hdmicap0

こうして作ったブロックを2つ用意し、MITOUJTAGのJTAGロジックアナライザで見れるようにしました。

Hdmicap1

手近にあったノートPCのHDMI出力に基板をつなぎMITOUJTAGで見てみます。

下の図のような感じでAXI Streamらしき波形が見えています。

Hdmicap3

tvalidがHになっている期間を数えてみると1920クロック分ありました。そしてtuser(0)が'1'になってからtlastを数えると1080個あるので、tvalidがHSYNCの代わりになっていて、tuser(0)がVSYNCの代わりになっているのでしょう。

ただし、tuser(0)が'1'になってからの4ライン分はtvalidが39クロック分しかない短いラインが来ていました。そのあと、1080個の通常の画像ラインが来ています。最初の4ラインは何でしょうね?音声とかかもしれません。

Hdmicap2

それから、0x00A277という値が送られてきていますが、DigilentのDVI2RGBコアではRBGの順にならんでいるので、RGB=0,119,162という値になります。どんな色かというと、

00a277

昔懐かしい、Windows8のデスクトップの色ですね。

 

| | コメント (0)

2020.09.29

DigilentのDVI2RGBコアを使ってEyeSizeを測る

DigilentのHDMI/DVI受信コアを読んでみると、eyeSizeという信号を内部で作り出していることに気が付きました。

このコアはHDMIの信号をデコードするために、IDELAYのタップを少しずつ変えていって最適なところを探してくれるようなのですが、最適なタップ間の幅を測ることでeyeSizeを計測しているようです。この信号をコアの外に出して、MITOUJTAGのBLOGANAで見てみました。

Es1

下の波形のようにRGBそれぞれのeyeが開いている幅が数字で出ています。5bitなので0~31の範囲ですが、おそらくタップのビット数ですね。

Es2

1080pなら1.485Gbpsだから1bitの間隔は673ps。1タップは78psなので8ならば624ps。8が最大のはずです。Digilentのコアには各チャネルごとに位相を合わせる機能があるようなので、チャネル間の遅延はIDELAYで吸収できるのでしょう。

 

Cosmo-Kの2つのHDMI入力ポートで、2台のPCで、2種類のケーブルで試してみました。

Es3

まず、PCによってeyeのサイズが異なるがわかります。「このPCと相性が悪い」というのはあるのでしょう。

高級なケーブルよりも安く長いケーブルのほうが成績が良かったり、このあたりは一概にはなんとも言えませんが、HDMIの信号の品質をFPGAで測ることができそうです。

 

| | コメント (0)

2020.09.28

HDMI信号を見ることに成功

Cosmo-K DVIの論理合成が通るようになりました。

Hdmi2

何がなんだかよくわかりませんが、とても苦労しました。Vivadoが吐き出すエラーのほとんどはクロック関係だったような気がします。HDMIからデコードしたクロックと、高速シリアルデコード用のクロック、HDMI出力用のクロック、内蔵のMMCMで作ったクロック、JTAGロジアナのクロック・・非常にたくさんのクロックがあってリソースが競合していたようです。

HDMI受信の心臓部は下の図のようになっています。これはアルバイトの学生さんが2018年に作ってくれたデザインをベースにしています。DigilentのDVI2RGBコアでデコードし、v_vid_in_axis4に入れ、axis_subset_converterで32bit幅に拡張しているようです。

Hdmi3

AXISになるまえのPixelClockドメインの信号をJTAGロジックアナライザで見てみたいと思い、HDMIコアが出す波形をBLOGANA(MITOUJTAGに付属のJTAGロジックアナライザ)を入れただけのモジュール「rgb_blogana」を作って通すと、なぜかクロックがらみのエラーが出ます。

[Place 30-120] Sub-optimal placement for a BUFG-BUFG cascade pair. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets hdmi_repeater_i/clk_wiz_3/inst/clk_out1] >

こんな感じのエラーがたくさんでます。BUFG-BUFGの接続に何の問題があるのかわかりませんが、CLOCK_DEDICATED_ROUTE FALSEを設定すればよいようです。

MMCMが局在しているのかなと思い、MMCMをPLLに変更したりだ適当にやっていたらちゃんとビルドが通るようになりました。一か所に集中してBUFGを使うようなデザインがよくないのかもしれません。

Cszdvi1

紆余曲折ありましたが、生のHDMI信号をMITOUJTAGのBLOGANA機能を使ってみることができました。

Hdmi1

1080pの信号を見てみたところ、HSYNCの周期は横2200ピクセル、VSYNCの周期は縦1125ラインでした。毎秒60回だとすると、2200x1125x60p=148500000となって、ピクセルクロックの周波数148.5MHzと一致します。

また、HSYNCは44clkの幅があって、VDEは192-2112clkの間まで出ていることがわかりました。

2018年にVivado 2017.2で論理合成していたときにはこの基板はHDMIの1080pの受信がうまくいかなかったのですが、今のデザインではうまく受信できているようです。ツールが変わったのが原因か、それともクロックの質が良くなったのが原因か。

 

| | コメント (0)

«Cosmo-K DVIのデザインをVivado 2019.2に移植