June 01, 2011

VHDLでwhenを大量に書きたくない

CPLDを最近いじっていますが、設計をVHDLで行っています。そんなことで表題の問題に遭遇しました。なお普段は手続き型のプログラミング言語に比べると、同時実行が前提のHDLを書くのは凄まじく苦手なので、この記事に対して『これは違うんじゃない?』『こう書いたほうがいい』などありましたら是非ツッコミをいれてください。

言葉で説明するよりもコードを掲載したほうが明確だと思いますので、さっそくコードを。

要約としては、4つの候補(candidates)から、優先度付指示(selects)に従って、1つの出力(result)を選んでくる、どれも指示がない場合はハイインピーダンスにする、というセレクタです。問題としては、この指示が4つ以上の大量になった場合です。whenを大量に書くのもつらいので、その記述方法を探ってみました。なお以下では、指示の数を変えられるような汎用的な記述にしてあります。

はじめに思いついたのが以下のコードですが、どうも様子が変です。

それぞれにHi-Z付ドライバ持たせて出力を単純につなぎ合わせる、バスなどでおなじみの手法です。しかしながらselectsが複数'1'になると出力がconflictするので、機能的には等価でありません。

おそらく正解はこちら。

process文の中でforループをまわすことにより、記事の冒頭にあたったwhenベタ書きで見られるような優先度も加味しています。RTLビューワで比較してみたところ、冒頭のコードと同様のものが得られています。

06:54 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/803

June 08, 2011

Super Sylphide 進捗状況(41) -- Tiny FeatherのCPLDの中身

無人航空機(UAV)用のオートパイロットシステムSuper Sylphideの小型改良版Tiny Featherですが、処理を一手に引き受けているDSPを補助したり、機能を拡張するためにAltera MAXII CPLDを搭載しています。ようやくその中身がまともな状態になってきたので、中身を公開しようと思います。

最上位階層をRTLビューワで見ると、とても綺麗です。

tf_cpld_top.png

機能は以下に列挙するとおりです。

  • 8chのラジコン受信機信号読み取り、内部レジスタに書き出し
  • 8chのスピコン、サーボ用信号を内部レジスタの値に対応して生成
  • ch8を使って自動および手動(受信機入力をそのままスルー出力)を切り替え
  • 内部レジスタを非同期メモリとしてDSPから読み書き可能(EMIFAバス利用)
  • 内部レジスタをSPIからアクセス可能
  • SPIを内部レジスタ、およびFlashROM、ADCに繫ぎ変え可能(さらにUFMも)
  • i2cマルチプレクス
  • GPS 1ppsに同期したADCへの変換開始指令生成
  • DSPを含めたシステム全体のPower on Resetを制御
  • 内部の大半は俺様仕様の同期バスで接続

かなり詰め込みました。最大1270LEのうち、1016LE(80%)を使いました。また特にチューニングすることなく、fmaxは74MHzが出ており、満足しています。そのうち、個別のモジュールについても記事を書きたいと思います。

※その後、Super Sylphideに関連した成果をまとめてみました。

※※ 2011/9/30追記: 随時最新情報に更新します。現在1154LE、91%です。UFMを加えました。

23:00 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/804

June 15, 2011

Windows 7 / Office 2010 になってやったこと

仕事用PCが新しくなった関係で、ユーザインタフェイスの変更というM$の暴挙に打ちひしがれています。少しでもWindows 7 / Office 2010を以前のWindows XP / Office 2000に近づけようと努力した過程(未解決含む)を自分用メモとして残しておこうと思います。

まずはWindows 7について。

  • スタートボタンの見栄えが気に入らないので、ClassicShellを導入して、Windows XPライクなメニューに取替え
  • タスクバーが常に前面にでてきて鬱陶しいので、DisableTaskbarOnTopをスタートアップとして導入することで無効化。Updateで入れられてしまうHotfixのKB2515325が活動を阻害するので、手動で消去。さらに自動更新でKB2515325を再びインストールされないよう、更新プログラムを非表示に。
  • システムの変更をとようとすると、いちいちパスワードを求められてきて鬱陶しいので、ポリシーを変更して対応
  • Windows7がオレオレ証明書httpsによるDAVを受け付けないので、TeamFileで代用
  • 困ったときのWindows XP mode。ただし組み込み開発用のデバッカをUSB共有で認識させようとすると仮想マシンがBSODでお亡くなりになるので、あんまり役に立っていない。
  • (未解決)コンピュータやスタートボタンの右クリックでエクスプローラを起動するメニューがでてほしい

続いてOffice 2010について。

気に入らない点がある度に随時追加していこうと思います。

20:56 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/805

June 22, 2011

バス接続な同期応答信号をVHDLで表現

なかなか良いタイトルが思いつかなかったので苦肉の策として、とりあえずキーワードを並べてみました。何が言いたいのかもう少しまともな文章で表現すると、FPGAやCPLDの内部でさまざまなモジュールをバス接続、つまり同じ信号上に複数のモジュールをぶら下げることがあるのですが、そのモジュールからの応答をうまく受け取るにはどうしたらいいか、という話です。ごくごく当たり前のことであったのですが、ようやく考えた末に導かれた結論なので、僕自身の備忘録あらため戒めとして、記事として残しておこうと思います。

状況を図にすると、以下のような接続図になります。

bus_cs_done_connection.png

CSは同時に1つの特定のモジュール(以下、スレーブNといいます)をマスタが起動要求する信号で、クロックに同期します。またDONEは全てのスレーブ(0,1,...)がバス接続されており、CSで指定されたスレーブの処理(ここではスレーブN)が終わったらLからHにクロックに同期して遷移することが望まれています。さらには、どのスレーブもCSで選択されていないときはDONEはLであることが望まれています。

この仕様をタイミングチャートで書くと、以下のようになります。

bus_cs_done_tc.png

バス接続ということでDONEは誰が責任をもって出力すればいいか、ということが重要になります。CSでスレーブNが特定されているうちは、もちろんスレーブNの責任です(タイミングチャート下から2段目)。コードで書くと以下のようになります。

ではスレーブNがない間は、誰がDONEの面倒を見てLを出力するのか、というところで悩んでしまいました。結局のところ、バスの定義があるレベルで、その機能を持てばいいと思います(タイミングチャート1番下)。コードで書くと、以下のようになります。

単純なのですが、これはバス接続の終端を行っていることに他なりません。これを忘れると、スレーブNがない場合のDONEは、合成ツールが勝手に決めてしまうので気持ちが悪い、という事態が発生します。終端を忘れないように記録に残しておくことにしました。

23:32 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/806

June 30, 2011

さよなら液晶工房

電子工作な人としては是非とも押さえておきたいお店である液晶工房が、先週末にて閉店となってしまいました。引き続きwebショップのaitendoから商品を買うことは出来るのですが、直に触れて楽しめる店舗がなくなってしまったのは、とても残念です。ちょっと時間がたってしまいましたが、その閉店セールの戦利品を載せておこうと思います。

CA340409.JPG
いろいろ買いました。

上段にごろごろあるのは焦電型赤外線センサーです。下段は左から順に超音波距離測定モジュールUSB-RS422/485変換器SDカードスロット同軸ケーブルです。急いで使う予定が特にあるわけではないのですが、どれも手ごろな価格だったのでついつい買ってしまいました。

21:45 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/807