基于RTL綜合策略的狀態(tài)機優(yōu)化方案
有限狀態(tài)機及其設(shè)計技術(shù)是數(shù)字系統(tǒng)設(shè)計中的重要組成部分,是實現(xiàn)高效率、高可靠性邏輯控制的重要途徑。大部分?jǐn)?shù)字系統(tǒng)都可以劃分為控制單元和數(shù)據(jù)單元兩個組成部分。通常,控制單元的主體是一個狀態(tài)機,它接收外部信號以及數(shù)據(jù)單元產(chǎn)生的狀態(tài)信息,產(chǎn)生控制信號序列。狀態(tài)機性能的好壞對系統(tǒng)性能有較大的影響。良好的狀態(tài)機的實現(xiàn)不僅與狀態(tài)機的設(shè)計有關(guān),而且與采用的綜合策略密切相關(guān),不同的綜合策略對最終實現(xiàn)的狀態(tài)機的性能有很大的影響。
本文引用地址:http://butianyuan.cn/article/187024.htmSynopsys公司的DC (Design Compiler,設(shè)計編譯程序)提供了針對狀態(tài)機的綜合優(yōu)化策略,這個過程既可以完全自動進行,也可以手工進行。本文論述了兩種綜合策略的實現(xiàn)。
1 狀態(tài)機的基礎(chǔ)描述
從數(shù)學(xué)的角度看,有限狀態(tài)機可以表示為一個五元組M = (I, O, S,δ,λ) 。其中: I和O 分別表示輸入、輸出量; S 為狀態(tài)向量;δ為次態(tài)方程(δ: S ×I) ;λ為輸出方程(λ: S ×I) 。
從實際狀態(tài)機的實現(xiàn)角度出發(fā),根據(jù)輸出方程,有限狀態(tài)機可以分為3類:
a) 輸出是狀態(tài)向量和輸入的函數(shù)———Mealy型狀態(tài)機(λ: S ×I →O ) ;
b) 輸出僅是狀態(tài)向量的函數(shù)———Moore 型狀態(tài)機(λ: S →O ) ;
c) 輸出等于狀態(tài)向量———狀態(tài)輸出型狀態(tài)機(λ: S = O ) 。
在實際中最常用的狀態(tài)機是Mealy型和Moore型狀態(tài)機。
從電路的角度看,有限狀態(tài)機是由觸發(fā)器、寄存器和組合邏輯組合成的系統(tǒng),圖1展示了有限狀態(tài)機的一般結(jié)構(gòu):一組保存狀態(tài)向量的觸發(fā)器,產(chǎn)生次狀態(tài)和輸出的組合邏輯。
圖1 有限狀態(tài)機一般結(jié)構(gòu)
1.1 狀態(tài)表
為了采用DC的有限狀態(tài)機優(yōu)化策略,必須首先把原始的狀態(tài)機轉(zhuǎn)換為用DC狀態(tài)表描述的格式,這種轉(zhuǎn)換可以自動完成,也可以手動完成。Synopsys的狀態(tài)表提供了一種簡單的、獨立于工藝的有限狀態(tài)機描述方式。下面是一個狀態(tài)表的例子
# State table body
Input PresentNextOutput
Value State State Values
0 RESET RESET 00
1 RESET STATE1 01
0 STATE1 RESET 10
1 STATE1 STATE1 11
# Preferred state encoding
.encoding
RESET 2#00
STATE1 2#01
狀態(tài)表的主體由行組成,每一行描述狀態(tài)機的一個特定的狀態(tài)轉(zhuǎn)換。每行有4列:輸入值,當(dāng)前態(tài),次態(tài),輸出值。有的輸入可以引發(fā)狀態(tài)轉(zhuǎn)換,有的則不會。從狀態(tài)表可以很容易看出狀態(tài)機的轉(zhuǎn)換行為。狀態(tài)表還可以包含一個可選的部分,用于給出首選的狀態(tài)編碼,這些狀態(tài)編碼可以以十進制、二進制或者十六進制給出。
例子中的狀態(tài)表包括: 1個輸入; 2個狀態(tài),即RESET和STATE1; 4種輸出,即RESET和STATE1分別編碼為0 和1。RESET態(tài)只在輸入為1 時轉(zhuǎn)換到STATE1態(tài),輸出變?yōu)?1,而STATE1態(tài)只在輸入為0時轉(zhuǎn)換到RESET態(tài),輸出變?yōu)?0。
例子中所有可能的輸入輸出和狀態(tài)組合都被用到了,如果狀態(tài)機用到的狀態(tài)少于可用的編碼,便可以創(chuàng)建只包含所需要使用的狀態(tài)轉(zhuǎn)換的狀態(tài)表,其他未指明的狀態(tài)則按不關(guān)心態(tài)處理。
1.2 狀態(tài)向量
狀態(tài)向量是描述狀態(tài)機的元素之一,是通過觸發(fā)器實例名稱的有序列表來指定的。指定的觸發(fā)器存儲了有序的位模式,這些位模式定義了有限狀態(tài)機在任何給定時刻的當(dāng)前狀態(tài)。一個特定的觸發(fā)器位模式與一個狀態(tài)相對應(yīng)。例如, ff1、ff2、ff3是觸發(fā)器的實例名稱,則列表{ ff1 ff2 ff3}定義了一個3位的狀態(tài)向量,這個狀態(tài)向量可以表示不多于8個狀態(tài)的有限狀態(tài)機。
1.3 狀態(tài)編碼
狀態(tài)編碼是描述狀態(tài)機的另一個元素。有限狀態(tài)機的狀態(tài)編碼用符號定義了狀態(tài)機的所有合法狀態(tài)的位編碼。編碼確定哪些狀態(tài)向量的位模式代表合法狀態(tài),哪些位模式可以當(dāng)作不關(guān)心態(tài)。不關(guān)心態(tài)提高了工具達到好的優(yōu)化結(jié)果的可能性。大多數(shù)以HDL (硬件描述語言)或狀態(tài)表給出的設(shè)計,DC可以直接從代碼中提取出狀態(tài)編碼。在工具不能得到狀態(tài)編碼時要使用命令set_fsm_encoding來手動建立狀態(tài)編碼。對于以其他形式給出的設(shè)計,必須使用命令set_fsm_encoding手工建立狀態(tài)編碼。
1.4 編碼風(fēng)格
DC在優(yōu)化中可以使用one2hot (單狀態(tài)) 、二進制、格雷碼和自動編碼4種類型中的一種來分派狀態(tài)機的狀態(tài)。不同的編碼風(fēng)格可以導(dǎo)致具有很大差異的優(yōu)化結(jié)果。
One2hot風(fēng)格編碼使用與狀態(tài)機狀態(tài)數(shù)相等的位來編碼狀態(tài),每一個狀態(tài)的編碼只有1位是1,其余各位都是0,所以這種編碼方式需要與狀態(tài)數(shù)相等數(shù)目的觸發(fā)器。這種編碼方式簡化了組合邏輯,可以獲得最快的速度,但同時會大大增加設(shè)計的面積。二進制和格雷碼編碼方式按照一定的順序用二進制序列或者格雷碼序列來表示狀態(tài)機的狀態(tài),這兩種編碼方式可以降低所需的觸發(fā)器的數(shù)目,但速度不及one2hot編碼方式。自動編碼方式使用一種隨機的風(fēng)格產(chǎn)生狀態(tài)編碼,這種編碼能在使用最短編碼長度的情況下最大限度地降低組合邏輯的復(fù)雜度。采用什么樣的編碼風(fēng)格,要根據(jù)設(shè)計需要進行選擇。
2 狀態(tài)機優(yōu)化策略及實施
狀態(tài)機的優(yōu)化包括兩步,首先是提取狀態(tài)機邏輯,然后是優(yōu)化基于內(nèi)部狀態(tài)表表示的狀態(tài)機。這個過程既可以完全自動進行,也可以手工進行。自動優(yōu)化策略需要DC2Ultra的許可證(license) ,手動優(yōu)化策略需要DC2Expert的許可證。
2.1 基于DC Ultra的自動優(yōu)化策略
自動優(yōu)化策略由讀和編譯兩個階段組成。
a) 讀階段:讀進HDL或者以狀態(tài)表描述的設(shè)計;自動偵測狀態(tài)機的觸發(fā)器;標(biāo)明狀態(tài)機的狀態(tài)向量和狀態(tài)編碼特性。
b) 編譯階段:重新劃分包含狀態(tài)機的設(shè)計層次;從劃分后的設(shè)計中提取狀態(tài)機;確定編碼風(fēng)格;如果可能,減小轉(zhuǎn)態(tài)數(shù);分派狀態(tài);基于狀態(tài)機的邏輯網(wǎng)表產(chǎn)生DC內(nèi)部數(shù)據(jù)結(jié)構(gòu)的狀態(tài)分派;展平新創(chuàng)建的設(shè)計層次;繼續(xù)其他DC優(yōu)化步驟。
圖2是自動優(yōu)化的流程,其中列出了不同的可選命令,可以根據(jù)不同的設(shè)計進行取舍。
評論