王曉磊 李宏生
(東南大學(xué)微慣性儀表與先進導(dǎo)航技術(shù)教育部重點實驗室 南京 210096)
有限狀態(tài)機(Finite State Machine,FSM)及其技術(shù)是實用數(shù)字系統(tǒng)設(shè)計中實現(xiàn)高效率高可靠邏輯控制的重要途徑,是一種簡單、結(jié)構(gòu)清晰、設(shè)計靈活的方法,它易于建立、理解和維護,特別應(yīng)用在具有大量狀態(tài)轉(zhuǎn)移和復(fù)雜時序控制的系統(tǒng)中,更顯其優(yōu)勢。
有限狀態(tài)機模型可以用下面包含5種元素的集合來表示{X,Y,S,f,g},假設(shè)S={S1,S2,…,Sk}是FSM中狀態(tài)的集合;X={X1,X2,…,Xn}是FSM中輸入的集合;Y={Y1,Y2,…,Ym}是FSM中輸出的集合;f為狀態(tài)轉(zhuǎn)移函數(shù),表示由輸入信號變量X和當(dāng)前狀態(tài)X決定下一個狀態(tài),即:XY→S;g為輸出函數(shù),表示由輸入信號變量X和狀態(tài)S決定狀態(tài)機的輸出變量Y,即:XS→Y。從上面定義可以看出,有限狀態(tài)機包含5類基本要素:即狀態(tài)、輸入、輸出、轉(zhuǎn)移函數(shù)及輸出函數(shù)。它們分別用矢量函數(shù)表示如下[1]:
根據(jù)有限狀態(tài)機是否使用輸入信號,分為Moore型有限狀態(tài)機和Mealy型有限狀態(tài)機。Moore型狀態(tài)機的輸出只與當(dāng)前的狀態(tài)有關(guān)而與輸入無關(guān),而Mealy型狀態(tài)機的輸出不僅與當(dāng)前狀態(tài)有關(guān),還與當(dāng)前的輸入有關(guān),它們共同決定Mealy狀態(tài)機的輸出。本控制系統(tǒng)采用Moore型有限狀態(tài)機實現(xiàn)數(shù)字溫度傳感器的控制。
DS18B20是單總線式數(shù)字溫度傳感器,支持“一線總線”接口,測量得到的數(shù)據(jù)為數(shù)字量,不需要經(jīng)過模數(shù)轉(zhuǎn)換。每一次命令和數(shù)據(jù)傳輸都是從主機啟動寫時序開始,如果要求從機回送數(shù)據(jù),在寫命令后,主機需啟動讀時序接收數(shù)據(jù)。
DS18B20有嚴(yán)格的信號時序,包括:
1)復(fù)位脈沖和應(yīng)帶脈沖
單總線上的所有通信都是以初始化序列開始。主機輸出低電平,保持低電平時間至少480μ s,以產(chǎn)生復(fù)位脈沖。接著主機釋放總線,4.7kΩ上拉電阻將單總線拉高,延時 15~60μ s,并進入接收模式。接著DS18B20拉低總線60~240μ s,以產(chǎn)生低電平應(yīng)答脈沖,若為低電平,再延時480μ s。如圖1所示。
圖1 復(fù)位與應(yīng)答脈沖
2)寫時隙
寫時隙包括寫0時隙和寫1時隙。所有寫時隙至少需要60μ s,且在2次獨立的寫時隙之間至少需要1μ s的恢復(fù)時間,兩種寫時隙均起始于主機拉低總線。
3)讀時隙
DS18B20僅在主機發(fā)出讀時隙時,才向主機傳輸數(shù)據(jù),所以,在主機發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時隙,以便從機能夠傳輸數(shù)據(jù)。所有讀時隙至少需要60μ s,且在2次獨立的讀時隙之間至少需要1μ s的恢復(fù)時間。每個讀時隙都由主機發(fā)起,至少在時隙起始后的15μ s之內(nèi)采樣總線狀態(tài)。
本設(shè)計采用Altera公司的 EP2C8T144I8N CYCLONEⅡ芯片作為系統(tǒng)控制器[3]。
控制模塊包括clk_div分頻模塊和Temperature狀態(tài)機控制模塊。clk_div模塊功能是將系統(tǒng)時鐘20MHz分頻為1MHz;temperature模塊功能是向DS18B20輸出控制命令,并將DS18B20并將測量得到的數(shù)字溫度值輸出。
在FPGA芯片中,一般信號線用做總線等雙向數(shù)據(jù)傳輸?shù)臅r候就要用到INOUT類型了。inout在具體實現(xiàn)上一般用三態(tài)門來實現(xiàn)。三態(tài)門的第三個狀態(tài)就是高阻‘Z'。當(dāng)inout端口不輸出時,將三態(tài)門置高阻。在 Temperature控制模塊中,sensor_DQ引腳在VerilogHDL語法中定義為inout類型,此引腳連接DS18B20的DQ引腳[4]。
本系統(tǒng)設(shè)計中,定義了:
對于sensor_DQ_out,可以通過組合邏輯或者時序邏輯根據(jù)sensor_DQ_in對其賦值。通過控制sensor_DQ_en的高低電平,從而設(shè)置sensor_DQ是輸出數(shù)據(jù)還是處于高阻態(tài),如果處于高阻態(tài),則此時當(dāng)做輸入端口使用,sensor_DQ_en可以通過相關(guān)電路來控制。
為了保證測量數(shù)據(jù)的可靠傳輸,任一時刻單總線上只能有一個控制或數(shù)據(jù)信號。訪問DS18B20的操作順序遵循以下三步:
第一步:初始化;
第二步:ROM命令;
第三步:DS18B20功能命令;
單總線數(shù)字溫度傳感器DS18B20時序控制流程圖如圖5所示。
圖5 狀態(tài)機時序控制流程圖
采用VerilogHDL語言描述此Moore型有限狀態(tài)機,FPGA通過單總線對DS18B20進行操作,其one-hot編碼定義的狀態(tài)變量如表1所示[5]。
表1 one-hot編碼定義
其中,initial_pulse:復(fù)位和應(yīng)答脈沖狀態(tài),用于DS18B20的初始化,以及主從器件通信的開始;程序中首先發(fā)送480μ s的低電平,而后釋放總線90μ s,然后再釋放總線400μ s,檢測器件的應(yīng)答脈沖。
skip_ROM:跳過ROM狀態(tài)。當(dāng)主機檢測到應(yīng)答脈沖后,發(fā)出ROM命令,本系統(tǒng)只連接單個DS18B20,故發(fā)出跳過 ROM(skip ROM)命令CCh。
write_byte:寫字節(jié)狀態(tài)。由于DS18B20功能命令均為一個字節(jié)長度,故用于其他寫指令狀態(tài)的調(diào)用。
write_0:寫 0時隙狀態(tài),用于主機向DS18B20寫低電平;程序中寫時隙15μ s,拉低總線;而后FPGA 發(fā)送60μ s的低電平;再經(jīng)過10μ s的恢復(fù)時間,這就完成了寫數(shù)據(jù)0。
write_1:寫 1時隙狀態(tài),用于主機向DS18B20寫高電平;程序中寫時隙15μ s,拉低總線;而后FPGA 發(fā)送60μ s的高電平;再經(jīng)過10μ s的恢復(fù)時間,這就完成了寫數(shù)據(jù)1。
convert_Temp:溫度轉(zhuǎn)換狀態(tài);FPGA發(fā)送命令數(shù)據(jù)44h,用于主機啟動溫度轉(zhuǎn)換。
wait_750ms:等待器件溫度轉(zhuǎn)換狀態(tài);主機發(fā)出溫度轉(zhuǎn)換命令后,進入wait_750ms狀態(tài),等待傳感器溫度轉(zhuǎn)換,以及數(shù)據(jù)存儲。
read_scratchpad:讀暫存器(scratchpad)狀態(tài);FPGA發(fā)送命令數(shù)據(jù)BEh。
get_Temp:讀取溫度轉(zhuǎn)換數(shù)據(jù)狀態(tài),主機命令DS18B20讀取溫度值。
read_bit:位讀取狀態(tài);傳感器轉(zhuǎn)換后的數(shù)據(jù)存于暫存器,主機通過單總線一位一位的讀出,存于寄存器中;程序中先2μ s讀時隙,而后延時10μ s;再經(jīng)過3μ s的讀數(shù)據(jù)時間,而后延時 55μ s,這樣就完成了一位數(shù)據(jù)的讀出[6]。
嵌入式邏輯分析儀Signal TapⅡ主要用于分析數(shù)字系統(tǒng)的檢測和故障診斷問題,是數(shù)據(jù)域測試中一種非常有效的測試方式。它在對系統(tǒng)硬件模塊進行監(jiān)測時,是將測得的樣本數(shù)據(jù)暫存于目標(biāo)器件的RAM中,然后通過器件的JTAG端口和USB BlasterⅡ下載線一起將樣本數(shù)據(jù)信息傳出并送入計算機進行數(shù)據(jù)分析。通過實踐證明,在 FPGA上用這種方法抓取數(shù)字信號更便捷,更準(zhǔn)確,易實現(xiàn)更高的精度。
其調(diào)試的基本步驟如下[8]:
1)打開Signal TapⅡ編輯窗;
2)調(diào)入待測信號;
3)相關(guān)參數(shù)設(shè)置。首先設(shè)置采樣時鐘;其次設(shè)置采樣深度;最后設(shè)置觸發(fā)條件;
4)下載、啟動并查看數(shù)據(jù)。
當(dāng)測試程序下載到FPGA并運行后,用Signal TapⅡ抓取DS18B20的輸入輸出端口以及讀取溫度數(shù)據(jù)信號如圖6所示。
圖6 Signal TapⅡ調(diào)試圖
文中分析了DS18B20的工作原理,并采用有限狀態(tài)機設(shè)計其控制邏輯,相比單片機控制,更具有實時性,實現(xiàn)了溫度采集接口,該接口可以作為一個獨立模塊嵌入到其他電路組成的應(yīng)用系統(tǒng)中。
有限狀態(tài)機作為數(shù)字邏輯理論的一個重要組成部分,不僅是重要的軟件基礎(chǔ)理論,而且在硬件設(shè)計中也發(fā)揮著重要的作用,特別是在利用EDA技術(shù)進行可編程ASIC設(shè)計時。
[1]Zhang Peiren,Zhou Yanping.A Large-Scale Temperature Alarm System Based on 1-Wire Bus and CAN bus[J].Control&Automation,2003(2):25~26
[2]李鋼,趙彥峰.1-Wire總線數(shù)字溫度傳感器DS18B20原理及應(yīng)用[J].現(xiàn)代電子技術(shù),2005,28(21):77~79
[3]周岳斌.基于FPGA的數(shù)字溫度傳感器接口設(shè)計[J].現(xiàn)代電子技術(shù),2007,12:51~52
[4]何文龍,房建東.基于FPGA的數(shù)字溫度傳感器控制方法[J].電子測量技術(shù),2008,11:178~181
[5]劉小平,何云斌,董懷國.基于VerilogHDL的有限狀態(tài)機設(shè)計與描述[J].計算機工程與設(shè)計,2008,29(4):958~960
[6]王凌,宋揚等.基于有限狀態(tài)機的飛行器自毀系統(tǒng)時序控制設(shè)計[J].現(xiàn)代電子技術(shù),2009,8
[7]胡文軍,李英輝.嵌入式邏輯分析儀在FPGA設(shè)計中的應(yīng)用[J].微計算機信息,2007,23:211~212,203
[8]袁火平,盧艷娥,等.基于SignaltapⅡ的高速數(shù)據(jù)采集系統(tǒng)[J].微計算機信息,2008,24:9