


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
時序電路的狀態是一個狀態變量集合,這些狀態變量在任意時刻的值都包含了為確定電路的未來行為而必需考慮的所有歷史信息。狀態機采用VerilogHDL語言編碼,建議分為三個always段完成。這是為什么呢?設計FSM的方法和技巧多種多樣,但是總結起來有兩大類:第一種,將狀態轉移和狀態的操作和判斷等寫到一個模塊(process、block)中。另一種是將狀態轉移單獨寫成一個模塊,將狀態的操作和判斷等寫到另一個模塊中(在Verilog代碼中,相當于使用兩個“always”block)o其中較好的方式是后者。其原因如下。首先FSM和其他設計一樣,最好使用同步時序方式設計,好處不再累述。而狀態機實現后,狀態轉移是用寄存器實現的,是同步時序部分。狀態的轉移條件的判斷是通過組合邏輯判斷實現的,之所以第二種比第一種編碼方式合理,就在于第二種編碼將同步時序和組合邏輯分別放到不同的程序塊(process,block)中實現。這樣做的好處不僅僅是便于閱讀、理解、維護,更重要的是利于綜合器優化代碼,利于用戶添加合適的時序約束條件,利于布局布線器實現設計。三段式建模描述FSM的狀態機輸出時,只需指定case敏感表為次態寄存器,然后直接在每個次態的case分支中描述該狀態的輸出即可,不用考慮狀態轉移條件。三段式描述方法雖然代碼結構復雜了一些,但是換來的優勢是使FSM做到了同步寄存器輸出,消除了組合邏輯輸出的不穩定與毛刺的隱患,而且更利于時序路徑分組,一般來說在FPGA/CPLD等可編程邏輯器件上的綜合與布局布線效果更佳。示例如下://第一個進程,同步時序always模塊,格式化描述次態寄存器遷移到現態寄存器always@(posedgeclkornegedgerst_n)//異步復位if(!rst_n)current_state〈二IDLE;elsecurrent_state<=next_state;//注意,使用的是非阻塞賦值//第二個進程,組合邏輯always模塊,描述狀態轉移條件判斷always@(current_state)//電平觸發beginnext_state=x; //要初始化,使得系統復位后能進入正確的狀態case(current_state)SI:if(...)next_state=S2; //阻塞賦值endcaseend//第三個進程,同步時序always模塊,格式化描述次態寄存器輸出always@(posedgeclkornegedgerst_n)...//初始化case(next_state)SI:outl<=l'bl; //注意是非阻塞邏輯S2:out2<=l'bl;default:... //default的作用是免除綜合工具綜合出鎖存器。endcaseend三段式并不是一定要寫為3個always塊,如果狀態機更復雜,就不止3段了。//注:================================================================三段always模塊中,第一個和第三個always模塊是同步時序always模塊,用非阻塞賦值(“<=”);第二個always模塊是組合邏輯always模塊,用阻塞賦值(“=”)。第二部分為組合邏輯always模塊,為了抑制warning信息,對于always的敏感列表建議采用always@(*)的方式。第二部分,組合邏輯always模塊,里面判斷條件一定要包含所有情況!可以用else保證包含完全。第二部分,組合邏輯電平要維持超過一個clock,仿真時注意。需要注意:第二部分case中的條件應該為當前態(current_state),第三部分case中的條件應該為次態(next_state)。編碼原則,binary和gray-code適用于觸發器資源較少,組合電路資源豐富的情況(CPLD),對于FPGA,適用one-hotcode。這樣不但充分利用FPGA豐富的觸發器資源,還因為只需比較一個bit,速度快,組合電路簡單。初始化狀態和默認狀態。一個完備的狀態機(健壯性強)應該具備初始化狀態和默認狀態。當芯片加電或者復位后,狀態機應該能夠自動將所有判斷條件復位,并進入初始化狀態。需要注明的一點是,大多數FPGA有GSR(GlobalSet/Reset)信號,當FPGA加電后,GSR信號拉高,對所有的寄存器,RAM等單元復位/置位,這時配置于FPGA的邏輯并未生效,所以不能保證正確的進入初始化狀態。所以使用GSR企圖進入FPGA的初始化狀態,常常會產生種種不必一定的麻煩。一般的方法是采用異步復位信號,當然也可以使用同步復位,但是要注意同步復位的邏輯設計。解決這個問題的另一種方法是將默認的初始狀態的編碼設為全零,這樣GSR復位后,狀態機自動進入初始狀態。令^一方面狀態機也應該有一個默認(default)狀態,當轉移條件不滿足,或者狀態發生了突變時,要能保證邏輯不會陷入“死循環”。這是對狀態機健壯性的一個重要要求,也就是常說的要具備“自恢復”功能。對應于編碼就是對case,if-else語句要特別注意,要寫完備的條件判斷語句。VHDL中,當使用CASE語句的時候,要使用“WhenOthers”建立默認狀態。使用“IF...THEN...ELSE”語句的時候,要用在“ELSE”指定默認狀態。Verilog中,使用“case”語句的時候要用“default”建立默認狀態,使用“if...else”語句的注意事項相似。另外提一個技巧:大多數綜合器都支持Verilog編碼狀態機的完備狀態屬性 “fullcase”。這個屬性用于指定將狀態機綜合成完備的狀態,如Synplicity的綜合工具(Synplify/SynplifyPro,Amplify,etc)支持的命令格式如下:case(current_state)//synthesisfull_caseTOC\o"1-5"\h\z2' b00 : next_state <= 2' bOl;2' b01 : next_state <= 2' bll;2' bll : next_state <= 2' bOO;//這兩段代碼等效case(current_state)2' bOO : next_state <= 2' bOl;2' bOl : next_state <= 2' bll;2' bll : next_state <= 2' bOO;default:next_state<=2bx;Synplicity還有一個關于狀態機的綜合屬性,叫“synthesisparallel_case”,其功能是檢查所有的狀態是“并行的”(parallel),也就是說在同一時間只有一個狀態能夠成立。狀態機的定義可以用parameter定義,但是不推薦使用'define宏定義的方式,因為'define宏定義在編譯時自動替換整個設計中所定義的宏,而parameter僅僅定義模塊內部的參數,定義的參數不會與模塊外的其他狀態機混淆。對于狀態比較多的狀態機,可以將所有狀態分為幾個大狀態,然后再使用小狀態,可以減少狀態譯碼的時間。在代碼中添加綜合器的綜合約束屬性或者在圖形界面下設置綜合約束屬性可以比較方便的改變狀態的編碼。如VHDL的示例:Synplicity:attributesyn_encoding:string;attributesyn_encodingof<signal_name>:typeis"value";一一Thesyn_encodingattributehas4values:sequential,onehot,grayandsafe.Exemplar:--DeclareTYPE_ENCODING_STYLE.attribute一一Notneedediftheexemplar_1164packageisusedtypeencoding_style.is(BINARY,ONEHOT,GRAY,RANDOM,AUTO);attributeTYPE_ENCODING_STYLE.encoding_style;attributeTYPE_ENCODING_STYLE.of<typename>:typeisONEHOT;Verilog示例:Synplicity:Reg[2:0]state;/*synthesissyn_encoding="value"*/;//Thesyn_encodingattributehas4values:sequential,onehot,grayandsafe.Exemplar:Parameter/*exempl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電動汽車核心競爭力測試試題及答案
- 聚焦2025年:罕見病藥物研發政策利好與產業發展前景分析報告
- 旅游口語復試題及答案解析
- 市政道路設計與施工試題及答案
- 能源與資源行業政策解讀報告:新能源補貼政策與市場影響
- 游戲化學習試題及答案經驗
- 持續提升土木考試試題及答案
- 無機化學與環境保護的關系試題及答案
- 新能源汽車制造產業布局下的充電設施建設與發展報告
- 物理實驗基礎與技能評估試題及答案
- 社會組織建設與人才隊伍建設-寧夏課件
- NPT5空氣壓縮機檢修
- Q∕SY 13123-2017 物資倉儲技術規范
- 防洪度汛檢查表
- 手術通知單模板
- GB∕T 26077-2021 金屬材料 疲勞試驗 軸向應變控制方法
- GB∕T 3853-2017 容積式壓縮機 驗收試驗
- 招商合同范本4篇-合同范本
- 《二次函數圖像與性質》學習評價量規
- 2019版人教版教材習題高中物理必修3
- 直腸類癌rectalcarcinoid課件
評論
0/150
提交評論