高速環(huán)境下的狀態(tài)機設計和優(yōu)化方法
通過減少寄存器間的邏輯延時來提高工作頻率,或通過流水線設計來優(yōu)化數(shù)據(jù)處理時的數(shù)據(jù)通路來滿足高速環(huán)境下FPGA或CPLD中的狀態(tài)機設計要求。本文給出了采用這些技術的高速環(huán)境狀態(tài)機設計的規(guī)范及分析方法和優(yōu)化方法,并給出了相應的示例。
本文引用地址:http://2s4d.com/article/192055.htm為了使FPGA或CPLD中的狀態(tài)機設計滿足高速環(huán)境要求,設計工程師需要認識到以下幾點:寄存器資源和邏輯資源已經(jīng)不是問題的所在,狀態(tài)機本身所占用的 FPGA或CPLD邏輯資源或寄存器資源非常?。粻顟B(tài)機對整體數(shù)據(jù)流的是串行操作,如果希望數(shù)據(jù)處理的延時非常小,就必須提高操作的并行程度,壓縮狀態(tài)機中狀態(tài)轉(zhuǎn)移的路徑長度;高速環(huán)境下應合理分配狀態(tài)機的狀態(tài)及轉(zhuǎn)移條件。本文將結合實際應用案例來說明。
狀態(tài)機設計規(guī)范
1. 使用一位有效的方式進行狀態(tài)編碼
狀態(tài)機中狀態(tài)編碼主要有三種:連續(xù)編碼(sequential encoding)、一位有效(one-hot encoding)方式編碼以及不屬于這兩種的編碼。例如,對于一個5個狀態(tài)(State0~State4)的狀態(tài)機,連續(xù)編碼方式狀態(tài)編碼為:State0-000、State1-001、State2-010、State3-011、State4-100。一位有效方式為下為:State0-00001、State1-00010、State2-00100、State3-01000、State4-10000。對于自行定義的編碼則差別很大,例如試圖將狀態(tài)機的狀態(tài)位直接作為輸出所需信號,這可能會增加設計難度。
使用一位有效編碼方式使邏輯實現(xiàn)更簡潔,因為一個狀態(tài)只需要用一位來指示,而為此增加的狀態(tài)寄存器數(shù)目相對于整個設計來說可以忽略。一位有效至少有兩個含義:對每個狀態(tài)位,該位為1對應唯一的狀態(tài),判斷當前狀態(tài)是否為該狀態(tài),只需判斷該狀態(tài)位是否為1;如果狀態(tài)寄存器輸入端該位為1,則下一狀態(tài)將轉(zhuǎn)移為該狀態(tài),判斷下一狀態(tài)是否為該狀態(tài),只需判斷表示下一狀態(tài)的信號中該位是否為1。
2. 合理分配狀態(tài)轉(zhuǎn)移條件
在狀態(tài)轉(zhuǎn)移圖中,每個狀態(tài)都有對應的出線和入線,從不同狀態(tài)經(jīng)不同的轉(zhuǎn)移條件到該狀態(tài)的入線數(shù)目不能太多。以采用與或邏輯的CPLD設計來分析,如果這樣的入線太多則將會需要較多的乘積項及或邏輯,這就需要更多級的邏輯級聯(lián)來完成,從而增加了寄存器間的延遲;對于FPGA則需要多級查找表來實現(xiàn)相應的邏輯,同樣會增加延遲。狀態(tài)機的應用模型如圖1所示。
狀態(tài)機設計的分析方法
狀態(tài)機設計的分析方法可以分為兩種:一種是流程處理分析,即分析數(shù)據(jù)如何分步處理,將相應處理的步驟依次定為不同狀態(tài),該方法能夠分析非常復雜的狀態(tài)機,類似于編寫一個軟件程序的分析,典型設計如讀寫操作和數(shù)據(jù)包字節(jié)分析;另一種方法是關鍵條件分析,即根據(jù)參考信號的邏輯條件來確定相應的狀態(tài),這樣的參考信號如空或滿指示、起始或結束、握手應答信號等。這兩種分析方法并沒有嚴格的界限,在實際的狀態(tài)機設計分析時往往是這兩種方法結合使用。下面分別說明這兩種分析方法。
1. 流程處理分析
例如,在一個讀取ZBT SRAM中數(shù)據(jù)包的設計中,要根據(jù)讀出的數(shù)據(jù)中EOP(End of Packet)信號是否為1來決定一個包的讀操作是否結束,由于讀取數(shù)據(jù)的延后,這樣就會從ZBT SRAM中多讀取數(shù)據(jù),為此可以設計一個信號VAL_out來過濾掉多讀的數(shù)據(jù)。
根據(jù)數(shù)據(jù)到達的先后及占用的時鐘周期數(shù),可以設計如圖2所示的狀態(tài)機(本文設定:文字說明及插圖中當前狀態(tài)表示為s_State[n:0],為狀態(tài)寄存器的輸出;下一狀態(tài)next_State[n:0],為狀態(tài)寄存器的輸入;信號之間的邏輯關系采用Verilog語言(或C語言)中的符號表示;#R表示需要經(jīng)過一級寄存器,輸出信號對應寄存器的輸出端)。該狀態(tài)機首先判斷是否已經(jīng)到達包尾,如果是,則依次進入6個等待狀態(tài),等待狀態(tài)下的數(shù)據(jù)無效,6個等待狀態(tài)結束后將正常處理數(shù)據(jù)。
2. 關鍵條件分析
一個路由器線卡高速數(shù)據(jù)包分發(fā)處理的框圖,較高速率的數(shù)據(jù)包經(jīng)過分發(fā)模塊以包為單位送往兩個較低速率數(shù)據(jù)通路(即寫入FIFO1或FIFO2)。
評論