建立保持時間

 

一、  這兩條約束語句都是針對板級延時而言的。

          語句中必須的有是,時鐘與port.

 二、   set_input_delay

        用於數據輸入端口,調節數據輸入與時鐘輸入到來的相位關係。

        當FPGA外部送入FPGA內部寄存器數據時,會有兩個時鐘launch clock 與latch clock,前者負責將數據從外部寄存器中送出,後者要在setup 與hold都滿足的條件下,將數據鎖入FPGA內部寄存器。在這個過程中,如果launch clock已經將數據送出,併到達FPGA內部寄存器端口,而上一次的數據的hold時間還不足,就會沖掉前面這個數據,導致latch clock 鎖存數據錯誤!方法就是用set_input_delay加在數據到達時間(data_arrival)上加延時,讓數據推遲到達,讓latch clock有足夠的時間(一般爲hold time)對數據鎖存。

       

        例: set_input_delay -clock { clk_in } -add_delay 1.200 [get_ports {data_in}]

 

    圖中input delay(data arrival)將數據到達時間延時1.2ns.

    set_output_delay

        用於數據輸出端口,調節數據輸出與時鐘輸出的相位關係。

        當FPGA內部送出數據給外部器件的時,也應該有兩個時鐘launch clock 與latch clock,前者負責將數據從內部寄存器中送出,後者要在setup 與hold都滿足的條件下,將數據鎖入外部寄存器。在這個過程中,就是要保證在時鐘到來時數據準備好,並讓時鐘有足夠的時間將數據打入外部寄存器中。但如果latch clock已經到來,由於板級延時等,數據未能如時到達,那latch clock沒有足夠的setup 時間對數據採樣,導致採到的數據就是錯誤的!而解決方法就是用set_output_delay加在數據到達時間(data_arrival)上加延時(負值),或者說對latch clock 加延時(正值),表現爲數據提前到達,或認爲latch clock推遲到達,而其實質就是以時鐘爲參考,對數據進行的操作,讓latch clock 有足夠的時間(一般爲setup time)對數據鎖存。

 

     例:set_output_delay -clock { clk_in } -add_delay 2.000 [get_ports data_out]

 

圖中output delay(data requared)向前推2.0ns

 

三、  在設置約束與分析時序過程中對launch clock 和latch clock 的選擇和port的選擇要注意以下問題:

   set_input_delay :在用的設置約束過程中,launch clock 應當是外部器件的數據發送時鐘,如果FPGA內部並無相關時鐘,就設置一個虛擬時鐘作爲launch clock ;latch clock 應當是FPGA內部寄存器時鐘,當然應爲FPGA內部時鐘;在時序分析約束過程中,port應當至少選取To Node.

   set_output_delay :在用的設置約束過程中,launch clock 應當是FPGA內部的數據發送時鐘,應當爲FPGA內部時鐘;latch clock 應當是FPGA外部器件數據鎖存時鐘,如果這個時鐘FPGA內部並無相關時鐘,就設置一個虛擬時鐘作爲latch clock ;在時序分析約束過程中,port應當至少選取From Node.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章