同步設(shè)計(jì)的最大頻率由最長的時(shí)序路徑的延遲決定。然而,在復(fù)雜的高頻設(shè)計(jì)中,可能存在一些路徑,其傳播延遲大于最大工作時(shí)鐘頻率的周期。如果不要求信號在一個(gè)時(shí)鐘周期內(nèi)傳播到下一個(gè)時(shí)序,則需要實(shí)施適當(dāng)?shù)脑O(shè)計(jì)技術(shù)以使其成為有效的多周期路徑。時(shí)序電路中的多周期路徑是一種組合路徑,它不必在一個(gè)時(shí)鐘周期內(nèi)完成信號沿的傳播。對于 N 的多周期路徑,設(shè)計(jì)應(yīng)確保信號轉(zhuǎn)換在 N 個(gè)時(shí)鐘周期內(nèi)從源端傳播到目的端。因此,如果系統(tǒng)的最長路徑是多周期路徑,則它不會限制系統(tǒng)的運(yùn)行頻率。下面描述了一些常見的多循環(huán)路徑設(shè)計(jì)。
二倍多周期路徑(2倍MCP)
如果在高頻系統(tǒng)中,兩個(gè)相互通信的子模塊以 1:2 的時(shí)鐘比運(yùn)行,并且不需要在更快時(shí)鐘的一個(gè)時(shí)鐘周期內(nèi)捕獲源信號轉(zhuǎn)換,則可以實(shí)現(xiàn)二倍多周期處理情況。
在上述電路中,數(shù)據(jù)從觸發(fā)器 D1 啟動并由運(yùn)行速度比啟動觸發(fā)器的時(shí)鐘快兩倍的觸發(fā)器捕獲,是 clk 的半周期路徑或 clk_2x 的單周期路徑。如果兩者之間的組合邏輯的傳播延遲很大,那么可能無法滿足這個(gè)半周期路徑的時(shí)序。如果不要求輸入數(shù)據(jù)在 2x 時(shí)鐘的下一個(gè)正沿捕獲,則需要引入適當(dāng)?shù)碾娐穪矸艑挄r(shí)序要求。
在上述電路中,F(xiàn)3 的輸出用于啟用捕獲門復(fù)用器。捕獲門使能 (F3.Q) 確保 F1_reg->F2_reg 作為與 clk_fast(clk_2x) 相關(guān)的兩個(gè)多周期路徑。當(dāng)數(shù)據(jù)信號從 clk_2x -> clk 交叉時(shí),可以實(shí)現(xiàn)類似的電路。
在上述電路中,假設(shè) clk_fast 和 clock_slow 的第一個(gè)上升沿總是同時(shí)發(fā)生并保持對齊。比例大于2:1時(shí)可設(shè)計(jì)復(fù)雜高效的“capture_gate enable”電路
N倍多周期路徑(N倍MCP)
上述電路是從 D1_reg->D2_reg 的 n-1 個(gè)周期的 Multi cycle 路徑。當(dāng)輸入數(shù)據(jù)在 M1 多路復(fù)用器輸入處變?yōu)橛行r(shí),狀態(tài)機(jī) (FSM) 會在一個(gè)時(shí)鐘周期內(nèi)生成一個(gè)脈沖。數(shù)據(jù)在下一個(gè)周期被 D1 觸發(fā)器捕獲。脈沖通過由“n”個(gè)觸發(fā)器組成的移位寄存器傳播,并且在“n-1”個(gè)時(shí)鐘周期之后,M2 多路復(fù)用器將使輸入數(shù)據(jù)到達(dá) D2 觸發(fā)器。下一個(gè)周期它將被 D2 觸發(fā)器捕獲。這樣可以放寬時(shí)序以補(bǔ)償 D1 和 D2 觸發(fā)器之間存在的組合邏輯的巨大傳播延遲。
在上面的時(shí)序圖中,N 等于 3。因此從 D1_reg -> D2_reg 的路徑可以限制為 MCP 為 2。
外設(shè)讀/寫接口的多周期路徑
在一些低性能、低帶寬的外設(shè)寄存器讀/寫接口中,數(shù)據(jù)傳輸發(fā)生在兩個(gè)階段。此傳輸?shù)牡谝粋€(gè)周期稱為設(shè)置階段。在此階段,ADDR、DATA(寫入時(shí))和其他控制信號在外設(shè)邊界處變?yōu)橛行?。在下一個(gè)時(shí)鐘沿,模塊使能信號被置位,指示讀/寫傳輸?shù)牡诙A段。地址和數(shù)據(jù)信號在 ENABLE 周期結(jié)束時(shí)被外設(shè)鎖存,因此為 ADDR 和 DATA 信號提供額外的一個(gè)周期余量以到達(dá)外設(shè)邊界。
寫周期
在數(shù)據(jù)寫入周期地址線和寫入數(shù)據(jù)總線在第 2 個(gè)時(shí)鐘沿(T2 周期開始)生效,并且在第 4 個(gè)時(shí)鐘沿(T4 周期開始)由外設(shè)寫入。讓我們考慮源寄存器的命名為 PERIPH_BUS_CONTROLLER_ADDR_reg , PERIPH_BUS_CONTROLLER_WDATA_reg 和目標(biāo)寄存器是 PERIPH_WDATA_CAPT_reg。
寫入周期為 2 的 MCP 可應(yīng)用于以下路徑:
PERIPH_BUS_CONTROLLER_ADDR_reg -> PERIPH_WDATA_CAPT_reg PERIPH_BUS_CONTROLLER_WDATA_reg -> PERIPH_WDATA_CAPT_reg
PERIPH_BUS_CONTROLLER_SEL_reg -> PERIPH_WDATA_CAPT_reg
讀周期
類似地,對于讀取傳輸,外設(shè)的地址在第 2 個(gè)時(shí)鐘沿變?yōu)橛行?,并且外設(shè)在 T3 周期將有效數(shù)據(jù)放在讀取數(shù)據(jù)總線上,因此讀取數(shù)據(jù)在第 4 個(gè)時(shí)鐘沿變?yōu)橛行?。這里源寄存器是PERIPH_BUS_CONTROLLER_ADDR_reg,目的寄存器是PERIPH_BUS_CONTROLLER_RDATA_CAPT_reg。
讀取周期的 MCP 為 2:
PERIPH_BUS_CONTROLLER_ADDR_reg -> PERIPH_BUS_CONTROLLER_RDATA_CAPT_reg。
PERIPH_BUS_CONTROLLER_SEL_reg -> PERIPH_BUS_CONTROLLER_RDATA_CAPT_reg。
Amba 外設(shè)總線就是這樣一種接口,它有兩個(gè)周期訪問外設(shè)。
多周期訪問慢速外設(shè)
在高性能外圍總線中,數(shù)據(jù)讀/寫訪問發(fā)生在一個(gè)周期內(nèi)。然而,在該系統(tǒng)中,如果某些外圍設(shè)備不需要像整個(gè)系統(tǒng)那樣運(yùn)行得更快,它可以通過向外圍總線控制器斷言等待狀態(tài)來創(chuàng)建每個(gè)讀/寫訪問作為多周期訪問。
在上面的示例中,外圍設(shè)備以該系統(tǒng)時(shí)鐘頻率的一半運(yùn)行。已放置一個(gè)墊片,以便為每個(gè)讀/寫訪問為外圍總線控制器生成一個(gè)循環(huán)等待狀態(tài)。在沒有任何等待狀態(tài)(用于快速訪問)的情況下,總線控制器將在 sys_clk 的一個(gè)周期內(nèi)保持地址、控制和數(shù)據(jù)信號(用于寫入)有效。在對慢速外設(shè)進(jìn)行讀/寫訪問期間,墊片生成一個(gè)周期的等待狀態(tài)(圖中的“transfer_wait”),該周期將 ADDR、DATA 和控制信號擴(kuò)展為 sys_clk 的另一個(gè)周期。
地址和寫入數(shù)據(jù)在外設(shè)邊界處的 sys_clk 的第 3 個(gè)邊沿變?yōu)橛行?。?dāng) periph_module_en 被墊片斷言時(shí),外設(shè)在 sys_clk 的第 5 個(gè)邊沿(periph clk 的第 3 個(gè)邊沿)鎖存地址和寫入數(shù)據(jù)總線。因此,對該外設(shè)的寫訪問相對于系統(tǒng)時(shí)鐘 (sys_clk) 的 MCP 為 2。
在讀操作期間,外設(shè)將有效數(shù)據(jù)放在讀數(shù)據(jù)總線上,在系統(tǒng)時(shí)鐘的第 5 個(gè)有效時(shí)鐘沿由主設(shè)備捕獲。因此,從 bus_controller_address_reg 生成并終止于“bus_controller_read_data_capt_reg”的路徑的 MCP 為 2。
路徑源自 periph_module_en 生成寄存器并終止于外設(shè)。
寫入數(shù)據(jù)捕捉寄存器或bus_controller_read_data捕捉寄存器仍然是periph_clk的半周期路徑或sys_clk的單周期路徑。同樣從transfer_wait生成寄存器到bus_controller的路徑也是periph_clk的半周期路徑或sys_clk的單周期路徑。
設(shè)計(jì)正確的錯(cuò)誤或多周期路徑并在時(shí)序分析期間使用約束有助于關(guān)閉高頻系統(tǒng)的時(shí)序。同時(shí),提供錯(cuò)誤的約束可能導(dǎo)致設(shè)備的災(zāi)難性故障。設(shè)計(jì)人員在為綜合或時(shí)序分析設(shè)計(jì)或提供約束時(shí)應(yīng)該非常小心。