- Icarus Verilogをインストールしたので、簡単な回路をかいて実行してみました。
外部からのイベントをカウントする回路(event_cnt.v)とテストベンチ(tbench.v)
を使用して実行してみます。
event_cnt.v
module event_cnt(clk, rstb, kick, count);
input clk; // クロック
input rstb; // リセット
input kick; // イベント
output [3:0] count; // カウント値
reg [3:0] count;
always @(posedge clk or negedge rstb) begin
if(!rstb) begin
count <= 4'h0;
end
else if(kick) begin //イベントでカウントアップ
count <= count + 1;
end
end
endmodule
tbench.v
`timescale 1ns/1ns
module tb_event_cnt;
reg clk; // クロック
reg rstb; // 非同期リセット
reg kick; // イベント
wire [3:0] count; // カウント値
parameter CLK_CYC = 100;
event_cnt event_cnt (
.clk (clk),
.rstb (rstb),
.kick (kick),
.count (count)
);
initial clk = 0;
always begin
#(CLK_CYC/2) clk = ~clk;
end
initial begin
rstb <= 0;
kick <= 0;
#150 rstb <= 1;
repeat(3)
@(posedge clk) ;
@(posedge clk) kick <= 1;
@(posedge clk) kick <= 0;
@(posedge clk) ;
@(posedge clk) ;
@(posedge clk) kick <= 1;
repeat(15)
@(posedge clk) ;
@(posedge clk) kick <= 0;
repeat(3)
@(posedge clk) ;
$finish;
end
initial begin
$monitor($time, " rstb=%b, kick=%b, count=%d",
rstb,kick,count);
$dumpfile("waves.vcd");
$dumpvars(0,tb_event_cnt);
end
endmodule
Icarus Verilog実行
% iverilog -o event_cnt event_cnt.v tbench.v
コンパイルしてオブジェクトファイル(event_cnt)を作成します。
vvpコマンドで実行すると$monitorの結果が表示されます。
% vvp event_cnt
VCD info: dumpfile waves.vcd opened for output.
0 rstb=0, kick=0, count= 0
150 rstb=1, kick=0, count= 0
450 rstb=1, kick=1, count= 0
550 rstb=1, kick=0, count= 1
850 rstb=1, kick=1, count= 1
950 rstb=1, kick=1, count= 2
1050 rstb=1, kick=1, count= 3
1150 rstb=1, kick=1, count= 4
1250 rstb=1, kick=1, count= 5
1350 rstb=1, kick=1, count= 6
1450 rstb=1, kick=1, count= 7
1550 rstb=1, kick=1, count= 8
1650 rstb=1, kick=1, count= 9
1750 rstb=1, kick=1, count=10
1850 rstb=1, kick=1, count=11
1950 rstb=1, kick=1, count=12
2050 rstb=1, kick=1, count=13
2150 rstb=1, kick=1, count=14
2250 rstb=1, kick=1, count=15
2350 rstb=1, kick=1, count= 0
関連書籍
- 入門Verilog HDL記述―ハードウェア記述言語の速習&実践 (Design wave b.../小林 優
- ¥3,360
- Amazon.co.jp
Verilog HDL記述を習得するには、この1冊で十分と思います。
半導体理工学研究センター(STARC)が策定した「設計スタイルガイド」に準拠して
いるので、一般的なスタイルも身につきます。
- ディジタル数値演算回路の実用設計―四則演算、初等超越関数、浮動小数点演算の作りかた (Desi.../鈴木 昌治
- ¥3,570
- Amazon.co.jp
- 内容は実用的で、すばらしい書籍です。
製品差異化の重要な要素となる高速化や小型化を図るため、さまざまな視点でのアプローチが
紹介されています。
論理合成ツールがかしこくなり、演算回路構成を意識せずとも、それなりの回路は作れますが、
回路構成を知っているのと知らないのとでは、面積や速度でかなり回路差がでます。
この値段でこの密度は、かなりお得です。