新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 高速環(huán)境下的狀態(tài)機(jī)設(shè)計(jì)和優(yōu)化方法

高速環(huán)境下的狀態(tài)機(jī)設(shè)計(jì)和優(yōu)化方法

作者: 時(shí)間:2009-05-12 來源:網(wǎng)絡(luò) 收藏

  對(duì)于分發(fā)模塊設(shè)計(jì),關(guān)鍵參考信號(hào)是EOP及快滿信號(hào)AF1、AF2,參考EOP可以實(shí)現(xiàn)每次處理一個(gè)包,參考AF1、AF2信號(hào)可以決定相應(yīng)的包該往哪個(gè) FIFO中寫入。分發(fā)算法為:FIFO1未滿(AF1=0),數(shù)據(jù)包將寫入FIFO1;如果FIFO1將滿且FIFO2未滿(AF1=1,且 AF2=0),則下一數(shù)據(jù)包將寫入FIFO2;如果FIFO1、FIFO2都將滿(AF1=1且AF2=1),則進(jìn)入丟包狀態(tài)。UseFifo1狀態(tài)下數(shù)據(jù)包將寫入FIFO1,UseFifo2狀態(tài)下數(shù)據(jù)包將寫入FIFO2,丟包狀態(tài)下數(shù)據(jù)包被丟棄,提供丟包計(jì)數(shù)

使能 DropCountEnable。

  狀態(tài)機(jī)的進(jìn)一步優(yōu)化

  1. 利用一位有效編碼方式

  如前所述,狀態(tài)機(jī)的工作頻率跟狀態(tài)機(jī)中各個(gè)狀態(tài)對(duì)應(yīng)的不同轉(zhuǎn)移條件的入線數(shù)目有關(guān)。如果到一個(gè)狀態(tài)的轉(zhuǎn)移條件相同但入線數(shù)非常多,其邏輯實(shí)現(xiàn)很可能并不復(fù)雜。在一位有效編碼方式下,對(duì)于某個(gè)狀態(tài),如果其他所有狀態(tài)經(jīng)相同的轉(zhuǎn)移條件到該狀態(tài),那么其邏輯實(shí)現(xiàn)可以很好地化簡(jiǎn)。

  例4:一位有效編碼方式下狀態(tài)位s_State[n:0]中,

  s_State[1] | s_State[2] | ... | s_State[n]=1與 s_State[0]=1等價(jià),那么

  next_State[0]=(s_State[0]S) | (s_State[1]T) | (s_State[2]T) | ... | (s_State[n]) 可以化簡(jiǎn)為:

  next_State[0]=(s_State[0]S) | ((~s_State[0])T),右端輸入信號(hào)數(shù)目大大減少。

  2. 利用寄存器的使能信號(hào)

  多數(shù)FPGA或CPLD寄存器提供使能端,如果所有的狀態(tài)機(jī)轉(zhuǎn)移必須至少滿足某個(gè)條件,那么這個(gè)條件可以通過使能信號(hào)連接實(shí)現(xiàn),從而可以降低寄存器輸入端的邏輯復(fù)雜度。如上例中不同狀態(tài)間轉(zhuǎn)移必須以EOP為1作為前提,因而可以將該信號(hào)作為使能信號(hào)來設(shè)計(jì)。

  3. 結(jié)合所選FPGA或CPLD內(nèi)部邏輯單元結(jié)構(gòu)編寫代碼

  以Xilinx FPGA為例,一個(gè)單元內(nèi)2個(gè)4輸入查找表及相關(guān)配置邏輯可以實(shí)現(xiàn)5個(gè)信號(hào)輸入的最復(fù)雜的邏輯,或8~9個(gè)信號(hào)的簡(jiǎn)單邏輯(例如全與或者全或),延時(shí)為一級(jí)查找表及配置邏輯延時(shí);如果將相鄰單元的4個(gè)4輸入查找表輸出連接到一個(gè)4輸入查找表,那么可以實(shí)現(xiàn)最復(fù)雜的6輸入邏輯,此時(shí)需要兩級(jí)查找表延時(shí)及相關(guān)配置邏輯延時(shí)。更復(fù)雜的邏輯需要更多的級(jí)連來實(shí)現(xiàn)。針對(duì)高速狀態(tài)機(jī)的情況,可以盡量將狀態(tài)寄存器輸入端的邏輯來源控制在7個(gè)信號(hào)以內(nèi),從而自主控制查找表的級(jí)連級(jí)數(shù),提高設(shè)計(jì)的工作頻率。

  4. 通過修改狀態(tài)機(jī)

  如果一個(gè)狀態(tài)機(jī)達(dá)不到工作頻率要求,則必須根據(jù)延時(shí)最大路徑修改設(shè)計(jì),通常的辦法有:改變狀態(tài)設(shè)置,添加新狀態(tài)或刪除某些狀態(tài),簡(jiǎn)化轉(zhuǎn)移條件及單個(gè)狀態(tài)連接的轉(zhuǎn)移數(shù)目;修改轉(zhuǎn)移條件設(shè)置,包括改變轉(zhuǎn)移條件的組合,以及將復(fù)雜的邏輯改為分級(jí)經(jīng)寄存器輸出由寄存器信號(hào)再形成的邏輯,后者將會(huì)改變信號(hào)時(shí)序,因而可能需要改變狀態(tài)設(shè)置。

  5. 使用并行邏輯

  很多情況下要參考的關(guān)鍵信號(hào)可能非常多,如果參考這些關(guān)鍵信號(hào)直接設(shè)計(jì)狀態(tài)機(jī)所得到的結(jié)果可能很復(fù)雜,個(gè)別狀態(tài)的出線或入線將會(huì)非常多,因而將降低工作頻率??梢钥紤]通過設(shè)計(jì)并行邏輯來提供狀態(tài)機(jī)的關(guān)鍵信號(hào)以及所需的中間結(jié)果,狀態(tài)機(jī)負(fù)責(zé)維護(hù)并行邏輯以及產(chǎn)生數(shù)據(jù)處理的流程。并行邏輯應(yīng)分級(jí)設(shè)計(jì),級(jí)間為寄存器,從而減少寄存器到寄存器的延時(shí)。

  該設(shè)計(jì)用于使用單一數(shù)據(jù)總線將FIFO1~4中的數(shù)據(jù)發(fā)送到4個(gè)數(shù)據(jù)通路上去,該設(shè)計(jì)中并行邏輯產(chǎn)生每次操作時(shí)的通路及 FIFO選擇結(jié)果,狀態(tài)機(jī)負(fù)責(zé)控制每次操作的流程:在“Idle”狀態(tài)下,如果FIFO1~4中有數(shù)據(jù)包供讀取,則進(jìn)入“Schedule”狀態(tài);獲得調(diào)度結(jié)果后“Schedule”經(jīng)過一個(gè)“Wait”狀態(tài),然后進(jìn)入“ReadData”狀態(tài)讀取數(shù)據(jù),同時(shí)開始計(jì)數(shù),計(jì)數(shù)到達(dá)所指定數(shù)值或者讀到數(shù)據(jù)包尾時(shí)進(jìn)入空閑狀態(tài)“Idle”,依次循環(huán)下去。

  流水線設(shè)計(jì)

  流水線(Pipelining)設(shè)計(jì)是將一個(gè)時(shí)鐘周期內(nèi)執(zhí)行的邏輯操作分成幾步較小的操作,并在較高速時(shí)鐘下完成。如果它的Tpd為T,則該電路最高時(shí)鐘頻率為1/T,而假設(shè)每部分的Tpd為T/3,則其時(shí)鐘頻率可提高到原來的3倍,因而單位時(shí)間內(nèi)的數(shù)據(jù)流量可以達(dá)到原來的三倍。代價(jià)是輸出信號(hào)相對(duì)于輸入滯后3個(gè)周期,時(shí)序有所改變(輸出信號(hào)的總延時(shí)一樣,但數(shù)據(jù)吞吐量提高了),同時(shí)增加了寄存器資源,而FPGA具有豐富的寄存器資源。

  本文所強(qiáng)調(diào)的通過減少寄存器間的邏輯延時(shí)來提高狀態(tài)機(jī)的工作頻率,與流水線設(shè)計(jì)的出發(fā)點(diǎn)一樣,不同的是流水線所強(qiáng)調(diào)的是數(shù)據(jù)處理時(shí)的數(shù)據(jù)通路優(yōu)化,而本文所強(qiáng)調(diào)的是狀態(tài)機(jī)中控制邏輯的優(yōu)化。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 環(huán)境 方法

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉