verilogを書くことになりそうなので。
CPU作るぞ〜っていうことでverilogを読むことになりそうなので、書いてみた(は?w)
使用したツール群
- icarus verilog
- gtkwave
チュートリアル
インストールは省略
/* AndNand.v */ module ANDNAND(a, b, o1, o2); input a,b; output o1,o2; and AndInstance(o1, a, b); assign o2 = ~(a&b); endmodule
o1 にand、o2 にnand。 assignとプリミティブモジュール?を使ってみたパターン。 バス幅とかは軽くみただけだからまだ何も言えないかなぁ。
/ * AndNandTb.v */ module ANDNANDTB; reg a, b; wire o1, o2; ANDNAND mod (a, b, o1, o2); initial begin $dumpfile("andnandtb.vcd"); $dumpvars(0, ANDNANDTB); $monitor("%t: a = %b, b = %b, o1 = %b, o2 = %b", $time, a, b, o1, o2); a = 0; b = 0; #10 a = 1; #10 a = 0; b = 1; #10 a = 1; #10 a = 0; b = 0; #10 $finish; end endmodule
コンパイルのコマンド
% iverilog -d AndNandTb -s ANDNANDTB AndNand.v AndNandTb.v
gtkwaveがうまく入っていれば、openでシミュレーションがみれる。
% open andnandtb.vcd