テストベンチ
ISEが自動生成してくれるテストベンチに少し手を入れたものです。
動作としては、動作スタート後100nsでリセット解除し、入力256サンプル分までLチャンネルを 0 とし、その後に1サンプルのみ24ビット正の最大値 7FFFFF(インパルス)としています。
青字部分はデータをファイルとして書き出すための記述で、ISimでこのシミュレーションを実行するとファイル DATAOUT.txt ができます。$fdisplayには、フォーマットに関する引数を指定でき、 %d: 10進表記、%h: 16進表記、%o: 8進表記、%b: 2進表記です。詳しくは、参考書を見て下さい。
module lpf15k_tb;
parameter CYCLE = 12*512;
parameter STROBE = 12*512*0.8;
integer dataout;
// Inputs
reg [23:0] l15k_l_i;
reg [23:0] l15k_r_i;
reg clk;
reg reset;
reg l15k_thru;
// Outputs
wire [23:0] l15k_l_o;
wire [23:0] l15k_r_o;
// Instantiate the Unit Under Test (UUT)
lpf15k uut (
.l15k_l_i(l15k_l_i),
.l15k_r_i(l15k_r_i),
.l15k_l_o(l15k_l_o),
.l15k_r_o(l15k_r_o),
.clk(clk),
.reset(reset),
.l15k_thru(l15k_thru)
);
initial
begin
dataout = $fopen("DATAOUT.txt");
$fdisplay (dataout, "time, l15k_l_i, l15k_l_o");
// Initialize Inputs
l15k_l_i = 0;
l15k_r_i = 0;
clk = 0;
reset = 1;
l15k_thru = 0;
#100;
reset = 0;
#(CYCLE*256);
l15k_l_i = 24'h7FFFFF;
#(CYCLE);
l15k_l_i = 0;
#(CYCLE*256);
l15k_l_i = 24'h800000;
end
always #6 //77.824MHz
begin
clk = ~clk;
end
always
begin
#STROBE
$fdisplay (dataout, "%0d,%h,%h", $time, l15k_l_i, l15k_l_o);
#(CYCLE-STROBE);
end
endmodule
シミュレーション結果
シミュレーションにより作られたファイルの内容を示します。
time l15k_l_i l15k_l_o
4915 000000 000000
11059 000000 000000
17203 000000 000000
23347 000000 000000
29491 000000 000000
(中略)
1565491 000000 000000
1571635 000000 000000
1577779 7fffff 000000
1583923 000000 000000
1590067 000000 00000f
1596211 000000 00000f
1602355 000000 000000
1608499 000000 fffff0
1614643 000000 ffffe0
(以下略)
参考資料
・鳥海佳孝 田原追仁治 横溝憲治(2002) 実用HDLサンプル記述集 CQ出版社
0 件のコメント:
コメントを投稿