FC2カウンター FPGAの部屋 DDR SDRAMコントローラのインプリメント2
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

DDR SDRAMコントローラのインプリメント2

昨日のタイミングが収束できない件は解決できた。
結局1.ではだめだった。
dqs_enable_2dはトラーステートバッファ制御用DDR FFなどを制御する信号で、各64個のDQ(DDR SDRAMのデータ)を出力するIOBに回っている。
昨日のdqs_enable_2dは途中の状態で、dqs_enable_2dを8個に分けて8個ずつDQにまわした状態だった。
最初は、1本のdqs_enable_2dで各64個のDQ(DDR SDRAMのデータ)にまわしていた。その時のタイミングレポートを見ると、やはり0.841ns足りない。

Slack: -0.841ns (requirement - (data path - clock path skew + uncertainty))
Source: U_ddr_cont_inf/DDR_CONT/write_data_module_inst/dqs_enable_2d[0] (FF)
Destination: U_ddr_cont_inf/DDR_CONT/write_data_module_inst/WRDATA_DDR_TRI_INST.0.WRDATA_DDR_TRI/FF0 (FF)
Requirement: 3.750ns
Data Path Delay: 4.011ns (Levels of Logic = 0)
Clock Path Skew: -0.580ns
Source Clock: U_ddr_cont_inf/DDR_CONT/clkx rising at 2.754ns
Destination Clock: U_ddr_cont_inf/DDR_CONT/clk rising at 6.504ns
Clock Uncertainty: 0.000ns
Timing Improvement Wizard
Data Path: U_ddr_cont_inf/DDR_CONT/write_data_module_inst/dqs_enable_2d[0] to U_ddr_cont_inf/DDR_CONT/write_data_module_inst/WRDATA_DDR_TRI_INST.0.WRDATA_DDR_TRI/FF0
Delay type Delay(ns) Logical Resource(s)
---------------------------- -------------------
Tcko 0.493 U_ddr_cont_inf/DDR_CONT/write_data_module_inst/dqs_enable_2d[0]
net (fanout=128) 3.241 U_ddr_cont_inf/DDR_CONT/write_data_module_inst/dqs_enable_2d(0)
Tiosrckt 0.277 U_ddr_cont_inf/DDR_CONT/write_data_module_inst/WRDATA_DDR_TRI_INST.0.WRDATA_DDR_TRI/FF0
---------------------------- ---------------------------
Total 4.011ns (0.770ns logic, 3.241ns route)
(19.2% logic, 80.8% route)

それをFPGA EditorのWorld画面で見ると、ネットがどのようになっているかが良く分かる。

dqs_enable_2d_fanout128.png


このように、128のファンアウトがあるので、ネットがたくさん走っているのが見える。赤い線がネットだ。これでは、いくらUCFでMAXDELAY=2nsを入れても遅延時間は縮まるはずがないのが分かる。
dqs_enable_2dを複製して増やしても、論理合成ツール(Synplify)が無駄と判断し、複製した分は消されてしまう。
Synplifyのマニュアルを見てみるとattributeを設定すると、VHDLのsignalごとにファンアウトを設定出来ることがわかった。それはsyn_maxfanというattributeだ。
VHDL記述は、
attribute syn_maxfan : integer;
attribute syn_maxfan of dqs_reset_2d :signal is 2;
attribute syn_maxfan of dqs_reset_2d_dqtri :signal is 1;
attribute syn_maxfan of dqs_enable_2d :signal is 1;
attribute syn_maxfan of dqs_reset_1d :signal is 9;
attribute syn_maxfan of dqs_enable_1d :signal is 8;
というようにした。
dqs_enable_2dは、ファンアウト1なので、1出力しか出来ないので、128個のFFが出来るはず。
これでコンパイルしてみた。
見事にタイミングクリア。
タイミングレポート。

Slack: 0.181ns (requirement - (data path - clock path skew + uncertainty))
Source: U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/wp_fast[1] (FF)
Destination: U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/FIFO_DATA_GEN.38.RAM64_INST/F.S0 (RAM)
Requirement: 7.500ns
Data Path Delay: 7.319ns (Levels of Logic = 4)
Clock Path Skew: 0.000ns
Source Clock: U_ddr_cont_inf/DDR_CONT/clk rising at 6.504ns
Destination Clock: U_ddr_cont_inf/DDR_CONT/clk rising at 14.004ns
Clock Uncertainty: 0.000ns

Data Path: U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/wp_fast[1] to U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/FIFO_DATA_GEN.38.RAM64_INST/F.S0
Delay type Delay(ns) Logical Resource(s)
---------------------------- -------------------
Tcko 0.493 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/wp_fast[1]
net (fanout=42) 1.229 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/wp_fast(1)
Tilo 0.382 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/un4_fifo_full_a_0_c3
net (fanout=1) 0.217 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/un4_fifo_full_a_0_c3
Tilo 0.382 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/un4_fifo_full_NE_2
net (fanout=2) 1.047 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/rddata_fifo_full_2
Tilo 0.382 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/we_0_a2
net (fanout=89) 2.730 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/we
Tws 0.457 U_ddr_cont_inf/DDR_CONT/rddata_fifo_inst/FIFO_DATA_GEN.38.RAM64_INST/F.S0
---------------------------- ---------------------------
Total 7.319ns (2.096ns logic, 5.223ns route)
(28.6% logic, 71.4% route)

というようにSlackが+になって、他のパスがクリティカルパスになっている。
またFPGA EditorのWorld画面を見ると。

dqs_enable_2d_fanout1.png


ネットがほんの少ししか走ってないことが分かる。
これで、タイミングは収束した。結局、”2.Syplify Proに制約を加えて、クリティカルパスを削除しないようにする”が一番効いた。
これから、テストだが環境を構築しなければいけない。机の上の整理も含めて。
なお、attributeのsyn_maxfanはISEに付属の論理合成ツール(XST)でも使えるそうだ。(マニュアルに書いてあった)

テーマ:拡張ボード - ジャンル:コンピュータ

  1. 2005年08月10日 13:46 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/2-cd08b454
この記事にトラックバックする(FC2ブログユーザー)