□唐雨辰 吉明明 蘇圣超 馬笑塵 王慧然 蔡昭嶸 張嘉興
基于FPGA相較于嵌入式編程更為靈活、處理速度更快的特點(diǎn),本文使用FPGA設(shè)計(jì)一個(gè)可以檢測(cè)環(huán)境溫度與濕度并將其顯示在液晶屏上、能夠?qū)鹎檫M(jìn)行報(bào)警的公共交通環(huán)境綜合檢測(cè)系統(tǒng),并使用循環(huán)冗余校驗(yàn)碼對(duì)所采集的數(shù)據(jù)進(jìn)行傳輸。本文簡(jiǎn)要介紹了基于XILINX ISE 12.4的循環(huán)冗余校驗(yàn)碼仿真實(shí)驗(yàn)以及由循環(huán)冗余校驗(yàn)碼進(jìn)行數(shù)據(jù)校驗(yàn)的環(huán)境監(jiān)測(cè)系統(tǒng)構(gòu)成和設(shè)計(jì)思路,并將其與基于嵌入式的公共交通環(huán)境綜合檢測(cè)系統(tǒng)進(jìn)行對(duì)比。在此基礎(chǔ)上,簡(jiǎn)要分析嵌入式系統(tǒng)與FPGA系統(tǒng)對(duì)初學(xué)者的利與弊,從而方便在今后項(xiàng)目中的選擇使用。
本文選用XILINX的Spartan6系列芯片XC6SLX9作為仿真芯片,以并行硬件方式對(duì)循環(huán)冗余校驗(yàn)碼進(jìn)行實(shí)現(xiàn)。
(一)循環(huán)冗余校驗(yàn)碼。CRC(Cyclic Redundancy Check)是各類數(shù)字通信系統(tǒng)中應(yīng)用最為廣泛的錯(cuò)誤檢測(cè)算法之一,它代表著循環(huán)冗余碼校驗(yàn)或簡(jiǎn)單的循環(huán)冗余校驗(yàn)[1]。大多數(shù)流行的通信協(xié)議都使用循環(huán)冗余校驗(yàn)進(jìn)行錯(cuò)誤檢測(cè),是因?yàn)檠h(huán)冗余校驗(yàn)碼使用極其廣泛、漏檢率較低且便于實(shí)現(xiàn)[2]。
(二)線性反饋移位寄存器。LFSR(linear feedback shift register),即線性反饋移位寄存器,是給定前一狀態(tài)的輸出,將該輸出的線性函數(shù)再用作輸入的移位寄存器,而循環(huán)冗余校驗(yàn)正可以通過LFSR進(jìn)行實(shí)現(xiàn)[3]。如表1所示,展示出了輸入數(shù)據(jù)經(jīng)過LFSR多次移位后依據(jù)“0⊕X=X”化簡(jiǎn)的結(jié)果:CX為輸出循環(huán)冗余校驗(yàn)碼的位數(shù),DX為輸入數(shù)據(jù)的位數(shù),“⊕”為異或運(yùn)算符。
(三)仿真實(shí)現(xiàn)。根據(jù)表1的移位化簡(jiǎn)結(jié)果進(jìn)行編程,并使用ISE 12.4軟件進(jìn)行仿真,可以得到如圖1所示的仿真波形。由于“reset”信號(hào)的存在,在該信號(hào)保持高電平的情況下,校驗(yàn)碼會(huì)被正常運(yùn)算,如果該信號(hào)因?yàn)楣收匣蛘呷藶槔停麄€(gè)校驗(yàn)碼的計(jì)算過程將會(huì)停止,其存儲(chǔ)的值也將被清零。
表1 LFSR多次移位化簡(jiǎn)結(jié)果
圖1 循環(huán)冗余校驗(yàn)仿真波形
FPGA系統(tǒng)選用XILINX的Spartan6系列芯片XC6SLX9作為控制器,采用12864B液晶顯示屏、DHT11溫濕度傳感器、YG1006火焰?zhèn)鞲衅鞯菼/O設(shè)備。
(一)系統(tǒng)構(gòu)成。FPGA系統(tǒng)選用并行收發(fā)模式下的12864B液晶顯示屏與拉高狀態(tài)下的4*4按鍵組成人機(jī)交互界面;串行收發(fā)總線的DHT11溫濕度傳感器以及1位二進(jìn)制輸出的YG1006火焰?zhèn)鞲衅髯鳛橥饨鐥l件接收裝置;3.3V供電的有源蜂鳴器作為警報(bào)裝置。各個(gè)部件之間的邏輯關(guān)系通過Verilog的“always @ (*)”塊進(jìn)行連接,并通過串口通信與上位機(jī)(計(jì)算機(jī))取得數(shù)據(jù)上傳鏈路,傳輸過程使用循環(huán)冗余校驗(yàn)碼作為數(shù)據(jù)收發(fā)有無誤碼的校驗(yàn)方式。
(二)系統(tǒng)對(duì)比。FPGA系統(tǒng)與基于嵌入式的公共交通環(huán)境綜合檢測(cè)系統(tǒng)在代碼編程上進(jìn)行對(duì)比,可以明顯發(fā)現(xiàn)兩者編程思路不同——FPGA系統(tǒng)更傾向于各個(gè)部件運(yùn)行時(shí)的時(shí)序關(guān)系,而嵌入式系統(tǒng)更傾向于各個(gè)部件運(yùn)行時(shí)的邏輯關(guān)系。從而導(dǎo)致在部件增多,即相互制約影響因素增多的情況下,嵌入式編程難度會(huì)隨之上升,代碼的臃腫程度也不言而喻。
在系統(tǒng)運(yùn)行方面,F(xiàn)PGA系統(tǒng)運(yùn)行更為流暢,尤其是在4*4鍵盤的掃描讀取上,誤讀與漏讀情況明顯較少。但是,F(xiàn)PGA系統(tǒng)的層次結(jié)構(gòu)較嵌入式系統(tǒng)而言較為單調(diào),無法像嵌入式系統(tǒng)那般層層遞進(jìn),有一套邏輯性強(qiáng)的菜單關(guān)系。
本文簡(jiǎn)單介紹了循環(huán)冗余校驗(yàn)碼的并行硬件實(shí)現(xiàn)原理,并對(duì)該方法的實(shí)現(xiàn)做了仿真,之后對(duì)基于FPGA的環(huán)境檢測(cè)系統(tǒng)的系統(tǒng)構(gòu)成作了說明,并通過與嵌入式系統(tǒng)下的環(huán)境監(jiān)測(cè)系統(tǒng)對(duì)比,得出了:時(shí)序性強(qiáng)、邏輯功能要求較低的情況下FPGA占優(yōu)勢(shì),反之嵌入式在邏輯關(guān)系要求高的情況下有不可替代的作用。