verilog実習!

VHDLの本は買ってるけどverliogの本はないのでネットで講座を探してiverilogでビルドして実習中です

http://monoist.atmarkit.co.jp/fembedded/articles/eledrill3/3term/05/eledrill3_05.html#drill03_05
この高校の先生が書いてる連載は「高校生向けらしく」わかりやすいです(^^;

iverilogの書き方の雛形として

module オブジェクト(引数);
endmodule

module シミュレーター;

オブジェクト a(引数); 定義済みのオブジェクトを実体化(インスタンス)する

endmodule

と書くようです。まずオブジェクトを定義して、
そのオブジェクトを宣言して実体化し、引数を使って呼ぶわけです。
verilogのシミュレーションは、通常のプログラム開発の上では、
自動テストの類か?と考えていたのですが、
「関数を定義」した後の「関数を呼び出す」処理が、実は「関数のシミュレーション」だったということです。
これは目から鱗でした。
そして、通常のプログラム開発では、このシミュレーションのバグと戦っているのです。
ですから、自動テストというのは、シミュレーションのシミュレーションになるのでしょう
(昨日職場でC#でブラウザを作って、webサービスの自動テストもどきをやっていたので思いました)


といったんは書いたけど、やはりverilogのシミュレーションは自動テストだな。
webサービス開発なんかは、プログラマが自動運転マクロもあわせて作るべきだと思うよ
そしたらテスト工程が自動化されるし。
どうせテスト項目書を書くじゃない? 紙だからその後の工程が自動化できないんだよね
ブラウザを使った自動テストのプロジェクトもあるようなんだけど、
そのへんが進むと、ソフトウェア業界もハードウェア業界に近づくかも?


(どうやってやるかと言うと、C#の場合、IEコンポーネントでブラウザを作って、
getElementByIdを使ってDOM要素をターゲットして、InnerText書き代えとか、
InvokeMember('click')とかでボタンを押して、画面遷移を進めるオートパイロットを書くのです。
 問題は、verilogの場合は、時間指定をすればクロック同期的に状態が保障されているけど、
 WEBサービスでは、通信トラフィックやサーバー負荷により時間が完全に読めないので、
 ajaxで画面が生成されるまでの同期をとる処理が必要になってくる)


むしろこう書くと解りやすい

class オブジェクト(clk,reset,led_out){
}

class シミュレーター {
 オブジェクト a(clk,reset,led_out); 定義済みのオブジェクトを実体化(インスタンス)する
}


しかし、ネット上であがってるverilogのサンプルって「カウンター、LED表示」とかそんなのばっかり(^^;