”Spartan3Aのプログラマブル遅延素子1”と
”Spartan3Aのプログラマブル遅延素子2”では、IOBバッドからSLICEに行く経路の遅延であるIBUF_DELAYを変更してその値を調べた。今度はIOBパッド内のFFへの遅延であるIFD_DELAYの値を調べてみる。
前回のVerilog-HDLの記述ではin_ff は、IOBのFFを使用することが出来なかったので、Verilog-HDLソース上にIOB制約を追加することにした。ソースを下に示す。
`timescale 1ns / 1ps
module IOB_Delay_test(
input clk,
input reset,
input testin,
output testout
);
(* IOB="TRUE" *)reg in_ff;
// reg in_ff;
reg in2_ff;
always @(posedge clk) begin
if (reset) begin
in_ff <= 1'b0;
in2_ff <= 1'b0;
end else begin
in_ff <= testin;
in2_ff <= in_ff;
end
end
assign testout = in2_ff;
endmodule
これでインプリメントしてFPGA Editorで見てみると、IOB内のFFを使っていることがわかった。

上のFPGA Editorの図を見ると、最初からDLY5が入っているのがわかる。以前に
”DCMを使わないクロックを使いIOB内のFFでデータを受ける”でもやったみたが、セットアップ時間をマイナスの値にしないようにするためや、Xilinxのアンサー
”13309 - 10.1 タイミング - 遅延エレメントが使用されるとデータ有効ウィンドウが大きくなる (Tiopickd、Tioickpd)”にあるようにデータ有効ウインドウが大きくなるためだと思われる。
Timing Analyzerの解析結果を下に示す。

Maximumのデータパス遅延が4.135ns、Minimumのクロックパス遅延が1.849ns、上の図には見えていないがMaximumのクロックパス遅延が2.215ns となっていた。
さて、
”ISE10.1のFPGA EditorでIOBやSLICEのパラメータを変更”と同様の方法でFPGA Editorを使用してIFD_DELAYをいろいろな値に変更して、Tiopickdがどのように変化するかをTiming Analyzerで見て表にしみた。その表を下に示す。

IFD_DELAYは4タップあるので、Coarse Delayを入れると8タップということになる。上の表を見るとDLY5のところで不連続になっているので、ここでCoarse Delayが入ったのだろう。IBUF_DELAYに比べてタップごとの遅延が大きい。最大の遅延は同じくらいなので、タップごとのステップが大きいようだ。
実はこの値は
Spartan3Aのデータシートの25ページのTable 20: Setup and Hold Times for the IOB Input Path (Continued) に載っている。ホールド時間のTioickpdの値も26ページに載っている。
そこでデータウインドウをIFD_DELAY_VALUE = 0 (DLY0) の時とIFD_DELAY_VALUE = 8 (DLY8) の時で比較してみよう。有効データの必要があるウインドウはセットアップ時間 - ホールド時間だ。
IFD_DELAY_VALUE = 0 1.51ns - 0.67ns = 0.84ns
IFD_DELAY_VALUE = 8 6.73ns - 3.81ns = 2.92ns
上の計算より、IFD_DELAY_VALUE = 8 (DLY8) の時のほうが有効データの必要があるウインドウが広がっていることがわかる。
- 2009年03月12日 06:23 |
- FPGAチップ内の配線方法
-
| トラックバック:0
-
| コメント:0