フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2006-5-30 20:34 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
verilog HDL版の万年カレンダー時計 ほとんど機械的な書き直しでできるかと思ったら、verilog HDLではALTERAのAHDLとかと違ってそれぞれ構文で記述できることが制約されている。
得に問題になったのは同期式でない組み合わせ論理だけでレジスタの出力からLED表示のための出力信号をデコードしている部分。 AHDLだと高級言語的にネットリストを記述するという感覚なのでどこに何を書いてもよかったが、verilogだとレジスタへの出力はalwaysとかでしか書けない。逆に信号線への出力はalwaysの中では書けなくてassignとかfunction内でしか許されていない。 これはこれで同期式の回路を書く場合には、メリハリがあって可読性が高まるのかも。こまったのは7seg LEDデコードとかコモンのイネーブル信号のデコードの置き場所。しかたなくfunctionでデコーダーを記述してassignで継続的代入を行うということで決着。へたにレジスタを置くと1クロック遅れるので変なことになる。 ついでに今まであったプリセット入力中にカウンターをリセットしていた処理は要らないのでとってしまった。これで現在時刻を表示したままプリセットボタンを押すと該当する桁だけが変更されるように。こちらが自然だ。それに絡んで秒の切り替わり時にLEDのダイナミック表示のカウンター更新が抜けているのに気づいてそれも修正。実質的には1クロック延長してしまっていただけなので直さなくても問題はないが、記述がすっきりした。 あと無くてもいいけど、プリセットボタンの入力がクロックに同期していないのでとりあえず1個レジスタを介して同期させた。設定値のロータリーコードスイッチ入力はプリセットボタンを押す前に確定していることを前提にレジスタはもうけないことに。 |
フラット表示 | 前のトピック | 次のトピック |
投稿するにはまず登録を | |