Verilog Hardware Description Language

単なる備忘録その6。
top.v : カウンターのテストコード。
/*
	12bit Counter Test Module

	Sat,04 Sep,2004 - Sun,05 Sep,2004
	Copyright(C)2004 G-HAL
*/

`timescale 1ns/1ns	// Unit timescale (実行単位/精度)

module top;

reg nRST;
reg clk;
wire [11:0] count_out;

counter count_1(nRST, clk, count_out);

parameter STEP = 10;

initial begin
		// vcd 出力
	$dumpfile("test.vcd");
	$dumpvars(0, top);

		// Initial
		clk = 0;
		nRST = 0;
	#(STEP*2) nRST = 1;
	#(STEP*100);
		$stop;		// Simulation を終了し、Simulator に戻る。
		$finish;	// Simulation を終了し、Simulator も終了する。
end

initial begin
	forever
		#STEP	clk = ~clk;
end

always @(negedge clk) begin
	$display( "Time=%d, count_out=%b, display(negedge clk)",$time, count_out);
end

always @(count_out) begin
	$display( "Time=%d, count_out=%b, display(count_out)",$time, count_out);
end

initial $monitor($stime, "stime:%d, Time:%d, count_out:%b, monitor", $stime, $time, count_out);
	// 第1引数が変化したら表示するらしい。

endmodule

counter.v : カウンター本体。
/*
	12bit Counter

	Sat,04 Sep,2004 - Sun,05 Sep,2004
	Copyright(C)2004 G-HAL
*/

module counter(nRST,CLK,COUNT);
	parameter SIZE=12;
	input nRST;
	input CLK;
	output [SIZE-1:0] COUNT;

//synopsys sync_set_reset "nRST"
//      ↑ xilinx のシンセサイザを使用している場合、
//	この行を先頭の // も含めて付けると、
//	同期リセットに最適化を試みるらしい。

reg [SIZE-1:0] COUNT;
// output での名称と reg の名称が同じだと、
// レジスタ内容が直に出力される。

//always @(posedge CLK or negedge nRST) begin
//	↑ 非同期リセットの場合。
//	xilinx のシンセサイザでは、これをやると、
//	GCLRn を使用した最適化を試みるらしい。
always @(posedge CLK) begin
//	↑ 同期リセットの場合。
	if (!nRST) begin
		COUNT <= 0;
	end else begin
		COUNT <= COUNT + 1;
	end
end

// assign	COUT = COUNT;
// レジスタ内容を直に出力しているので、
// レジスタ内容を output に assign する必要が無い。

endmodule
// [ EoF ]

Makefile : 所謂 Makefile、GNU make 専用。
#	VerilogHDL の為の Makefile
#		(gnu make 依存)
#	Copyright(C)2004 ghal


# 個別の環境設定

LIBDIR = .
SRCS = counter.v top.v


# 共通の環境設定

.SUFFIXES: .v .vvp .vcd .log
.PRECIOUS: %.v %.vvp

IVERILOG = iverilog
VVP = vvp
RM = rm


# 共通の処理設定

%.vvp:
	$(IVERILOG) -o $@ -y $(LIBDIR) $^

.v.vvp:
	$(IVERILOG) -o $@ -y $(LIBDIR) $<

.vvp.log:
	echo "finish" | $(VVP) -l $@ $<

.vvp.vcd:
	echo "finish" | $(VVP) $<


all::	

clean::
	-$(RM) -f *.bak
	-$(RM) -f *.vvp
	-$(RM) -f *.vcd
	-$(RM) -f *.log
	-$(RM) -f *.core


# 個別の処理設定

counter_test.vvp: $(SRCS)

counter_test.log: counter_test.vvp

# [ EoF ]

BSDmakefile : 所謂 Makefile、*BSD make 専用。
#	VerilogHDL の為の Makefile
#		(FreeBSD make 依存)
#	Copyright(C)2004 ghal


# 個別の環境設定

LIBDIR = .
SRCS = counter.v top.v


# 共通の環境設定

.SUFFIXES: .v .vvp .vcd .log
.PRECIOUS: %.v %.vvp

IVERILOG = iverilog
VVP = vvp
RM = rm


# 共通の処理設定

.v.vvp:
	$(IVERILOG) -o $@ -y $(LIBDIR) ${.ALLSRC}

.vvp.log:
	echo "finish" | $(VVP) -l $@ $<

.vvp.vcd:
	echo "finish" | $(VVP) $<


all::	

clean::
	-$(RM) -f *.bak
	-$(RM) -f *.vvp
	-$(RM) -f *.vcd
	-$(RM) -f *.log
	-$(RM) -f *.core


# 個別の処理設定

counter_test.vvp: $(SRCS)
	$(IVERILOG) -o $@ -y $(LIBDIR) ${.ALLSRC}

counter_test.log: counter_test.vvp

# [ EoF ]

Last modified on Mon,06 Sep,2004.
This contents was founded in Sat,04 Sep,2004.
FENIX HomePage
G-HAL HomePage
ハードヱアに関するウダウダ
Mail to, メールはこちらへ
Suggestion Box, 投書箱
BBS, 掲示板 UserName:BBS、Password:BBS
(C) 2004 G-HAL