<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

  通過(guò)減少寄存器間的邏輯延時(shí)來(lái)提高工作頻率,或通過(guò)流水線(xiàn)設計來(lái)優(yōu)化數據處理時(shí)的數據通路來(lái)滿(mǎn)足高速下FPGA或CPLD中的狀態(tài)機設計要求。本文給出了采用這些技術(shù)的高速狀態(tài)機設計的規范及分析和優(yōu)化,并給出了相應的示例。

本文引用地址:http://dyxdggzs.com/article/192055.htm

  為了使FPGA或CPLD中的狀態(tài)機設計滿(mǎn)足高速要求,設計工程師需要認識到以下幾點(diǎn):寄存器資源和邏輯資源已經(jīng)不是問(wèn)題的所在,狀態(tài)機本身所占用的 FPGA或CPLD邏輯資源或寄存器資源非常??;狀態(tài)機對整體數據流的是串行操作,如果希望數據處理的延時(shí)非常小,就必須提高操作的并行程度,壓縮狀態(tài)機中狀態(tài)轉移的路徑長(cháng)度;高速環(huán)境下應合理分配狀態(tài)機的狀態(tài)及轉移條件。本文將結合實(shí)際應用案例來(lái)說(shuō)明。

  狀態(tài)機設計規范

  1. 使用一位有效的方式進(jìn)行狀態(tài)編碼

  狀態(tài)機中狀態(tài)編碼主要有三種:連續編碼(sequential encoding)、一位有效(one-hot encoding)方式編碼以及不屬于這兩種的編碼。例如,對于一個(gè)5個(gè)狀態(tài)(State0~State4)的狀態(tài)機,連續編碼方式狀態(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)位直接作為輸出所需信號,這可能會(huì )增加設計難度。

  使用一位有效編碼方式使邏輯實(shí)現更簡(jiǎn)潔,因為一個(gè)狀態(tài)只需要用一位來(lái)指示,而為此增加的狀態(tài)寄存器數目相對于整個(gè)設計來(lái)說(shuō)可以忽略。一位有效至少有兩個(gè)含義:對每個(gè)狀態(tài)位,該位為1對應唯一的狀態(tài),判斷當前狀態(tài)是否為該狀態(tài),只需判斷該狀態(tài)位是否為1;如果狀態(tài)寄存器輸入端該位為1,則下一狀態(tài)將轉移為該狀態(tài),判斷下一狀態(tài)是否為該狀態(tài),只需判斷表示下一狀態(tài)的信號中該位是否為1。

  2. 合理分配狀態(tài)轉移條件

  在狀態(tài)轉移圖中,每個(gè)狀態(tài)都有對應的出線(xiàn)和入線(xiàn),從不同狀態(tài)經(jīng)不同的轉移條件到該狀態(tài)的入線(xiàn)數目不能太多。以采用與或邏輯的CPLD設計來(lái)分析,如果這樣的入線(xiàn)太多則將會(huì )需要較多的乘積項及或邏輯,這就需要更多級的邏輯級聯(lián)來(lái)完成,從而增加了寄存器間的延遲;對于FPGA則需要多級查找表來(lái)實(shí)現相應的邏輯,同樣會(huì )增加延遲。狀態(tài)機的應用模型如圖1所示。

狀態(tài)機的應用模型

  狀態(tài)機設計的分析

  狀態(tài)機設計的分析方法可以分為兩種:一種是流程處理分析,即分析數據如何分步處理,將相應處理的步驟依次定為不同狀態(tài),該方法能夠分析非常復雜的狀態(tài)機,類(lèi)似于編寫(xiě)一個(gè)軟件程序的分析,典型設計如讀寫(xiě)操作和數據包字節分析;另一種方法是關(guān)鍵條件分析,即根據參考信號的邏輯條件來(lái)確定相應的狀態(tài),這樣的參考信號如空或滿(mǎn)指示、起始或結束、握手應答信號等。這兩種分析方法并沒(méi)有嚴格的界限,在實(shí)際的狀態(tài)機設計分析時(shí)往往是這兩種方法結合使用。下面分別說(shuō)明這兩種分析方法。

  1. 流程處理分析

  例如,在一個(gè)讀取ZBT SRAM中數據包的設計中,要根據讀出的數據中EOP(End of Packet)信號是否為1來(lái)決定一個(gè)包的讀操作是否結束,由于讀取數據的延后,這樣就會(huì )從ZBT SRAM中多讀取數據,為此可以設計一個(gè)信號VAL_out來(lái)過(guò)濾掉多讀的數據。

  根據數據到達的先后及占用的時(shí)鐘周期數,可以設計如圖2所示的狀態(tài)機(本文設定:文字說(shuō)明及插圖中當前狀態(tài)表示為s_State[n:0],為狀態(tài)寄存器的輸出;下一狀態(tài)next_State[n:0],為狀態(tài)寄存器的輸入;信號之間的邏輯關(guān)系采用Verilog語(yǔ)言(或C語(yǔ)言)中的符號表示;#R表示需要經(jīng)過(guò)一級寄存器,輸出信號對應寄存器的輸出端)。該狀態(tài)機首先判斷是否已經(jīng)到達包尾,如果是,則依次進(jìn)入6個(gè)等待狀態(tài),等待狀態(tài)下的數據無(wú)效,6個(gè)等待狀態(tài)結束后將正常處理數據。

狀態(tài)機

  2. 關(guān)鍵條件分析

  一個(gè)路由器線(xiàn)卡高速數據包分發(fā)處理的框圖,較高速率的數據包經(jīng)過(guò)分發(fā)模塊以包為單位送往兩個(gè)較低速率數據通路(即寫(xiě)入FIFO1或FIFO2)。


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

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>