使用TimeQuest進行SDRAM時鐘約束例項

2021-06-03 23:55:23 字數 1351 閱讀 9306

特權同學的《sdram時鐘相移估算》針對sdram的相移設定做了一些介紹,也列舉了乙個活生生的例子進行講解。很多朋友在實際應用中即便對sdram的時序模型熟悉了,當可能仍然不知道在timequest這個工具上如何進行時序約束和分析,尤其對於這個sdram專用時鐘的約束分析。本文就是要和大家來**實際應用中如果使用timequest進行sdram時鐘約束。

這個例項中,pll的輸出時鐘clk1為100mhz,相移為0ns。pll的輸出時鐘clk2為100mhz,相移為1.5ns(具體為什麼不是本文討論的重點,可以參考《sdram時鐘相移估算》)。同時,這個clk1作為fpga內部sdram控制器的時鐘,而clk2輸出到外部連線到sdram的時鐘管腳。為了說明問題,我們首先會給這個作為sdram時鐘的sdram_clk訊號使用set maximum delay與set minimum delay新增時序約束:

set_max_delay -from [get_clocks ] -to [get_ports ] 5.000

set_min_delay -from [get_clocks ] -to [get_ports ] 1.000

該約束的意義就是希望pll的輸入時鐘_clk2到sdram_clk管腳上的延時在1ns~5ns。然後我們得到的setup slack分析結果如圖1所示。

_clk2到sdram_clk路徑延時為1.567ns。

下一步我們要產生乙個名為sdramclk的生成時鐘,用於sdram資料、位址等訊號的時序約束。這個生成時鐘的約束有講究,卻並不難。如圖2所示,命名為sdramclk,時鐘源(source)選擇pll的輸出時鐘clk2,目的時鐘(targets)選擇連線到sdram上的sdram_clk。

圖2約束完成後產生約束指令碼如下:

create_generated_clock -name -source [get_nets ] -master_clock [get_ports ]

然後就可以使用生成時鐘sdramclk約束相關的資料匯流排或位址匯流排。例如可以對資料訊號進行約束:

set_input_delay -add_delay -max -clock [get_clocks ]  4.500 [get_ports ]

set_input_delay -add_delay -min -clock [get_clocks ]  -2.000 [get_ports ]

然後我們任意檢視一組registers to outputs的setup time和hold time約束報告,分別如圖3和圖4所示。

看到了吧,這時候的鎖存沿(latch clock,即sdramclk)的時鐘網路延時(clock network delay)就是圖1中看到的1.567ns。那麼也就說明所產生的這個約束sdram的時鐘是真實的時鐘,它的路徑延時也是真實的。

使用SD卡剩餘空間

下面我們就來看看怎麼將剩餘的空間還原出來。命令解釋 檢視當前磁碟大小,總大小只有2.9gb 檢視第二分割槽的起始位址,後面會用到 使用fdisk操作磁碟 d,刪除分割槽 2,刪除第二分割槽 建立乙個新分割槽 建立主分割槽 分割槽2 輸入第一次得到的第二分割槽起始扇區 最後乙個sector,預設即可 ...

android 對SD卡進行相關檔案的操作

如下 public class listallfileactivity extends listactivity private void initfilelist private void fill file files arrayadapteradapter new arrayadapter l...

讀 寫SD上的檔案請按如下步驟進行

1 呼叫environment的getexternalstoragestate 方法判斷手機上是否插入了sd卡,並且應用程式具有讀寫sd卡的許可權。例如使用如下 2 呼叫environment的getexternalstoragedirectory 方法來獲取外部儲存器,也就是sd卡的目錄。3 使用...