June 01, 2011VHDLでwhenを大量に書きたくないCPLDを最近いじっていますが、設計をVHDLで行っています。そんなことで表題の問題に遭遇しました。なお普段は手続き型のプログラミング言語に比べると、同時実行が前提のHDLを書くのは凄まじく苦手なので、この記事に対して『これは違うんじゃない?』『こう書いたほうがいい』などありましたら是非ツッコミをいれてください。 言葉で説明するよりもコードを掲載したほうが明確だと思いますので、さっそくコードを。 要約としては、4つの候補(candidates)から、優先度付指示(selects)に従って、1つの出力(result)を選んでくる、どれも指示がない場合はハイインピーダンスにする、というセレクタです。問題としては、この指示が4つ以上の大量になった場合です。whenを大量に書くのもつらいので、その記述方法を探ってみました。なお以下では、指示の数を変えられるような汎用的な記述にしてあります。 はじめに思いついたのが以下のコードですが、どうも様子が変です。 それぞれにHi-Z付ドライバ持たせて出力を単純につなぎ合わせる、バスなどでおなじみの手法です。しかしながらselectsが複数'1'になると出力がconflictするので、機能的には等価でありません。 おそらく正解はこちら。 process文の中でforループをまわすことにより、記事の冒頭にあたったwhenベタ書きで見られるような優先度も加味しています。RTLビューワで比較してみたところ、冒頭のコードと同様のものが得られています。 June 08, 2011Super Sylphide 進捗状況(41) -- Tiny FeatherのCPLDの中身無人航空機(UAV)用のオートパイロットシステムSuper Sylphideの小型改良版Tiny Featherですが、処理を一手に引き受けているDSPを補助したり、機能を拡張するためにAltera MAXII CPLDを搭載しています。ようやくその中身がまともな状態になってきたので、中身を公開しようと思います。 最上位階層をRTLビューワで見ると、とても綺麗です。 機能は以下に列挙するとおりです。
かなり詰め込みました。最大1270LEのうち、1016LE(80%)を使いました。また特にチューニングすることなく、fmaxは74MHzが出ており、満足しています。そのうち、個別のモジュールについても記事を書きたいと思います。 ※その後、Super Sylphideに関連した成果をまとめてみました。 ※※ 2011/9/30追記: 随時最新情報に更新します。現在1154LE、91%です。UFMを加えました。 June 15, 2011Windows 7 / Office 2010 になってやったこと
[Computer]
仕事用PCが新しくなった関係で、ユーザインタフェイスの変更というM$の暴挙に打ちひしがれています。少しでもWindows 7 / Office 2010を以前のWindows XP / Office 2000に近づけようと努力した過程(未解決含む)を自分用メモとして残しておこうと思います。 まずはWindows 7について。
続いてOffice 2010について。
気に入らない点がある度に随時追加していこうと思います。 June 22, 2011バス接続な同期応答信号をVHDLで表現なかなか良いタイトルが思いつかなかったので苦肉の策として、とりあえずキーワードを並べてみました。何が言いたいのかもう少しまともな文章で表現すると、FPGAやCPLDの内部でさまざまなモジュールをバス接続、つまり同じ信号上に複数のモジュールをぶら下げることがあるのですが、そのモジュールからの応答をうまく受け取るにはどうしたらいいか、という話です。ごくごく当たり前のことであったのですが、ようやく考えた末に導かれた結論なので、僕自身の備忘録あらため戒めとして、記事として残しておこうと思います。 状況を図にすると、以下のような接続図になります。 CSは同時に1つの特定のモジュール(以下、スレーブNといいます)をマスタが起動要求する信号で、クロックに同期します。またDONEは全てのスレーブ(0,1,...)がバス接続されており、CSで指定されたスレーブの処理(ここではスレーブN)が終わったらLからHにクロックに同期して遷移することが望まれています。さらには、どのスレーブもCSで選択されていないときはDONEはLであることが望まれています。 この仕様をタイミングチャートで書くと、以下のようになります。 バス接続ということでDONEは誰が責任をもって出力すればいいか、ということが重要になります。CSでスレーブNが特定されているうちは、もちろんスレーブNの責任です(タイミングチャート下から2段目)。コードで書くと以下のようになります。 ではスレーブNがない間は、誰がDONEの面倒を見てLを出力するのか、というところで悩んでしまいました。結局のところ、バスの定義があるレベルで、その機能を持てばいいと思います(タイミングチャート1番下)。コードで書くと、以下のようになります。 単純なのですが、これはバス接続の終端を行っていることに他なりません。これを忘れると、スレーブNがない場合のDONEは、合成ツールが勝手に決めてしまうので気持ちが悪い、という事態が発生します。終端を忘れないように記録に残しておくことにしました。 June 30, 2011さよなら液晶工房電子工作な人としては是非とも押さえておきたいお店である液晶工房が、先週末にて閉店となってしまいました。引き続きwebショップのaitendoから商品を買うことは出来るのですが、直に触れて楽しめる店舗がなくなってしまったのは、とても残念です。ちょっと時間がたってしまいましたが、その閉店セールの戦利品を載せておこうと思います。 上段にごろごろあるのは焦電型赤外線センサーです。下段は左から順に超音波距離測定モジュール、USB-RS422/485変換器、SDカードスロット、同軸ケーブルです。急いで使う予定が特にあるわけではないのですが、どれも手ごろな価格だったのでついつい買ってしまいました。 |
かれんだ~
スポンサード リンク
|