1. 程式人生 > >用Quartus II Timequest Timing Analyzer進行時序分析 :例項講解 (四)

用Quartus II Timequest Timing Analyzer進行時序分析 :例項講解 (四)

設定輸入/輸出延遲(input/output delay)。首先看輸入延遲。

下面圖示的系統是我們在做數位電路設計時經常會遇到的。External Device可能是其他的積體電路晶片,也有可能是其他的FPGA,為了與我們所要討論的FPGA分開,稱之為External Device。External Device中的暫存器D1的輸出送給FPGA中的暫存器D2。D1和D2屬於同一個時鐘域(CLK)。為了簡化討論,我們假設CLK source到兩個暫存器之間的延時是相等的,也就是說延時CLK1等於延時CLK2。這個時候,D1的CLK端到D2的D端形成了一個完整的timing path。

clip_image002

但是,在我們對FPGA做時序分析的時候,軟體只知道FPGA內部的時序資訊,對External Device的情況並不清楚。所以我們必須要新增額外的約束來反映FPGA外部的時序資訊。一般情況下,我們用input delay來表示輸入訊號相對於CLK的延遲。即上圖我們用紅線表示出來的部分。為了便於討論,我們把FPGA內部藍色走線的部分稱為chip delay。如果我們能給出input delay的大小,那麼軟體就可以計算出chip delay的大小,從而保證該條timing path符合設計要求。

一般情況下,External Device的spec會給出input delay的大小。我們在做FPGA時序分析的時候,只需要用命令將input delay加入到約束中就可以了。

下面是input delay的語法,詳細的介紹可參照Quartus II的幫助系統。

Syntax

set_input_delay [-h | -help] [-long_help] [-add_delay] -clock<name> [-clock_fall] [-fall] [-max] [-min] [-reference_pin<name>] [-rise] [-source_latency_included] <delay> <targets>

由於在DAC7512控制器裡,並沒有需要設定input delay的訊號,所以下面給出幾個一般的input delay的例子,它們與DAC7512控制器的設計沒有關係。

set_input_delay -clock clk 1.5 [all_inputs]

    set_input_delay -clock clk -clock_fall 1.5 [get_ports myin*]

在上面的討論中,我們假定CLK到D1和D2的延時是相等的,但在某些情況下,CLK的延時可能會有差別,那麼在定義input delay的時候,就需要考慮CLK延時的差值。具體的計算方式請大家考慮一下,也可以參照TimeQuest文件中的相關部分,這裡不再做敘述。

然後看輸出延遲。

下圖是一個output dleay的例子,和上面講的input delay相似。在做數位電路設計時也經常會遇到這樣的情況。同樣的,External Device可能是其他的積體電路晶片,也有可能是其他的FPGA,為了與我們所要討論的FPGA分開,稱之為External Device。圖中FPGA的暫存器D1的輸出送給External Device的暫存器D2。D1和D2屬於同一個時鐘域(CLK)。為了簡化討論,我們假設CLK source到兩個暫存器之間的延時是相等的,也就是說延時CLK1等於延時CLK2。這個時候,D1的CLK端到D2的D端形成了一個完整的timing path。

clip_image004

同樣的,在對FPGA做時序分析的時候,軟體只知道FPGA內部的時序資訊,對External Device的情況並不清楚。所以我們必須要新增額外的約束來反映FPGA外部的時序資訊。一般情況下,我們用output delay來表示輸出訊號在FPGA外部走線相對於CLK的延遲。即上圖我們用藍線表示出來的部分。為了便於討論,我們把FPGA內部紅色走線的部分稱為chip delay。如果我們能給出output delay的大小,那麼軟體就可以計算出chip delay,從而保證該條timing path符合設計要求。

一般情況下,External Device的spec會給出所需要的output delay的大小。我們在做FPGA時序分析的時候,只需要用命令將output delay加入到約束中就可以了。

下面是output delay的語法,詳細的介紹可參照Quartus II的幫助系統。

Syntax

set_output_delay [-h | -help] [-long_help] [-add_delay] -clock<name> [-clock_fall] [-fall] [-max] [-min] [-reference_pin<name>] [-rise] [-source_latency_included] <delay> <targets>

也給出兩個一般性的例子:

set_output_delay -clock clk 0.5 [all_outputs]

set_output_delay -clock clk -clock_fall 0.5 [get_ports myout*]

現在我們討論DAC7512控制器輸出訊號的output delay,以DA_DIN訊號為例。DAC7512控制器的DA_DIN和DA_SCLK與DAC7512的DIN和SCLK按照下面的方式連線。

clip_image006

可以看到D1和D2的時鐘是CLK50M。CLK50M到D1和D2的延時分別是Delay1和Delay6。根據FPGA的特性,可以認為Delay1和Delay6是相等的。Delay4和Delay5是兩根訊號線在PCB上的延時,可以認為二者是相等的。FPGA設計要滿足的是D1到DA_SCLK port的延時(Delay2)和D2到DA_DIN port的延時(Delay3)能滿足DAC7512 datasheet上對DIN input delay的要求(對於FPGA來講,就是DA_DIN的output delay)。

DAC7512的datasheet給出了DAC7512的管腳上DIN和SCLK的時序要求。如下面兩張圖所示。可以看到以PORT_DA_SCLK為基準,DA_DIN的output delay最大值為(20-4.5),最小值為5。

clip_image008

clip_image010

對我們來講,Delay2是一個比較難確定的值,但實際上我們可以通過定義以DA_SCLK為源的PORT_DA_SCLK時鐘來讓軟體給我們計算出來Delay2的值。通過下面的命令,建立PORT_DA_SCLK時鐘。

create_generated_clock -name PORT_DA_SCLK -divide_by 1 -source [get_registers {DAC7512:DAC7512|DA_SCLK}] [get_ports DA_SCLK]

這樣我們就可以用set_output_delay命令定義DA_DIN的output delay。

set_output_delay -clock PORT_DA_SCLK -clock_fall -max 14.5 [get_ports DA_DIN]

set_output_delay -clock PORT_DA_SCLK -clock_fall -min 5 [get_ports DA_DIN]