読者です 読者をやめる 読者になる 読者になる

verilogとかquartus IIとかのちまちましたメモ

電子工作

移転しました。

シミュレーションもしたいというときには、Quartus II 13.1.0 Web Edition (1.6 GB)だけでなく、model sim altera starter edition (900 MB)のインストールが必要。MAX IIなどのCPLDの規模(2210LEとか)ならば両方共フリー版で動く。
簡単なシミュレーションなら、New -> University program VWFを選ぶとsimulation wave form editorが起動する。Edit -> Insert -> insert node or busで、input指定してあるノードorバスを指定する。overwrite clockなどでクロック信号を入れたりできる。シミュレーションにはタイミングとfunctionとあって、タイミングの方は遅延を入れてくれるよう。
細かいシミュレーションはやり方を忘れたが、シミュレーションファイルを作って、Quartusからゲートレベルシミュレーションを起動。Workフォルダからシミュレーションしたい回路を選んで、実行という流れで、こちらのほうが複雑なシミュレーションができたはず。

Verilog HDLとか論理回路で、並列した回路から同時に代入をしようとすると、値は不定にならないのだろうか、と思ってテストしたら、次のエラーが出てコンパイルできなかった。
Error (10028): Can't resolve multiple constant drivers for net "CSX" at sample.v(113)
ある変数(reg)に代入する回路を作る場合はひとつにまとめないとだめですね。複数に分けたならそれぞれの出力を拾ってand/orを取ってから代入とか。実際の回路配線を想像すると、そうしないと論理的にならないとわかるか。

always @ posedge clkでreg aに値を代入する回路と並列に、always @ posedge clkでaの値を参照する回路があった時に、参照して得られるaの値は代入前の値か、あとの値かという疑問があったのだけども、シミュレーションでは前の値が得られた。レジスタのサンプリングは少なからず遅延があるので、同種のレジスタを使っている以上それで、代入前の値が必ず入ると考えていいのだろうか、わからん。max iiはCPLDとしては最速らしいけど、遅延に関しては10 nsオーダ?であるらしいので、それでなんとかなるのか。