So-net無料ブログ作成
前の5件 | -

Tang-NANO届いた(追記あり) [FPGA]

SiPeedの激安FPGAボード、Tang-NANOがSeeedで販売になってたのでいくつかまとめて購入しました。
EIG1WxvUUAABb7M.jpg

GOWINのツールは半年ぐらい前からインストールして触っていたのですが、現物含めたファーストインプレッションとしては‥‥

・GOWIN IDEツール
意外と使いやすい。SynplifyProで論理合成から配置配線までやるので、IDEはほぼガワだけの存在。そのうちVScodeのプラグインが出てきそう。
コンパイルはかなり高速だけどチューニング項目はあんまりない。タイミングを追い込んで使うようなヘビーな使い方を期待すると死ぬ。
ハードマクロを使うIPジェネレータや、組み込みロジアナなんかも一通り揃っている。
ただし、論理シミュレータがまったくないので、これだけで使おうとすると泥沼。QuartusPrime Liteと併用してModelSimを使うのが吉。

・Tang-NANOボード
使われているFPGAはGW1Nシリーズの一番小さいやつ。1152LUT+864FFで乗算器はなし。メモリマクロは18kbitのブロックRAMが4個。PLLが1個。コンフィグROMを内蔵しているので、MAX10の500~800LE相当な感じ。
オンボードにはJTAGダウンローダが載っているので、単体でGOWIN IDEのProgrammerからコンフィグレーションデータを書き込むことができる。
それ以外には64MbitのQSPI-SRAMが載ってる。所謂IoT-RAMと呼ばれているグループで、小ピン(6本)でそこそこ高速な大容量メモリを扱える。
ボード上には40ピンFPCも載っていて、4.3インチグラフィック液晶のデファクトスタンダード配置。専用の800x480 LCDの他、秋月で売ってる480x272 LCDも接続できる。

なかなかいい、と思いきやLCDバックライト昇圧回路が問題でした。

サンプルのコンフィグで指定のLCDを繋ぐとカラーバーは出る、しかしLCDを繋いでないときは点滅し続けるカラーLEDがLCDを繋いでいるときは途中で止まってしまう。しばらくほっとくとまた点滅を始める。
USBの電源供給の問題かと思ったので5V/2Aの充電器に繋いでみるも、やっぱり挙動は変わらない。
個体の問題かと思って別のボードを繋いで見ても同じ症状がでる。

こういう不可解な挙動をする場合、かなり高い確率でFPGAの電源系に問題を抱えています。
サージやドロップで部分的に内部ロジックの動作がおかしくなり、CRCチェックが回ってくると再コンフィグして復帰する、というパターン。

それでパターンを追いかけてみると、1.2Vの電源が1本、昇圧DC/DCのインダクタのそばを通り、ICの下をくぐってバックライトLEDラインと並走して、かなり大回りしてFPGAに接続されているのがわかりました。
また1.2V/3,3V LDOへの入力も昇圧用インダクタと十分なデカップリングがされていないので、1.2Vラインの電源品質はかなり悪いと考えられます。

tangnano_power.jpg

基板のアートワークレベルの問題で、部品の載せ替え程度では解決しそうにないので、LCDを使う場合はオン
ボードのバックライト昇圧回路は切り離して、外部にバックライト電源を接続する必要がありそうです。
なんとか電源パターンのカット&ジャンパでどうにかできないか模索中。

で、とりあえずLチカ




追記。
SiPeedからレスがあり、どうも出荷で書き込まれてるやつはタイミングmetに不具合があるようです。

sipeedio.png

さらに迅速にストレステストを実施してもらい、1.2Vの安定性を確認していただきました。



ただ、出力しかしないはずのLCDを接続するとおかしくなるのも、負荷のかかり方でシビアなタイミングの問題でてるとするならやはりボードなりデバイスなり電源まわりに弱い箇所があるのだろうとは思います。
上限を見極めたいので、こちらでももうちょっと調べています。


さらに追記。

1.2Vラインをジャンパして昇圧DC/DCをカットしたものと、無改造のものを比較測定しました。
接続したLCDは秋月のATM0430D5です。これに480x272のカラーパターンを表示させて電源ラインに重畳するノイズを見ました。



昇圧DC/DCの1.5MHzのノイズが定常で±60mV以上重畳していて、動作マージンはかなり厳しいと考えられます。タイミングぎりぎりのデザインはやらない方がいいですね。

MakerFaire深圳と深圳見学会(その1)

今年は11月9~10日の日程で行われたMakerFaire深圳を(ようやく)見に行ってきました。
DSC_2309.JPG
例年MakerFaire台北と時期が近く、なかなかスケジュールの都合が取れなかったのですがようやく行くことが出来ました。なにげに初の中国本土です。

深圳への入国ルートはいくつかありますが、今回は香港空港→MRT上水駅まで高速バス、上水から落馬洲へMRTで移動して、福田口岸のイミグレを通るルートにしました。
理由はいくつかありますが、落馬洲-福田は両方ともMRTの駅と直結なので迷わずに済みそうなのと、行きはMakerFaire会場へ直接行くので留仙洞駅への乗り換えが少ないのがいいのが主なところです。

毎年会場が変わっていくMakerFaire深圳ですが、今年の会場はスタートアップ向けのオフィスを整備している区画に隣接した半地下の施設でした。雰囲気的にはMakerFaire京都の会場に近いですかね。
DSC_2311.JPG
DSC_2312.JPG

会場の裏手ではがんがんビルが生えていってます。
DSC_2321.JPG

教育面の展示が多いのはアジア圏のMakerFairに共通してるシーンですね。
DSC_2313.JPG

日本出展勢のブースはNTと変わらない顔ぶれ。
DSC_2315.JPG

MakerFaire深圳はここ毎年のように開催地が変わっていて、少し前は大規模な開催で賑わっていましたが、今年の会場は比較的こぢんまりしていて、一頃のMakerムーブメントも落ち着いてきたのかなという印象を受けました。
とはいえ、会場の裏手では大規模なMakerスタートアップ向けのオフィスビルが造成されている最中で、ビジネスとして広げていこうという気合いを感じます。

そのままMakerFaire会場を後にして、華強北の電子部品ビルへ向かいます。
DSC_2331.JPG
当日は日曜だったので大半の店舗が閉まっていたのですが、行ってみて確信しました。
ここ秋葉原じゃなくてデジットが無限に広がった五階百貨店だ!

日が落ちると至る所でLEDディスプレイが輝き始めます。
DSC_2337.JPG
このシーンは我々が80年代に夢見たSFサイバーパンク!


変わって二日目はスイッチサイエンスの高須さん(@tks)主催の東莞工場見学ツアーに行きました。
(つづく)


MakerFaire台北参加しました

毎年10月下旬あたりに開催されるMakerFaire台北に今年もニコニコ技術部集合ブース(Nico-TECH)として参加してきました。
DSC_2247.JPG

当日前後の様子はこちら
メイカーフェア台北2019 #NT台北 まとめ

海外MakerFaireへの合同ブース出展は、日本各地で開催されているNTイベントの一環として2015年からスタートしていて、その中でもNT台北は最古参で今年で5年目になります。最大規模での参加だった2017年と比べると、去年・今年と参加人数は減っているものの、目を引く展示は多かったように思います。
MakerFaire全体としてもブース数はやはり減っていて、一頃のブームも一段落といった感じをうけます。ただ、そんななかでも出展常連のようなブースでは新しい作品がでていたり、域外からの出展があったりと変遷が感じられるのが楽しいですね。

来年もNT台北(MakerFaire台北・ニコニコ技術部ブース出展)は行う予定です。海外旅行に不慣れな人向けにホテルシェア企画もやりますので、興味のある人はニコ技Wikiをチェック!
NT台北2019
ニコニコ技術部 まとめWiki



‥‥あ!
1日目の夜に新規情報産業研究所の会合的なところに招かれて出てきた蟹おこわがめっちゃ美味かったです。
DSC_2271.JPG

来年の打ち上げはここでやりたいと決意してますので美味しいもの食べたい人も是非。

1/fゆらぎをHDLにしてみた [FPGA]

前回、間欠カオス法を整数化したので最低限度の18bit精度ででHDLしてみた(というか、正確にはHDL化を前提に必要ビット数を見積もっていたのだけども)。

それで結論から先に言うと、どうやら18bit精度だと特定の値で繰り返しパターンに入ってしまうようだ。
これが実際にHDL実装したもののSignalTapで観測した様子。
D8Q--eaUEAE7KDD-orig.png

綺麗に繰り返しパターンにはまってしまっててどうしたものかと考えていたところ、そもそもカオス系なんだから、フィードバックにちょっとだけノイズを混ぜてやれば安定系から崩れるのでは?と思い、2乗の値を加算する部分でLSBの1ビットだけランダムにひっくり返す処理を追加してみた。
と、こう書くとややこしい処理をいれたなと思われそうだけども、やってることはXorshit32の適当なビット(今回はMSBを使った)でフィードバックのLSBにXORをかけただけ。
結果はこう。
D8RDTVYUYAEEGt1-orig.png

綺麗にカオス挙動に戻った。
ついでなので、乗算器を使ってないタイミングでランダム値の2乗計算を行って、rand値、rand^2値、1/f値を同時に取得できるように修正。
D8RM79VVUAA7Xzm-orig.png

これで実装ロジック数は120LE+2DSPとかなりコンパクトになっている。

PWMでLEDをチカチカさせるとこんな感じ


1/fゆらぎの続き

前回書いた1/fゆらぎのコードを使ってハードウェア化しようと整数化をしていたところ、この間欠カオス法に面白い特徴があることが分かった。

まず、真っ当に単精度浮動小数で実装した間欠カオス法で、1024個の値を生成してパワースペクトルを調べたのがこちら。
fluctuator_float.png
FFTの窓関数を適用していないので、512以上の部分はイメージが出てスペクトルが強くなってたり、前回紹介した端っこの処理方法を変えているので低周波側でスペクトルが頭打ちになってたりしてるが、ざっくり1/fになっている。

これをそのまま24bit固定小数で実装しなおしたものがこちら。
fluctuator_int24.png
floatの仮数部は24bit分なので、0.0~1.0区間では24bit固定小数と同じ精度になる。当然、ここではほとんど同じパターンになる(カオス法なので細かい違いは出る)。

次に16bit固定小数にしたものがこちら。
fluctuator_int16.png
1/fのパワースペクトルにならず、1/fっぽいグランドノイズと特定の周波数で強いピークの2つに分かれている。

さらに8bit固定小数にする。
fluctuator_int8.png
ピークそのもののスペクトルは1/fっぽく並んでいるものの、特定の周波数(ここでは49の倍数になっている)のみの成分だけになり、ほぼ周期性のあるパターンになってしまっている。
こういうパターンでたとえばロウソクの炎の模擬をすると、安いキャンドルICのような周期的な点滅が目立つ挙動になってしまう。

そこで、どれぐらいの精度があれば1/fゆらぎが得られるかを調べたところ、18bit固定小数でピークが目立たないパターンになった。
fluctuator_int18.png
18bit長はハードウェア実装する場合に18bit×18bitの乗算器1個でカバーできるため都合が良い。実際これがギリギリ下限の精度だろう。MCUでソフト実装する場合は18bitに削るメリットは無いので、24bit固定小数を使う方がいいだろう。

●結論
間欠カオス法には18bit以上の演算精度が必要である。


おまけ。
MCU向けに擬似ランダムをXorshift32に置き換えた、24bit固定小数間欠カオス法のソースコード
#include <stdint.h>

uint32_t xorshift32(void)
{
  static uint32_t x = 2463534242;

  x ^= (x << 13);
  x ^= (x >> 17);
  x ^= (x << 15);
  return x;
}

uint32_t pow_u24(uint32_t a, int s)
{
  uint64_t m, ans;

  m = a & 0xffffff;
  ans = (m * m) >> s;
  return (uint32_t)ans;
}

uint32_t fluctuator(void)
{
  static uint32_t f = 0;

  if ((f & 0xf00000) == 0 || (f & 0xf00000) == 0xf00000) {
    f = (xorshift32() & 0x7fffff) + 0x400000;
  } else {
    if (f & (1UL<<23)) {
      f = (f - pow_u24((1UL<<24) - f, 23)) & 0xffffff;
    } else {
      f = (f + pow_u24(f, 23)) & 0xffffff;
    }
  }
  return f;
}

前の5件 | -