Xilinx ISE Web Pack のHello World〜実装編〜

前回の続き。
下準備編は、http://d.hatena.ne.jp/ymlab/20100101
を参照。

Velilog-HDL記述

前回の下準備編で、画面は、下のようになっている。

右半分が、ソースを記述するところ。

とりあえず、こんな感じで記述してみる。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    22:43:43 01/01/2010 
// Design Name: 
// Module Name:    abc 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module abc(
	clk,
	reset,
	counter_out
	);
	input clk;
	input reset;
	output [15:0] counter_out;
	
	reg [15:0] d_counter_out;
	assign counter_out = d_counter_out;
	
	always@ ( posedge clk ) begin
		if ( reset == 1'b1 ) begin
			d_counter_out <= 16'h0000;
		end
		else begin
			d_counter_out <= d_counter_out + 1'b1;
		end
	end
endmodule

シミュレーション

ここまでの作業の後、実際にうまく動作をするか実機で確認をする前に、
シミュレーションを行う。

下図のように、Source forを先ほどのimplementationから、Behavioral Simulation
に変更する。
その後、プロジェクトである、testiの上で右クリックして、New Sourceを選択する。

そうしたら、Select Source Typeのウィザードが出てくるので、
Velilog Test Fixtureを選択した状態で、File Nameに適当な名前をつけよう。
今回の場合は、testi_simにしてみた。

Nextを選択したら、今度は、Associate Sourceのダイアログが出てくる。
要するに、これは今回作るシミュレーションのファイルは、どのプロジェクトのシミュレーション
なのですか?と聞いている。今回は、abcというプロジェクトしか作っていないので、
abcを選択して、Nextを選択する。

次は、Summaryというダイアログが出てくる。これは、作っちゃうよ。いいかな?
と聞いているだけなので、そのままFinishを選択すればよい。

そしたら、シミュレーション用のソースがべべっっと吐き出される。
こんな画面。

いよいよ、シミュレーション用の記述をしよう。

シミュレーションの記述

こんな感じで記述をしよう。ほとんど自動生成されているので、楽なはず。

`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:   01:38:14 01/02/2010
// Design Name:   abc
// Module Name:   C:/Documents and Settings/ymlab/My Documents/project/testi/testi_sim.v
// Project Name:  testi
// Target Device:  
// Tool versions:  
// Description: 
//
// Verilog Test Fixture created by ISE for module: abc
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////

module testi_sim;

	// Inputs
	reg clk;
	reg reset;

	// Outputs
	wire [15:0] counter_out;

	// Instantiate the Unit Under Test (UUT)
	abc uut (
		.clk(clk), 
		.reset(reset), 
		.counter_out(counter_out)
	);
	always#(50) clk =~clk;
	
	initial begin
		// Initialize Inputs
		clk = 0;
		reset = 0;

		// Wait 100 ns for global reset to finish
		#100;
      reset=1;
		#100;
		reset = 0;
		// Add stimulus here
		#10000;
		
		$stop;
	end
      
endmodule

シミュレーションの実行

いよいよシミュレーションをする。
まずは、シミュレーションの記述が文法的に正しいかチェックをしよう。
Processes:のところにある、ISim Simulatorのツリーの下にある、
Behavioral Check Syntaxをダブルクリックすると、文法チェックを行ってくれる。


うまくいくと、Behavioral Check Syntaxの横に緑色のチェックマークがつき、
下の出力ウインドウには、
Proccess "Check Syntax" completed successfully
という文字が登場する。

シミュレーション実行

やっと、ここまでたどり着いた。
シミュレータの起動は、もうわかっていると思うが、
Behavioral Check Syntaxの下にある、Simulate Behavioral Modelをダブルクリックすればよい。

そうしたら、結構時間がかかるが、論理合成をしてくれて、
iSimというプログラムが立ち上がる。

iSimの様子は、きっとこんな感じのはずだ

バッとみて、clkが一直線なので、おかしい!?
と思いがちであるが、横軸の縮尺が小さすぎるからなので、
落ち着いて、図の矢印にあるマイナスの虫眼鏡をクリックしていけば、
図のような縮尺が得られる。

ここで、一番上の最初のところが、XXXXXXと赤色で表示されているのは、
プログラムのほうで定義をしていないからである。

Velilog-HDL記述を初めてするみなさんがこのサイトを発見したのであれば、
うれしい限りである。

ただし、今回の質問は残念ながら答えられない。
私自身、9年間も勉強しては、なんのこっちゃ状態で、放置していたのである。

今日兄上が実家に帰ってきていて、バーっと上のプログラムを兄上が作っていくのを、
置いて行かれないように、ノートに走り書きしてメモったものを思い出しながら書いたものである。
この間、わずか10分。

正月から脳みそフル回転だった。

昔、デジタルICの74シリーズで、四苦八苦しながら、7+7までできる電卓を作ったが、
その動作確認をVelilogで作ってみようかな。と思ったりする。

生まれて初めて、そして最後(かもしれない)私が作った74シリーズで作った、
7+7までできる電卓の回路を下に記述する。