【1-1】とりあえずやってみよう


とりあえず開発環境の準備は終わりましたか?習うより慣れろです!
とりあえずだまされたと思って下記のコードを入力してみてください
module circuit_1( // モジュール宣言
    // ポート宣言
    sw1, // スイッチ1
    sw2, // スイッチ2
    led  // LED
);
    input sw1, sw2; // 入力宣言
    output led;     // 出力宣言
    
    assign led = sw1 & sw2; // 両方のスイッチがオンの時LEDが点灯
    
endmodule // モジュールの終り
モジュールとかポートとか何かわかんないお
やれやれ…、しょうがないなぁ。
例えばこんな回路があるとするだろ。

左はCPUとかの回路、右は…そうだな、何かの信号処理の回路と
思ってくれたらいい。

でも回路を外側からみると、 回路とその入出力信号で構成されているのは共通だな。
モジュールってのは回路そのもののことで、
ポートってのは回路の入出力のことだ。
だから、さっきの回路は

こう考えればいいんだな。

module circuit_1( // モジュール宣言
    // ポート宣言
    sw1, // スイッチ1
    sw2, // スイッチ2
    led  // LED
);
moduleとendmoduleは合成ツールに 『ここから回路の仕様が書かれてますよ』って伝えるんだな。
module circuit_1( sw1, sw2, led);ってのは
『これからcircuit_1というモジュールを書きますよ』
『このモジュールの入出力信号線はsw1, sw2, ledですよ』
と合成ツールに伝えてるんだよ。

モジュールとポートの宣言が終わったらいよいよ回路の中身の記述だ。
まず、回路の信号線の性質を宣言する。
input sw1, sw2; // 入力宣言
output led; // 出力宣言

ポート宣言では信号線があることだけを伝えているので、
『信号線の入出力とビット幅を合成ツールに伝える』ことが必要になる。
ここでは『sw1, sw2っては入力信号』
『ledってのは出力信号』ってことを合成ツールに伝えてる。
とにかくinputoutputの後に ポート宣言で宣言した信号を書いてやればよい。



最後に入出力信号宣言で宣言した信号を使って回路を記述する。
assign led = sw1 & sw2; // 両方のスイッチがオンの時LEDが点灯

assign文は組合せ回路を記述する時に使う。
順序回路を記述する時は別の方法があるが、それは後で説明しよう。
とにかくこの文は『sw1とsw2のANDをとってその結果をledに代入しなさい』って意味だ。


ぼんやりとわかったけど、要はルールに従ってればいいのかな?


そう、とにかくルールに従ってみればいいんです。「習うより慣れろ」ですね。
どの言語にもいえますが、まずはやってみて慣れてきてから再度言語仕様を見ると
理解度もかわるはずです。

この章のまとめ

verilogで回路を記述するにはルールに従わなければならない
module circuit_1( // モジュール宣言
    // ポート宣言
);
    // 入出力宣言
    
    // 回路を記述
    
endmodule // モジュールの終り

【1-2】様々な論理演算とその優先度へ進む