在FPGA設(shè)計中,我們經(jīng)常會碰到這樣的情形:從快時鐘域到慢時鐘域完成位寬轉(zhuǎn)換,這時,這兩個時鐘是同步的。例如:源時鐘是400MHz,數(shù)據(jù)位寬為4;目的時鐘為200MHz,數(shù)據(jù)位寬為8,這樣源時鐘域和目的時鐘域的吞吐率是一致的。這種位寬轉(zhuǎn)換可直接通過寄存器采樣實現(xiàn),時序關(guān)系如下圖所示。
圖中Source為源時鐘域(400MHz)4位數(shù)據(jù),L0代碼0號數(shù)據(jù)的低4位,H0代表0號數(shù)據(jù)的高4位,L1代表1號數(shù)據(jù)的低4位,H1代表1號數(shù)據(jù)的高4位,依此類推。Delay1為源時鐘域經(jīng)一級流水寄存器的輸出結(jié)果。Destination為目的時鐘域(200MHz)8位數(shù)據(jù)。
我們很容易搭建此電路,如下圖所示。圖中綠色計數(shù)器為400MHz時鐘域計數(shù)器,產(chǎn)生源端4位數(shù)據(jù),藍(lán)色模塊為源端流水寄存器,紅色模塊為目的端采樣寄存器。
在這種情況下,能否使用多周期路徑約束呢?這里我們看一下數(shù)據(jù)的發(fā)起沿和捕獲沿的位置,如下圖所示。圖中紅色方框為數(shù)據(jù)發(fā)起沿(400MHz),綠色方框(黃色標(biāo)記線所在位置)為捕獲沿,兩者相差一個400MHz時鐘對應(yīng)的時鐘周期。因此,并不滿足多周期規(guī)則。這時,我們只用做常規(guī)的時鐘周期約束即可,工具會自動將這里的跨時鐘域按400MHz進(jìn)行約束。
那么快時鐘域到慢時鐘域在什么情況下可以用多周期路徑進(jìn)行約束呢?本質(zhì)上,多周期路徑是指數(shù)據(jù)的采樣率(SampleRate)是按慢時鐘域的速率進(jìn)行變化,其變化周期在慢時鐘域是單周期(一個時鐘周期變化一次),而在快時鐘域是多周期(多個時鐘周期變化一次)。滿足這種情形就可以判斷為多周期路徑。
有時在設(shè)計中會有測試模塊,或者出現(xiàn)這樣的狀況:模塊1和模塊2都工作在相同的時鐘下,該時鐘會根據(jù)設(shè)計的需要頻率會發(fā)生變化,但無論怎么變化模塊2只要滿足最低時鐘頻率的要求即可。因此,這時可對模塊2放松時序要求。只按照最低時鐘頻率約束即可。問題是只要定義了全局時鐘(通過create_clock創(chuàng)建),該時鐘就會在模塊2中發(fā)生作用。如何覆蓋這個約束呢?如果仍通過create_clock創(chuàng)建時鐘,選項-period的值為時鐘周期最大值(對應(yīng)最低頻率),但以模塊2作為頂層,指定該約束針對的對象為模塊2是否可行呢?答案是否定的,因為這時時序分析工具會把BUFG作為時鐘的起點,而不是把全局時鐘管腳作為起點。
一種可行的方法是用set_max_delay,其對象是模塊2內(nèi)的所有時序單元(模塊2內(nèi)只有一個時鐘),采用如下方式約束。第一條Tcl命令用于獲取模塊2內(nèi)所有的時序單元。
這時就可以看到時鐘的起點是期望的位置了。這里可以看到set_max_delay的一個用法就是覆蓋create_clock創(chuàng)建的約束。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1643文章
21960瀏覽量
614061 -
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
428瀏覽量
27143 -
寄存器
+關(guān)注
關(guān)注
31文章
5421瀏覽量
123324 -
時鐘
+關(guān)注
關(guān)注
11文章
1879瀏覽量
132840
原文標(biāo)題:這兩種情形該怎么約束
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
大家看看這兩種電路接法對嗎?哪個好點?
請問TPS74201和TPS74301這兩種LDO的主要區(qū)別是什么?
多路電子負(fù)載在這兩種電源測試中的優(yōu)勢是什么
如何使HDMI和VGA這兩種接口互連?
常見的ARM架構(gòu)分為兩種一種是M系列另外一種是A系列,這兩種有什么區(qū)別啊?
終于看懂了iic與spi這兩種通訊協(xié)議了

FPGA中的時序約束設(shè)計

FPGA時序約束分析余量

Vivado進(jìn)行時序約束的兩種方式

評論