kitune-sanの日記: 8255をVerilogで書いてみた 6
日記 by
kitune-san
恥ずかしいけど上げちゃう。
https://github.com/kitune-san/KF8255
FPGAの勉強の題材として手元にある8255を書いてみることにした。
所詮I/Oだろwと思ってたらMODE1-2が難しい…。
最初はMODE0のみ実装で終わらせようかと思ったけれども、これはこれで物足りなさを感じる。
オリジナルはWE信号等のエッジでデータが書き込まれたりするけれども、
タイミング解析で難しくなりそうだったので、クロック同期(8088と同じ立ち下がりエッジ)の動作にした。
書いたコードを見直してみると全体的にかなり汚く見える…^^;
でもHDLコード美的感覚もよくわからない。。。
言語機能をもっと駆使すると再利用性のあるきれいな回路がかけるのだろうか。
ポートCの回路はもうちょっと見直しをしていきたい。
シュミレーションは(一応)思った通りの波形が出せたので、もうちょっと確認・修正して、
今度はFPGAにコンフィギュレーションして動作を見ていこうと思う。
System Verilog (スコア:1)
VerilogじゃなくてSystem Verilog……
インスタンス接続が.*で省略できるのはVerilog 2000からで、System Verilogは
だめなんだっけ? もう忘れた。
タイミング解析関係で言うと、リセット解除は同期にすると思うが
FPGAってどうなんかね。デバイスによるのかな。
しかしコードの美的感覚なんていうロジック屋は、おれのまわりに限ると
見たことないね。そういう点ではハード屋(ファーム屋も!)はだめだと思ったよ。
言語仕様書を読んでるやつもいなかったもん。
そのかわりSTARCルールに基づいて書きましょうとか、それのルールチェッカ
みたいのをかけてたね。
Re:System Verilog (スコア:1)
興味深いお話ありがとうございます。
ルールチェッカは興味ありますので調べて見ようと思います。
あららSystemが抜けてましたね。
wireやregをlogicにまとめられると聞いてそれだけでこちらにしてしましましたが、
always_combや_ffがicarus verilogではエラーを出してしまい、後で後悔しました。
リセットについては自分も調べましたが、
一番最善は同期リセット・解除。どうしても非同期でリセットしたい場合はリセット発生のみ非同期。のようにしていくのが良さそうです。
Re: (スコア:0)
リセットについてはリセットの最小時間要件とクロックの関係で決まることもあります。
自分で決めてよければ同期リセットのほうが考えなくて楽かなあ?
昔は非同期リセットが推奨されてたような気がするけど最近のFPGAは同期リセット推奨だし。
で、古い人と新しい人の共同作業だとリセットがバラバラになるまでがお約束:)
特にASIC経験者は非同期リセット派が多いし…
# 古いコードはえいやっで一から書き換える派。ただしテストベンチがマトモであることが前提。
Re: (スコア:0)
ハード屋さん・ロジック屋さんは記述うんぬんより
「波形が正しければ正しい」で動いている印象。
Re: (スコア:0)
そして内部PLLの上限を超えた設定でも気づかなかったりすると :)
# シュレーディンガーの内部PLL
Re:System Verilog (スコア:1)
> シュレーディンガーの内部PLL
なにそれ怖い。
仕事でロジック設計している人たちってド・モルガンやらカルノー図やらを駆使してガチガチに設計していくんだと勝手に思っていたのですが、
少しイメージと違う?失敗が高くつくASICの設計とやり直ししやすいFPGAの設計の違いなのかな?