aster_ismの工作室

FPGAとかマイコンとか

ARTY S7ゲット

リコンフィギュアブルシステム研究会に参加したところ、懇親会でDigilentのSpartan7ボード ARTY S7をじゃんけんでゲットしました。Digilentさん、Avnetさんありがとうございました。 頂いたのに、何もしないのは流石に失礼なので、簡単にLチカした記事書いておきます。 なお、懇親会でお酒をたくさん飲みましたので間違いがあるかもしれませんが、多めに見てください。

f:id:aster_ism:20170925205712j:plain

続きを読む

UARTを用いたZYNQとのファイル転送

会社で使用しているZYNQボード、使える通信手段がJTAGとUARTのみという悲しいもの。せめて、ethernetが使えれば簡単にファイル転送ができるのに……

ということで、UARTを使ってZYNQとデータのやり取りする方法について調べた覚書き。 なお、結論からいうと、Petalinux に入っている lrzsz を用いる。

続きを読む

夫婦で楽しむプリキュア

この記事はプリキュアアドベントカレンダー2016の18日目の記事です。

@aster_ism です。皆さんプリキュア楽しんでいますでしょうか?
本日は夫婦で楽しむプリキュアについて書きたいと思います。

元々、妻は接客業を行っている関係で、小さい子供を相手に話をすることもあり、プリキュアのTVも映画も観ていたとのこと。
私自身も日曜朝のTLを荒らしているように、普段からプリキュアがんばれ〜と応援していることもあり、毎週日曜日の朝は2人でプリキュアを観ています。


楽しみ方1:一緒にアニメを観て実況する
私「モフルンかわいい」妻「甘い匂いがするモフ〜」
私「バッティさん、これプリキュアの線じゃない…」
妻「ショタ校長!!」

楽しみ方2:変身について語る
私「マジカルの太ももモフモフしたい、ルピースタイルのガーターベルトがよい!」
妻「プリンセスプリキュアのオーバースカートがバサァっと広がって髪の毛がファーっとなってプリンセスっぽい!」

楽しみ方3:各種アイテムなどについて語る
私「プリンセスパフュームは3つのスイッチで上手く組合せを認識してるね」
妻「プレシャスブレスはもう少し可愛くできなかったのかな」

楽しみ方4:劇場版を見に行く
私「モフルンかわいいかった、よかった(泣」
妻「くま!あべのべあ!あああくまたーーーー(泣泣泣泣泣泣泣」

なお嫁は一緒にモフルンライトを振りたかったようですが、年齢的にも貰えず、購入しようにも売切れで、一緒に応援できなかったため、「これほど大人であることが残念に思ったことがないプリキュア映画」と言いながら泣いていました。オーバーリアクションな妻はーちゃんっぽい。時々妙に強い。(ギャップが魅力)
あと、家にシュタイフのぬいぐるみがたくさん居るのですが、魔法使いプリキュアを観てから妻はモフルンみたいにリリーが動いてほしい!としょっちゅう言ってるので、ぬいぐるみを動かす技術でも考えてもいいかもしれないと思う今日この頃。

ということで、夫婦でも楽しめるプリキュアは素晴らしいアニメだと思います。
そろそろ魔法使いプリキュアも終盤ですが、最後まで気になる展開になりそうです。



最後にごめんなさい。
例年ですと、FPGAを使ったキュアパインを○○を作っているので、今年も作ろうと計画はしていたのですが、時間がとれず、WiFiルータが逝ってしまい、進捗ダメですとなりました。
とは言っても、せっかく登録したプリキュアアドベントカレンダーを書かないわけにはいかないので、急遽ネタを変更した次第です。
当初の計画していた「FPGAを使ったキュアパインリアルタイム検出器」は、来年のアドベントカレンダかプリキュアハッカソンで頑張りたいと思います。

妻いつもありがとう

この記事は【その2】妻・夫を愛してるITエンジニア Advent Calendar 2016の4日目です。
付き合って約3年、結婚して約3ヶ月、皆さんみたいに妻との惚気話をまとめてみます。

妻とはTwitterで知り合ったので、実際に直接会ったのは3年程前に私が神戸マラソンのため関西に行ったときでした。
今でも覚えてますけど、見ての通りIT系のエンジニアのおっさん共が圧倒的にフォロワーとして多いので、会うまでおっさんだと思っていたんですよね(ちゃんと妻のツイート見ればわかるんですけど)
ということで、大阪駅の桜橋口改札で、名古屋土産のういろうを振って待っていたという恥ずかしい思い出も。

その後2年ほど付き合って、私の転勤が決まり、一緒についてきてくれるということで、数ヶ月前に入籍して東京で暮らしてます。
転勤が決まってから色々と仕事とか大変だった私を支えてくれてありがとう。

東京に来て、今は妻が仕事を始めるまでの間は専業で主婦をしてくれているのですごく助かってます。
朝ご飯、お弁当、夜ご飯と料理はもちろん、洗濯、掃除もすべて妻が担当している。
ここ15年ぐらいずっと一人暮らしだったので、家に帰れば温かいご飯が待っているというのも、毎日お弁当を食べるのも今までに無いぐらい楽しいひとときになっています。
来年に入ったら @smogami さんみたいに、それぞれ仕事の時間とかもバラバラになるので、私も料理や洗濯を手伝わないとと思っています。
毎日、朝早くから美味しいご飯の準備してくれてありがとう。

ここ数日は妻が出稼ぎ前職の引継ぎの関係で実家に帰っていて、東京では私ひとりです。
と言っても、お弁当のためにたくさんおかずを作り置きしてくれていて、メモがたくさん。
妻が帰ってくるまでお弁当のおかずは困ってないですね。
( ゚д゚)<たんぱくしつ最高!
ブラックペッパーがうまい!>(・ω・)


趣味とか基本バラバラですけど、私が勉強会に参加したり、FPGAをいじったりにも理解してくれてありがとう。
お互い休みの日はデートして、甘いものを食べるのが楽しみです。
2人ともお菓子とかケーキとか甘いものが好きなので、東京来てからはピエールエルメやサダハルアオキのサロンで楽しんでます。
妻の職業柄、私の知らないおいしいお菓子をたくさん知っているので、次どこにいくのか楽しみですね。
たまに美味しいものを目の前にすると、興奮しすぎて暴走気味になるところもかわいいところです。


特にまとまってはいないですが、妻いつもありがとう。

FPGAで動画にキュアパインを重ねる

これはプリキュアAdvent Calender 2015の19日目の記事です。

フレッシュプリキュアのブルーレイボックスを楽しみにしながらキュアパインと戯れる日々を過ごしているaster_ismです。
はやく、ぶっきーに会いたいです。

さて、昨年のプリキュアAdvent CalenderでもFPGAを使ってよくわからないFPGAでプリキュアの名前をランダムに表示する - 雨のち曇り時々晴れ@aster_ismを作りましが、やっぱり文字だけじゃなくて可愛いキュアパインが表示される方がいい!
ということで、今年はXilinxのVideo IPを流れている映像にプリキュアを合成する専用回路IPをつくることにしました。
簡単にいうと応援アプリみたいな映像が作れるの専用回路です。
注意)FPGAなのでソフトウェアではありません。ハードウェアです。

まず、XilinxのVideo IPは基本的にAXI4-Streamというプロトコルで転送されています。基本的な動作波形は下のようになっています。

tvalidとtreadyが共にHighの時にデータが有効で、フレームの開始1ピクセル目ではtuserがHighとなり、各ラインの最終ピクセルtlastがHighとなります。とても簡単なプロトコルですね。
つまり、

  • tuserとtvalidとtreadyがHighの時に水平方向カウンタと垂直方向カウンタをリセット
  • tvalidとtreadyがHighの時に水平方向カウンタをインクリメント
  • tlastとtvalidとtreadyがHighの時に水平方向カウンタをリセットして、垂直方向カウンタをインクリメント

という制御を行えば、映像のピクセル位置とその画素が取得できます。

あとはそれぞれのカウンタの値がキュアパイン画像の表示領域である場合にキュアパイン画像のピクセルデータに置き換えをします。
ただ、そのまま画像を置き換えると単純に矩形領域となるので、キュアパイン画像の背景部分も表示されてしまいます。なので、キュアパインの画像データに透過ピクセル(透明)であるとの情報1ビットを付加します。実際のデータは画像生成が楽なのでキリがよい値にしてRGB各4bitと透過ピクセル情報1bitに更に予約領域3bit付加して16bitで1ピクセルの情報とします。
なお、RGB各色が4bitなのは、BASYS3のVGAが4bitな為です。

さて、ディスプレイ出力をVGA(640x480)としたので、キュアパイン画像のデータをとりあえず150x300で作成します。よってピクセル数は45000になります。今回は面倒くさいので、FPGA内部のBlock RAMに画像データをすべて入れます。BASYS3のFPGAはArtix-7なので、この画像だけでBlock RAMを約半分消費してしまいます。他のメンバも表示できるようにするにはFlashか外部メモリに入れてロードする必要がありますが、今回はキュアパインだけ表示できればいいので良しとします。

あとは、カウンタの値を見ながらBlock RAMのデータを順番に読み出しながら、透過ピクセルでなければ来たデータを上書きします。
ただし、Block RAMからの読み出しに1cycle時間が掛かるので、届いたデータを数段バッファリングして上書きするピクセル位置を調整しています(詳しくはソースコード参照)。


これをシミュレーションすると次のような波形が得られます。上の信号が元の画像ピクセルデータ、下の信号がプリキュア合成IPを通った後のデータ。overlay信号がHighはそのピクセルが置き換え対象であることを示しています。途中のデータがキュアパイン?(かどうかはわからないけど別の値)に置き換わっているのが確認できます。透過ビットがあるため必ずしもoverlayがHighでも値が変わってないのがわかります。


作ったaxi4s_precureをIPパッケージとして、Vivado上のブロックデザインでインスタンス化します。他の映像出力に必要な回路と合わせて、最終的にこのような回路となりました。
基本構成は、過去に行ったBASYS3でディスプレイ出力 - aster_ismの工作室キュアパイン合成回路を挟んだだけです。

さて、実際に動かした結果ですがカラーバー映像にキュアパイン正しくが合成されて出力されているのが確認できます。
RGB各4ビットなので若干色が微妙ですが、許容できる範囲です。
また、途中説明をしませんでしが、回路への入力(xpos,ypos)を変えることでリアルタイムに位置を変更することもできます。
(xpos,ypos)は4bitで1増加するとxposは40px、yposは30px移動するようにして、dipスイッチに繋いでいます。
2枚目のイメージはスイッチを動かしてキュアパインを右下に少しずらした。


本当は、応援アプリみたいにカメラからの画像にリアルタイムに重畳しようとおもったけど、カメラ映像取り込み回路を作るのが面倒だったので映像はXilinxのテストパターンジェネレータのカラーバーとなってしまいました。
一応、axi4s_precureにつながっているBRAMをデュアルポートにして、FlashとかSDカードからデータを読み込むようにすると、全プリキュアを表示するようにもできるかと思います。
時間があれば改良して全プリキュア選択+カメラ映像の取り込みでオレオレ応援アプリ的な合成回路を作りたいと思います。


(TODO:ソースコードはバグ修正後githubにあげる)

Vivadoを使ったFlashメモリへの書き込み

開発環境はVivadoにほぼ移行したのに,未だにFlashへの書き込みはiMPACT(LabToolだけインストール)を使っているのが嫌になったので,すべてVivado上から行うための方法について調べた(覚え書).

参考としたのは,UG908 Vivado Design Suite ユーザーガイド プログラムおよびデバッグ *1

続きを読む

Vivado SimulatorによるDPI-Cシミュレーション

UG900 Vivado Logic Simulation*1 のAppendix E: Direct Programming Interface (DPI) in Vivado Simulatorを参考にC言語で書いたCSVファイルの読込み関数をAXI4 Lite のマスタIPで呼び出して,このCSVに従ってマスタが動作するようにします.

続きを読む