基于RTL綜合策略的狀態(tài)機(jī)優(yōu)化方案
圖2 基于DC Ultra的有限狀態(tài)機(jī)自動(dòng)優(yōu)化流程
2.2 基于DC2Expert的手動(dòng)優(yōu)化策略
當(dāng)輸入設(shè)計(jì)文件不是以HDL描述的,或者DC不能從HDL文件中自動(dòng)識(shí)別出狀態(tài)機(jī)時(shí),就要采用手動(dòng)優(yōu)化策略。
圖3為手動(dòng)優(yōu)化策略的基本流程,其中展示了使用的命令、描述狀態(tài)機(jī)的狀態(tài)表和網(wǎng)表之間的關(guān)系。
圖3 FSM 手機(jī)優(yōu)化命令算法
從圖3中可以看出,手動(dòng)優(yōu)化包括網(wǎng)表生成、狀態(tài)表提取、基于狀態(tài)表的優(yōu)化和網(wǎng)表映射4 個(gè)階段。Compile命令基于輸入的HDL 文件生成網(wǎng)表, Extract命令基于網(wǎng)表生成狀態(tài)表, Compile命令再基于狀態(tài)機(jī)優(yōu)化的狀態(tài)表生成映射的網(wǎng)表??蛇x命令reduce_fsm和minimize_fsm基于狀態(tài)表操作, reduce _fsm試圖降低狀態(tài)機(jī)相關(guān)的組合邏輯的復(fù)雜度, minimize_fsm則試圖減少狀態(tài)數(shù)目。
手動(dòng)優(yōu)化包含如下步驟:
?。╞)將設(shè)計(jì)讀入DC。
如果設(shè)計(jì)不是以狀態(tài)表格式給出的,按如下步驟提取狀態(tài)表:
運(yùn)行comp ile2map_effort low得到一個(gè)輸入文件的網(wǎng)表;
根據(jù)需要使用set_fsm_state_vector指定狀態(tài)向量;
使用group2fsm 將狀態(tài)機(jī)邏輯劃分到一個(gè)單獨(dú)的模塊,并將該模塊設(shè)為當(dāng)前設(shè)計(jì);
使用set_fsm_encoding分派狀態(tài)機(jī)狀態(tài);
使用extract從設(shè)計(jì)中提取狀態(tài)機(jī)邏輯;
根據(jù)需要使用reduce_fsm降低狀態(tài)機(jī)相關(guān)的組合邏輯的復(fù)雜度;
根據(jù)需要使用minimize_fsm,則試圖減少狀態(tài)數(shù)目;使用minimize_fsm,則試圖減少狀態(tài)數(shù)目。
c) 根據(jù)需要選用適當(dāng)?shù)拿睿薷幕跔顟B(tài)表的狀態(tài)機(jī)的屬性,如狀態(tài)向量、狀態(tài)編碼、編碼風(fēng)格等。
d) 指定電路級(jí)約束條件和屬性。
e) 編譯整個(gè)設(shè)計(jì)。
圖4是提取狀態(tài)機(jī)的流程。
圖5是基于狀態(tài)表的優(yōu)化流程。
3 應(yīng)注意的問(wèn)題
并非所有的有限狀態(tài)機(jī)都可以使用本文所介紹的優(yōu)化策略,原始的設(shè)計(jì)文件應(yīng)該滿足下列條件:
a) 所有的端口應(yīng)該僅為輸入或者輸出端口,不支持輸入輸出端口。
b) 當(dāng)一個(gè)模塊中有多個(gè)狀態(tài)機(jī)時(shí),每次編譯時(shí)只能提取出1個(gè)狀態(tài)機(jī),而提取哪個(gè)狀態(tài)機(jī)是隨機(jī)的,所以推薦每個(gè)模塊僅包含1個(gè)有限狀態(tài)機(jī)。
c) 狀態(tài)機(jī)只能包含1個(gè)時(shí)鐘。
4 結(jié)束語(yǔ)
采用本文介紹的優(yōu)化策略,在不改變?cè)创a的前提下,較之標(biāo)準(zhǔn)編譯過(guò)程可以有效地提高狀態(tài)機(jī)的性能。但因?yàn)樵趦?yōu)化過(guò)程中特別是手動(dòng)優(yōu)化過(guò)程中對(duì)狀態(tài)重新進(jìn)行了編碼,如果新的編碼與原來(lái)的編碼不一致,會(huì)導(dǎo)致邏輯錯(cuò)誤,所以在使用這一策略時(shí)還要輔以其他手段進(jìn)行邏輯驗(yàn)證。
評(píng)論