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