フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2006-6-3 14:26 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
VHDLでもはまる 基本的にVHDLもVerilog HDLから機械的に書き換えられそうなのでやってみた。
はまった。 基本的な構文は対応するものがあるものの、記述様式がかなり違うので、結局全部手入力で翻訳して打ち込んでいかなければならなかった。巷にはVHDL->Verilog HDL変換ツールがあるらしい。本職の人が使っていたのを昔見た覚えがある。しかし勉強のためには自分でやるしかない。 入力し直していると、年の替わりで上位桁が9以外の場合の桁上がりのロジックがすっかり抜けていることに気づく。9999から0000になるのは確認したが、0009から0010になるのはやってなかった。同様に0099から0100と0999から1000も。 最初に入力信号のひとつSELECTを宣言したところがエラーになる。なぜだか分からなかったが、もしかしてSELECTはVHDLのキーワードなのか?と思ったらピンポンだった。Sに名前を変えた。 デコードロジックの部分はVerilog HDLの時と同様に関数として記述した。ここでも文法を読み落として、RETURN文を書くのをすっかり忘れていた。どう書いても戻り値がすべての組み合わせをカバーしていないと怒られる。それも実際に関数を参照しないとこのエラーが出ない。他の関数はまだ参照する代入文を書いてなかったので使用されず検出されなかった。そちらではエラーが出ないのでなぜこれだけ?と悩んでしまった。良く見たら関数は戻り値をRETURN文で明示的に返さないといけない。 信号名をSELECTからSに変更したのでピンアサインをimportしたがそこだけ警告が出る。Assignment Editorを使うとピン番号はそのままで信号名だけ変更することができる。それでなおした。 でコンパイルは通りさっそくダウンロードしてみると、秒の表示が出ない。分のところがまるで秒の表示のように変化している。 シミュレーションをやってみると、確かに秒の表示がブランクになっている。そもそもデコードすらされていない。 これもだいぶ分からなかったが、7segmentコードがデコードされていないあたりを探ってみると、あった。全部手で入れ直したので分のデコードがすっぽ抜けて分の桁に秒がデコードされていた。秒のところは何も無い。 そこんところをなおしたら表示はまともになった。あとは年替わりで抜けていたロジックを追加して、動作を確認して終了。 よく考えたらVerilog HDLもVHDLも順序回路の記述では代入しなければ前回値が保持されるので、AHDLの様にわざわざ変化しない信号について代入はいらないことが判明。といっても不要な代入文を削っても使用されるLE数は変わらない。あたりまえか。 ということで慣れればVerilog HDLやVHDLは順序回路はAHDLより少ない行ですっきり記述できることが判明。 さて年替わりのバグがあったのでまた他も直して更新しないと。 |
フラット表示 | 前のトピック | 次のトピック |
投稿するにはまず登録を | |