« 2017年8月 | トップページ | 2017年10月 »

2017.09.30

1GspsのADC基板の温度が100℃を超えた

開発中の1GspsのADC基板は、とにかく熱い!

放熱をしないと基板の温度は100℃近くまで上昇します。

主な発熱しているICは、TIのクロックジェネレータ「CDCE62002」と、TIのADC「ADS54J60」なのですが、Artix-7もGTPを動かしているのでそれなりに発熱しているかもしれません。

現在はメイン側のArtix-7のみ動かしていますが、基板に5Vを与えたときの消費電流は2.5A程度です。

Np1094_pcb

メイン側のArtix-7のみを動かして、Vivadoで温度を測ってみると、動作開始後4分程度で100℃を超えてしまいます。

Temp_main

一方、動作させていないサブ側のArtix-7は85℃くらいなので、Artix-7自体もそれなりに発熱しているのかもしれません。

Temp_sub

とにかく100℃を超えるのは尋常じゃないので、放熱対策が必要と思われます。

| | コメント (0)

2017.09.29

ADS54J60からの信号確認

1GspsのADC「ADS54J60」とArtix-7を使った基板の開発を進めています。

クロック発振器を設定して1GHzの信号を作ってADCに送ると、高速シリアルのラインに何らかの信号を出してくることが確認できました。

Ptn1

2ns(500MHz)の周期でおそらく「1011011000」のパターンを出してきていると思われますが、どこが区切りかはわかりません。

データレートが5Gbpsであることはわかります。

sun

ADCの#SYNC端子をLにしたままにすると、1や0の長さが5bitくらいあるパターンが出てくるので1111101011と読めます。これはK28.5でランニングディスパリティが交互に繰り返しているのがわかります。

Ptn2

5bitの長さのパターンがあれば特徴的なので人間でもわかりますね。機械でも同じです。

これで、ADS54J60から何らかの信号が出てきていることが確認できました。ADS54J60にレジスタ設定を行わなければ何も出てこないので、とりあえずはSPIレジスタの設定まではOKであることがわかりました。

| | コメント (0)

2017.09.28

Accessが動かなくなった

特電では販売情報の管理や伝票の印刷にMicrosoft Accessを使っているのですが、Access 2016でアプリが突然動かなくなりました。

データベースに含まれているVBAプロジェクトを読み込めないため、データベースを開くことができません。」と出ます。

Access1

ここでOKを押すとVBAが消されるし、キャンセルを押しても動きません。

9月28日の発送分は別のPCで行ったのですが、何とかしなければなりません。

sun

どうやらAccessの更新プログラムのバグのようで、Microsoftのページによれば以前のバージョンに戻せばよいようです。

https://blogs.msdn.microsoft.com/office_client_development_support_blog/2017/08/23/ver1708-issue-japanesenamevbamodule/

"%programfiles%\Common Files\Microsoft Shared\ClickToRun\officec2rclient.exe" /update user updatetoversion=16.0.8326.2107

Access3

Access2

これで無事に起動するようになりました。

Access4

| | コメント (0)

2017.09.27

1GADCの基板ができてきた

先週火曜日に基板屋さんにデータ出力した1Gsps 16bit 2chのADCボードの実装があがったので、実装屋さんまで取りに行ってきました。

Artix-7のトランシーバ付きのが2個乗っている豪華デザインです。

Np1094_impd_2

早速、恐る恐る電源を入れてみました。

Np1094_pwron1

安定化電源がブーンとうなりをあげて、5V 1.5Aくらい流れます。

JTAGをつないでMITOUJTAGで見たら、Artix-7がコンフィグROMを読み出そうとCCLKをバタバタさせているのが見えたので、FPGAが生きていることは確認できました。

MITOUJTAGを使うとFPGAに書き込まなくても一瞬で動作確認ができるから超安心できる。

Np1094_pwron2

しかし、JTAGでバウンダリスキャンしても、FPGAのI/OポートにつないだLEDが点灯しない・・・

どうやらLEDのアノード電圧を1.8Vにしていたようです。3Vくらいないと青色のLEDは光りません。

気を取り直して、低ジッタの1GHz発振器「CDCE62002」のレジスタ設定を行います。

Np1094_pwron3

CDCE62002は、25MHzのREFCLKを入れておくと、デフォルトで125MHzのLVDS出力と156.25MHzのPECL出力が出るようです。LVDS出力は作動プローブを使えばオシロでも容易に見えますが、PECLはよく見ません。

とりあえず125MHzと1GHzを出すようにSPIレジスタの設定を変えます。

出てきた125MHzの信号はクロック分配器で2つのFPGAに送られますが、片方のFPGAへの波形は少し反射が見えています。

125m_1

125m_2

1GHzのLVDS信号は振幅が小さめになります。

1ghz

クロック発振器までは正しく動作をしていることは確認できました。

| | コメント (0)

2017.09.24

Kintex-7のDDR3メモリエラー

Kintex-7のPCI Express - DDR3 DMAで、急にエラー率が上がってしまいました。

PCI Expressと同期したクロックをMIGに使っているのにわずか150GBくらいでエラーが出てしまいます。

141回、Total 151397 Mバイト転送
結果は一致していません
Write 344E14E0: F8 81 FC 28 19 22 69 FF D3 8E 01 04 77 CE D8 02
Read  344E14E0: F8 81 FC 28 19 22 69 FF D3 8E 01 06 77 CE D8 02

138回、Total 148176 Mバイト転送
結果は一致していません
Write 20195420: 20 AC 5E 00 EA B7 6F FF 91 CC 88 00 65 7B 1A 42
Read  20195420: 20 AC 5E 00 EA B7 6F FF 91 CC 88 02 65 7B 1A 42

147回、Total 157840 Mバイト転送
結果は一致していません
Write 190B9540: 78 79 97 28 C8 A6 FF FF D7 C3 00 04 4F 16 CC 52
Read  190B9540: 78 79 97 28 C8 A6 FF FF D7 C3 00 06 4F 16 CC 52

どうやら、上のようなパターンのときに、3回目のアクセス時にデータバスのbit25が1になってしまうようです。

以下のようなパターンでエラーが出ることがわかりました。

28000000
FF000000
04004000
02000000

このパターンのみを送るようにしたところ、エラーが出まくりです。

Ddr3err

DDR3の3回目のアクセス時に、他のビット線やアドレス線からのクロストークでbit25に影響が出てしまうようです。

sun

そこで、少しデザインを変えて論理合成しなおしてみたところ、

Async_bd

エラーが出なくなりました。

8時間ほどかけて15TBを転送しましていますが、ノーエラーです。

15tb

微妙な何かで、DDR3のキャリブレーションの問題が起きているのかもしれません。

 

| | コメント (0)

Kintex-7のPCIe DMAとDDR3の安定動作

一昨日からKintex-7のPCIe DMAとDDR3メモリを読み書きのテストをしています。

やっていることは下の図のように、ホストPCで生成した1GBの乱数データを、PCI Express経由でKintex-7に送って、ボード上のDDR3メモリに書いて、読んで、照合するという単純なものです。

Xdmaddr3

しかし、読み書きデータを照合してみると、数十GBでエラーが出てしまいます。

もしかして、このボードは、PCI ExpressとDDR3を同時に使うと不安定になるのか・・・と絶望的な気分にもなりましたが、実はそうではありませんでした。

結論から言うと、原因は、

  • VivadoのJTAG経由で温度を見ていると失敗しやすい
  • 論理合成でタイミングエラーが出ている
  • 複数のクロックドメインを渡っている

ということでした。

まず、温度を見るためにVivadoのXADCモニタを使うのをやめました。それだけでも随分安定したのですが、それでもまだ数十GBで止まってしまうようでした。

そこで、ひとまずDDR3を使わずに内蔵BlockRAMを使ってテストすることにしました。温度モニタ用のXADCの回路はFPGAの中に入れて、PCI Express経由で読み取れるようにしました。

XC7K160Tの中に入れられるブロックメモリは最大で1MByte程度なので、1MByteの読み書きトランザクションをたくさん発行してテストを行ったところ、1.7TBほど読み書きしてもエラーは一つも発生しませんでした。5TBというのは、いままでの実験の結果からしても驚異的な成績でした。

Xdmabram

このことから、PCI Expressには問題がなさそうです。

考えらえる原因は、クロックなどに起因しているエラーの可能性が濃厚でした。そこで、まず全てのタイミングエラーを解決し、MIGのクロック源を水晶ではなくPCI Expressコアが出す125MHzクロックを使うことにしました。

Cdc2

こうすれば複数の周波数のクロックドメインがあっても、その位相関係は数パターンに限定されるはずです。これならタイミング的にもよい回路が合成できるはずです。

単一のクロック源ですべてを動くようにしたところ、5TBのデータを読み書き(3時間程度かかる)しても一つもエラーが発生しませんでした。

5tb

このときはFPGAの温度も気にしていたので扇風機で風を当てながら62℃前後で動かしていましたが、そのあとで扇風機を止めて83℃前後にしても、やはり、エラーは発生しませんでした。

5tbhightemp

温度は関係ないようです。

sun

次に、MIGのクロック源を水晶にすると、PCI ExpressとMIGは全く別のクロックで動くことになります。

Cdc1

先ほどの場合と周波数は同じですが、異なるクロック源なので、クロックドメイン境界であらゆる位相差が登場するはずです。

この場合、やはりエラーが出てしまいました。

Memerr

上の図では約3.4TB程度でエラーが発生したようです。

sun

昨日から悩んでいた「数十GBでエラーが出てしまう原因」は、基板の問題ではなく、複数のクロックドメインを渡る問題(clock domain crossing)である可能性が濃厚です。

AXI Interconnectでどのようなタイミング制約を書けばCDCを解決できるのかはわかりませんが、もしかしたら確率的にエラーが起きることは避けられず、可能性はゼロにはできない問題なのかもしれません。

最後に、出来上がったBlock Designとリソース使用率を示します。

Xdmaddr3bd

Util

Kintex-7用の標準的なPCI Experss-AXI-DDR3のサンプルとして近いうちにリリースできると思います。

| | コメント (0)

2017.09.22

Kintex-7でDDR3メモリにPCIe DMAが成功

特電のKintex-7ボード「Cosmo-K」の上のDDR3メモリに、PCI ExpressからDMAで転送することに成功しました。

下の写真のようにパソコンのPCI Expressスロットにさして、PCIe経由でボード上のメモリに乱数を読んだり書いたりしています。

Cosmokdma

Vivadoのブロックデザインはこんな感じです。

Cosmokdmapcieddr3

DDR3のアクセスはMIGを使っています。

ボード上には1Gバイトのメモリが乗っているので、最大、1GBまでDMA転送できるのですが、10M~100Mバイト程度の転送のときが一番速いようでした。

パソコンのキャッシュの問題なのか、OSのメモリ管理の問題なのかはわかりません。

Throughput

Block RAMに転送するときも、DDR3 DRAMに転送するときも、スループットに差はありませんでした。つまり、DRAMの読み書きのオーバーヘッドは無視できるようです。

DMA write2、DMA read2というのは私が作ったデザインで、DMA write、DMA readというのはインターンの学生さんが作ったデザインです。なぜ差が生じるかはわかっていません。

現在、100Gバイト程度転送していますが、特にエラーは起きていません。

どうでもいいことですが、バッチファイルのIF文の使い方の備忘録として、バッチファイルを書いておきます。

SET LOOPCOUNT=0
SET DATASIZE=1073741824
@:loop
tkpe2test c %DATASIZE%
@if errorlevel 1 goto exit
@SET /A LOOPCOUNT=LOOPCOUNT+1
@SET /A TOTAL=(%DATASIZE%/1000000)*%LOOPCOUNT%
@echo %LOOPCOUNT% 回 %TOTAL% MBytes
@goto loop

:exit
PAUSE -1

Dma100g

ボードが非常に熱くなるので、扇風機が必須です。

扇風機を止めるとチップ温度が80℃以上になって、エラーが出ることがあるようです。ただ、そのエラーがPCIのものなのかDDR3のものなのかはわかっていません。

これで、大容量メモリを活かした高速データ取り込みシステムが作れそうですね。

いろいろとわからないことはありますが、Cosmo-Kで、PCI ExpressとDDR3メモリがつながりました。もう少し安定して動作するようになってきたらソースを公開します。

Kintex-7の汎用PCI Express評価ボード「Cosmo-K」のページはこちらです。

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

どうぞよろしくお願いします。

| | コメント (0)

2017.09.20

Vivadoのプロジェクトをテキストベースで生成する方法

FPGAで計測アプリを作るときに、お客様によってフィルタを入れたり、トリガの構成が異なったりという細かな違いはよくあることでしょう。

そういう顧客ニーズによって少しずつ構成が変わるようなデザインをVivadoで作りたい・・と思い、「Vivadoのプロジェクトを自動生成する方法」をアルバイトの学生さんに編み出してもらいました。

まず、top_script.cmdというバッチファイルと、project_generator.tclというTCLファイルを用意します。

top_script.cmdの中身は

C:\Xilinx\Vivado\2016.4\bin\vivado -mode batch -nojournal -nolog -notrace -source ./project_generator.tcl

です。これはVivadoをバッチモードで起動して、TCLファイルを読みだしているだけです。

起動してみると、

Vpgen1

このようなメッセージが出て、何やらVivadoのプロジェクトができています。

Vpgen2

起動してみると、こんなBlock Designができていました。

Vpgen3

project_generator.tclの中では、まず、プロジェクト用のディレクトリと、プロジェクトファイルを生成しています。

file mkdir bd_gen_test00
cd ./bd_gen_test00
create_project bd_gen_test00 . -part xc7z010clg400-1
set_property target_language VHDL [current_project]
create_bd_design "design_1"
create_bd_cell -type hier hier_0

次にRTLのソースファイルをデザインに追加します。

add_files ../../src/moduleA.vhd
add_files ../../src/moduleB.v
create_bd_cell -type module -reference moduleA moduleA_0
create_bd_cell -type module -reference moduleB moduleB_0

RTLモジュールBを階層の中へ移動

move_bd_cells [get_bd_cells hier_0] [get_bd_cells moduleB_0]

RTLモジュールBの中のピンC_iとモジュールAのAA_oを接続

connect_bd_net [get_bd_pins moduleA_0/AA_o] [get_bd_pins hier_0/moduleB_0/C_i]

レポジトリのディレクトリを指定

set_property  ip_repo_paths  ../../ip_repo [current_project]

IPカタログを更新

update_ip_catalog

自分のIPを追加

startgroup
create_bd_cell -type ip -vlnv xilinx.com:user:myip_AXI_S_master:1.0 myip_AXI_S_master_0
create_bd_cell -type ip -vlnv xilinx.com:user:myip_AXI_S_slave:1.0 myip_AXI_S_slave_0

追加したIPを階層の中へ移動

move_bd_cells [get_bd_cells hier_0] [get_bd_cells myip_AXI_S_slave_0]

モジュール間の配線を行う

connect_bd_intf_net [get_bd_intf_pins myip_AXI_S_master_0/M00_AXIS] [get_bd_intf_pins hier_0/myip_AXI_S_slave_0/S00_AXIS]

外部接続ピンを作成し、接続

create_bd_port -dir I -type rst m00_axis_aresetn
connect_bd_net [get_bd_pins /myip_AXI_S_master_0/m00_axis_aresetn] [get_bd_ports m00_axis_aresetn]
create_bd_port -dir I -type clk m00_axis_aclk
connect_bd_net [get_bd_pins /myip_AXI_S_master_0/m00_axis_aclk] [get_bd_ports m00_axis_aclk]
connect_bd_net [get_bd_pins myip_AXI_S_master_0/m00_axis_aresetn] [get_bd_pins hier_0/myip_AXI_S_slave_0/s00_axis_aresetn]
connect_bd_net [get_bd_pins hier_0/myip_AXI_S_slave_0/s00_axis_aclk] [get_bd_pins myip_AXI_S_master_0/m00_axis_aclk]
endgroup

レイアウトを再生成

regenerate_bd_layout

トップのラッパファイルを作成

make_wrapper -files [get_files ./bd_gen_test00.srcs/sources_1/bd/design_1/design_1.bd] -top
add_files -norecurse ./bd_gen_test00.srcs/sources_1/bd/design_1/hdl/design_1_wrapper.vhd

要するに、人が手作業でBlockDesignを作るときのやり方をtclファイルにして、それを実行させているのです。Tckコマンドの与え方は、VivadoでTcl Consoleを見ているとわかります。

やり方がわかってくれば、Tclのコマンドをテキストエディタでコピペして作ることができるようになって、こんなデザインでも自動的に作れるようになります。

Vpgen4

| | コメント (0)

2017.09.19

Artix-7は、2.5Vでないと基本的にLVDSは使えない

ずっと作っていた1GspsのADC基板を出図して、木曜日に発送してもらえることになりました。6層基板で金フラッシュ仕上げですから、本当に超特急ですね。

さて、アルバイトさんに基板のFPGAのピン配置に合わせてテスト的な信号を出すデザインを作ってもらっていたら、重大な事が発覚しました。

「LVDSの端子から、LVDSが出せない・・(;´Д`)」

いつもKintex-7ばかり使っているので、Artix-7の使い方を忘れていました。

Artix-7にはHRポートしかないから、基本的にLVDSというIOSTANDARDが使えないのです。

入力だけなら・・と思ってみても、DIFF_TERMが使えないので、100Ωの抵抗を外付けする必要があります。

(Vivadoには2.5Vと申告して論理合成させておいて実際に1.8Vで使うという裏技もありますが、それは最後の手段)

Artix-7のI/Oは2.5VにしないとLVDSは出せない

大事なことだからもう一度言います。

Artix-7のI/Oは2.5VにしないとLVDSは出せない

(;ω;)

結局、基板はどうしたかというと、システム全体のV18という電源ネットに2.5Vを加えることにしました。VCCAUXは絶対最大定格2.0Vなので、2.5Vを加えるわけにはいきませんから、VCCAUXを切り離すことにしました。

そして、下の図のような配線でVCCAUXだけをつないで、基板実装後に1.8VのLDOを手づけすることにしました。

Change

基板屋さん的にも間に合ったようで、納期の変更なく作ってくれるようでした。

また、アルバイトさんが実験してくれた感じでは、1.8Vの電源電圧でもLVDS_25を使えば何らかの信号は出るとのことでした。

| | コメント (0)

2017.09.18

祝日なのに

朝から町会のお祭りの片づけをして、夕方商品の発送をするために会社に行くと、祝日なのにアルバイトさんたちが来て、仕事をしてくれていました。ありがとう(◎´∀`)ノ

どうやら祝日であることが周知されていなかったようです。

さて、アルバイトさんがVivadoのBlockDesignを、テキストベースで自動生成する方法を確立してくれたようです。

今日は祝日だから佐川急便が来ないので、特電の製品箱を6個ほど担いで、東京駅の駅ナカにある佐川急便サービスセンターに行って、出荷してきました。

東京駅の佐川急便は年中無休で祝日も開いているのでありがたいです。でも、締め時間が18:00のようで、ぎりぎりセーフでした。

おそらく火曜日にはお客様のところに到着するでしょう。

それから、長年設計していた1GspsのADCボードがようやく完成しました。

Top

Bot

GndMid1_2

Mid2Vcc

VCC層の分割がすごいことになりました。

明日には出図します。

| | コメント (0)

2017.09.15

1GspsのADC基板の設計がひととおり完了

半年以上かけてきたこの基板の設計がようやく90%できました。

Np1094_6

Np1094_7

今日やったことは、

  • クロックの配線
  • 可変ゲインアンプのコントロール配線
  • 本体基板からFPGAをシリアル通信でコントロールする配線
  • LED、テストポイント
  • PDとTESTにプルダウン
  • サブ側のほうのFPGAにもLEDをつける
  • 電源コネクタを付ける
  • ±2.5V電源のところの配線を見直し
  • DRCの見直し
  • 電源がよけられている箇所を発見
  • REFDESのつけなおし
  • シルク調整

まだ残っている事項としては、露出PADの部分の確認と等長配線があります。

来週の火曜日に出図して、木曜日に基板出来上がり。急いで実装して再来週の月曜日発送、火曜日(26日)到着で、3日でデバッグして29日に客先納品・・・できるでしょうか

sun

それから、Cosmo-Kを使った10Gイーサから出したデータを、10GNICとDPDKを使ったLinuxで受信したレートが9.2Gbpsであることが計算できました。ほぼ帯域を使い切ることができました。

ほかには、VivadoのBlockDesignをテキストファイルから生成する実験などをしていました。

| | コメント (0)

2017.09.14

物理学会を聞いてきた

物理学会の講演聞きに宇都宮へ行ってきました。

1日目と3日目を聞きにいきに行ったのですが、FPGAを使っている研究のほとんどがXILINX派でした。Intelは1件だけしか見つかりませんでした。

それぞれFPGAをいろいろな使い方をされていて、非常い興味深いのですが、「ハードウェア作ったけど動かない」とか「高周波特性が出ない」という発表も目立ちました。

まぁ、私から見れば原因や解決法は一発でわかるのですが、部外者なので黙っていました。

私が作ったFPGAボードがATLAS実験のスライドで写真入りで紹介されていて、しかも「特殊電子回路株式会社との共同開発」って社名も書いてくれていたのがあって、超感激です。とりあえず今までのところエラーが起きていないとのことで安心しました。

| | コメント (0)

2017.09.13

ブログを更新するのが滞りがちなので・・

ブログを書くのはとてもエネルギーがいるので、なかなか更新できません。

ツイッターは気楽に書けるのに。

とりあえず、本日から毎日の成果だけを1行で記述していくことにします。

  • EPICS、CSS、ROOTを試す
  • 1Gspsの拡張ボードの設計がほぼ終わった
  • DPDKでCosmo-Kの10Gイーサのスループットを測ったところ、9Gbpsくらいでているようだ
  • JESD204B→FPGA内蔵BRAM→XDMAで波形をキャプチャして表示するソフトが少し進捗。波形が乱れる原因が判明。XILINXのJESD204B PHYがチャネルボンディングできないのが原因なので、自前のコアに置き換えることにする

画像や、詳しい説明は暇なときに更新するので、後日見に来てください。

| | コメント (0)

2017.09.07

TrenzElectronic社の販売サイトをリニューアルしました

特電が運営している、TrenzElectronic社の販売サイトをリニューアルしました。

http://www.trenz.jp/

です。

Trenz1

ショッピングカートを統合し、また、すべての通信をSSL対応にしました。

いままではTrenz製品をお買い上げの場合でも、特電オンラインショップに飛んでから購入するようになっていましたが、これからはtrenz.jpの中だけでお買い物ができます。

また、取り扱い商品のカテゴリごとに一覧表示ができるなどしています。

Trenz2

Trenz3

このサイト、実はWordPressにWooCommerceというプラグインを入れているのですが、WooCommerceのデフォルトだと、ヘッダの絵が大きすぎたり、画面が左寄せでマージンがゼロになっていたりしていてかなり酷いレイアウトだったので、CSSやPHPファイルをいろいろ書き換えて綺麗なレイアウトにしました。

WooCommerceを日本語化すると、発送先住所選択のところで県名がアルファベットなのに、なぜか東京と北海道だけ漢字というわけのわからない状態になっています。

これも、PHPファイルを書き換えることで対応しました。

sun

さらに、WooCommerce日本語パッチに、GMOイプシロン対応のクレジットカード決済プラグインを入れてみたのですが、そのプラグインに制御が渡らないようで動作しません。

PHPのソースは全部公開されているので、暇なときにデバッグしてみようと思います。

| | コメント (0)

2017.09.01

Cosmo-Kのホームページを作成中

有名なメーカー製のPCI ExpressのFPGAボードを買ってはみたけど

PCI Expressのコアがない

とか、

ドライバがない

とか、

サンプルプロジェクトの使い方がわからない

といったことはありませんでしたか?

特殊電子回路のPCI Expressボード、「Cosmo-K」も危ういことにそうなりかけていました。

当初のコンセプトである誰にでも本当に簡単にPCI Express Gen2を使いこなせるボードとしての原点に立ち返って、ホームページにどんどん技術情報を書いて充実させていくことにしました。

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

まずは基板の説明や、

Board

ボード上のGPIOの説明とFPGAのピン配置、

Gpio

PCI ExpressとDMAの作り方のチュートリアルなど

Pcie

誰でも使えるように、わかりやすく書いていきたいと思います。

丸一日かかってもPCI Expressの説明の途中までしか書けませんでした。Kintex-7を使うにはそれだけたくさんの情報が必要です。

Kintex-7のPCI Expressボード「Cosmo-K」の詳細は下記のページをご覧ください。

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

| | コメント (0)

« 2017年8月 | トップページ | 2017年10月 »