天天看點

OFFSET IN 使用舉例

本文将結合具體執行個體闡述OFFSET IN的使用方法。注意:這是我第一次寫OFFSET IN限制,本文僅供參考。閱讀本文前需要了解時序收斂的基本概念,OFFSET IN和Period的相關知識,可先閱讀時序收斂:基本概念,OFFSET限制(OFFSET IN 和OFFSET OUT)這兩篇内容。

系列目錄 

    時序收斂:基本概念

    建立時間和保持時間(setup time 和 hold time)

    OFFSET限制(OFFSET IN 和OFFSET OUT)

    Clock Skew , Clock uncertainly 和 Period

    特殊限制From To

    OFFSET IN 使用舉例

    Achieving Timing Closure

1. 分析

    某器件(Device)有信号RXD0-RXD15,RKLSB,RKMSB需要輸入到FPGA内,同時有與資料同步的RXCLK,資料為SDR輸入。如下圖所示,這是一個典型的源同步輸入方式,需要給出OFFSET IN限制。

OFFSET IN 使用舉例

    OFFSET IN的相關參數可以到與器件對應的Datasheet内尋找,該器件的輸入滿足以下關系。RXD0-RXD15,RKLSB,RKMSB在RXCLK上升沿到達前3ns有效,同時在上升沿之後保持3ns。(這一情況對應TXCLK=80MHz,TXCLK = RXCLK)

OFFSET IN 使用舉例
OFFSET IN 使用舉例

    綜合這兩點考慮,RXD0-RXD15,RKLSB,RKMSB的OFFSET IN Before 是 3ns(80MHz),同時資料的有效時間為tsu+th = 6ns(80MHz)。

2. 建立時序限制

    可以之間在UCF檔案中寫時序限制,也可以通過軟體指定生成。這裡介紹後一種方法,采用ISE開發環境,首先打開工程,點選Create Timing Constraints。

OFFSET IN 使用舉例

    由于RXD0-RXD15,RKLSB,RKMSB滿足的OFFSET IN是一緻的,這裡先定義TIMEGRP。點選左側Grop Constraints by Instance,出現如下界面。由于RXD0-RXD15,RKLSB,RKMSB都是輸入pad,選擇Input Pads,建立Time name為tlk1_rxd,選擇對應的RXD0-RXD15,RKLSB,RKMSB完成即可。(注:該工程中有兩個器件,這裡對應tlk1_dclkin為RXCLK,tlk1_rklsb為RKLSB,tlk1_rkmsb為RKMSB,tlk1_rxd[15:0]為RXD0-RXD15.)

OFFSET IN 使用舉例

    之後選擇OFFSET IN,定義OFFSET IN限制。打開界面,選擇源同步,SDR方式,Clock edge為Center aligned(這個可以通過右側的時序圖确定)。點選下一步。(注,tlk1_dclkin在FPGA内部作為時鐘,需要先寫時序限制,這裡假設頻率為100MHz,占空比1:1。)

OFFSET IN 使用舉例

    之後确定相關參數,Input clock pad為tlk1_dclkin(時鐘限制已經寫好),輸入pad為tlk1_rxd。第1節分析結果可得在135MHz下offset in為2.5ns,資料有效時間為5ns。這裡采用這一數值,填入對應方框中,确認儲存即可。

OFFSET IN 使用舉例

3. 結果

    生成限制後,可以打開UCF檔案,觀察生成結果如下所示。首先是tlk1_dclkin的周期限制,同時定義了占空比為1:1。之後确定了TIMEGRP,最後指定了OFFSET IN限制。

NET "tlk1_dclkin" TNM_NET = tlk1_dclkin;

TIMESPEC TS_tlk1_dclkin = PERIOD "tlk1_dclkin" 10 ns HIGH 50%;

TIMEGRP "tlk1_rxd" = PADS("tlk1_rxd<15>") PADS("tlk1_rxd<0>") PADS("tlk1_rxd<1>") PADS("tlk1_rxd<2>") PADS("tlk1_rxd<3>") PADS("tlk1_rxd<4>") PADS("tlk1_rxd<5>") PADS("tlk1_rxd<6>") PADS("tlk1_rxd<7>") PADS("tlk1_rxd<8>") PADS("tlk1_rxd<9>") PADS("tlk1_rxd<10>") PADS("tlk1_rxd<11>") PADS("tlk1_rxd<12>") PADS("tlk1_rxd<13>") PADS("tlk1_rxd<14>") PADS("tlk1_tklsb") PADS("tlk1_tkmsb");

TIMEGRP "tlk1_rxd" OFFSET = IN 2.5 ns VALID 5 ns BEFORE "tlk1_dclkin" RISING;

自由轉載,轉載注明出處(http://www.cnblogs.com/sea-wind/)

姓名标示(BY)-相同方式分享(SA)