aster_ismの工作室

FPGAとかマイコンとか

Xilinx Vivadoで上手にバージョン管理する方法

以前よりVivadoプロジェクトをバージョン管理したいと考えていた訳ですが、なかなか自分の開発フローに馴染まず諦めていました。

こんな感じで、バージョン管理をしたいというのはみんな思っているみたいなので、真面目に取りかかることに。

続きを読む

FPGAでプリキュアの名前をランダムに表示する

これはプリキュア Advent Calendar 2014の10日目の記事です。

登録はしたが、ネタに困ったので最近買ったFPGAボードを使ってランダムにプリキュアの名前を表示する回路を作ることにしました。

FPGADigilentのBasys3(XilinxのArtix-7が入った評価ボード)を用います。
とは言っても、表示系にVGAを用いるのは時間を考えると辛いので、7セグに表示することにしました。
7セグなので当然認識しにくい文字もありますが、その辺は割り切ることにします。
#大好きなキュアパインが識別できるならよい

まずは、仕様の確認です。
Basys3のマニュアル(pdf)を読むとアノードコモンの7セグが4つ付いていて、カソード側は4つの7セグで共通とのこと。

制御のタイミングもかかれているので、これを参考に入力を作ります。

Basys3のクロックは100MHzなので適当に分周して各アノードのトランジスタをONにする250usぐらいの信号を作ります。
1clk=1nsなので2^18カウントすると約262us。
このクロックでアノードを制御します。

さらに、4文字分しか表示できないのでスクロールする必要があるので、
分周したクロックを2^8カウントします。
このあたりは適当にチラつきとか動きが早すぎないか?遅すぎないか?と見ながら適当に調整します。

あとは、プリキュアの名前を7セグで表示するように変換します。

カソード側をON・OFFして文字を作るのでスイッチをONしたところが消灯して、OFFしたところ点灯します。
アルファベットはwikipediaの7セグをパターンを使うことにします。
1文字を{DP, CG, CF, CE, CD, CC, CB, CA}の順番に並べると
たとえば、"CURE PINE"であれば"11000110_11100011_10101111_10000110_11111111_10001100_11111011_10101011_10000110"となります。
あとは表示したいキャラ分これを作ってIDに対して名前を出力する回路を作ればOKです。
#実際にはキャラクタ名は16文字分として確保して、余った部分は消灯で埋めています。
スクロールの実装はこのデータを8bit(1文字)ずつ循環させれば簡単にできます。

さて、全員分の名前が表示されるようになったら、ランダムに選択する部分を実装します。
回路でランダムっぽいのを実現するにはLFSRをつかうのが簡単です。
プリキュアTVシリーズのメンバであれば63通りあれば充分なので、6bitのLFSRを計算し、ボタンを押した時の値をIDとして使います。

ということで、ボタンを押すとプリキュアの名前がランダムに表示される回路ができあがりました。

以上、プリキュアの名前をランダムに表示する回路でした。

https://github.com/a5teri5m/precure_7seg

進捗ダメです・・・

この記事は 進捗Advent Calendar 2013 - connpass の4日目です.

皆さんきちんと進捗してますね
私は全然進捗してません

仕事 ・・・ 進捗ダメです

今日も室長に12/31まで来る?と聞かれました.絶対に出社しませんけど.

勉強 ・・・ 進捗ダメです

そういえば,今年は何かアドベントカレンダー駆動開発しようかと思い, Clojure Advent Calendar 2013 - Qiita に申し込んだ訳ですが,未だにleiningenを会社のPCに入れてreplで遊んだだけです.ネタどうしよう…

お金 ・・・ 進捗ダメです

今年もたくさん旅行に行ったので,スッカラカンです.

彼女 ・・・ 進捗ダメです

今年も悲しいクリスマスになりそうなので,Xmathon in Tokyo - connpassに参加しようかしら.

まとめ

進捗ダメです

明日は [twitter:@osa_k] さんです.進捗どうですか?

Raspberry Piで手のひらScala実行環境

LL/ML Advent Calendarの7日目の記事です.
タイトルは @aster_ismRaspberry Piで手のひらScala実行環境」です.
ちゃんとMとLが入っていますね!

タイトルは決めかねていたのですが,先週ぐらいに,Raspberry Piが届いたので,タバコサイズのscala実行環境を作ってみることにしました.

そもそもRaspberry Piが何か知らない方に簡単に説明すると下の図のようなARMマイコン基板です.

メインとなるSystem-on-ChipはBroadcom BCM2835でCPU,GPU,DSPなどが1チップになっています.
基板上には電源供給用のMicroUSB,SDCardのスロット,USBx2,HDMI,コンポジット,Ether,サウンド,GPIO端子が付いています.
お値段も4000円しないですし,ちょっとしたARMマイコンを使った工作には丁度いいおもちゃです.


さて,まずはOSのインストールですが,Raspberry Piの場合はddコマンドでOSのファイル構成をそのまま書き込むのが一般的です.

公式サイトには,Debian系のRaspbianとかのイメージが公開されています.
最近は雑誌とかでも取り上げられているので,このあたりの情報はたくさん出てくるはずです.
あまりDebianは好きでは無いですが,諸事情により選択.
初期設定を終わらせるとログインを求められます.
user: pi
password: raspberry
でログインしましょう.

あとは普通のDebianと同じです.
aptitudeが使えますので,

sudo aptitude install scala

すれば,簡単にインストールできます.
と言いたいところですが,一部のパッケージがレポジトリに無いようで怒られます.
とりあえず,見つからないのはicedtea-netx_1.3.2_armhf.debだけですので,適当に探してきて.dpkgしました.

ということで,無事Scalaのインストールできたので対話環境を立ち上げます.
ちゃんと,評価されてますよね!

Cygwinを使ってSSHRaspberry Piにログインして実行しています)

ということで,手のひらScala実行環境が構築できました.
コンポジットがあるので,旅先でTVに繋いでキーボードさえあればScalaを使える!
すばらしい!
今日のなごやかScalaでも,これを持って行けばWindows上でも簡単にScalaが使える!
ということで,マイコンに興味がある人も無い人もチャレンジしてみてはどうでしょうか?

ちなみに上の1+1を評価するのに1分ぐらい掛かるのは,仕方がないと諦めましょう.所詮はマイコンです.




追記:本当はARM用openSUSEを使ってSML#の実行環境を作ろうとしたけど,ARM上でSML#コンパイルができないので諦めました.