0 引言
隨著硬件技術(shù)的進步,軟盤逐漸被新的存儲介質(zhì)代替。但部分舊設(shè)備(比如織布機等)并不支持這些更快、容量更大的存儲設(shè)備,也不支持網(wǎng)絡(luò)訪問。因此,設(shè)法將存儲設(shè)備虛擬成軟盤,通過網(wǎng)絡(luò)對其進行數(shù)據(jù)訪問具有一定的實用價值。在臺式機讀寫軟盤過程中,數(shù)據(jù)流遵循MFM編碼格式,使用CRC校驗檢測數(shù)據(jù)誤差。
本文提出一種基于FPGA和ARM的虛擬軟盤方案。在DE2-115開發(fā)平臺下,將2 MB的SRAM存儲器虛擬成1.44 MB軟盤,通過臺式機對虛擬軟盤的數(shù)據(jù)進行讀寫,并使用樹莓派實現(xiàn)UDP服務(wù)器,通過網(wǎng)絡(luò)對虛擬軟盤的狀態(tài)和數(shù)據(jù)進行讀寫訪問。
同時,對設(shè)計方案進行實現(xiàn)與驗證,成功實現(xiàn)對虛擬軟盤的鏡像制作、文件讀寫、格式化、制作啟動盤等操作,并實現(xiàn)局域網(wǎng)內(nèi)設(shè)備對虛擬軟盤的監(jiān)控。
1 虛擬軟盤核心模塊的設(shè)計與實現(xiàn)
1.1 虛擬軟盤數(shù)據(jù)分布結(jié)構(gòu)
一張軟盤包含80個磁道,每個磁道有2個柱面,每個柱面包含18個扇區(qū),每個扇區(qū)包含有512 B數(shù)據(jù)。整個軟盤包含有2×80×18×512 B=1.44 MB的數(shù)據(jù)量。在實際應(yīng)用中,軟盤通過軟驅(qū)線發(fā)送到臺式機的1個磁道的數(shù)據(jù),包含數(shù)據(jù)頭部、數(shù)據(jù)中部和數(shù)據(jù)尾部3個部分。
在本虛擬軟盤設(shè)計中,虛擬軟盤的數(shù)據(jù)分布結(jié)構(gòu)示意如圖1所示。
頭部的長度為200 B,其中GAP數(shù)據(jù)為0x4E,用于填充磁道,共有184 B;SYNC為同步信號0x00,共有12 B;IAM表示索引信號地址標記,內(nèi)容為0xC2C2C2FC,用來指示磁道開始。而數(shù)據(jù)中部則包含有18個扇區(qū)的數(shù)據(jù),每個扇區(qū)包含地址段和數(shù)據(jù)段兩部分。其中,地址段長度為72 B,數(shù)據(jù)段長度為608 B。地址段中:GAP段用于填充空間;SYNC表示同步;IDAM為地址標記;CHNR包含有磁道、磁面、扇區(qū)號、扇區(qū)內(nèi)數(shù)據(jù)字節(jié)數(shù)等信息;CRC為2 B校驗信息,校驗起始于IDAM段,終止于CRC段。數(shù)據(jù)段中:GAP段用于填充空間;SYNC表示同步;DATAAM為地址標記;DATA包含512 B數(shù)據(jù)信息;CRC為2 B的校驗信息,校驗起始于DATAAM段,終止于CRC段。磁道尾部包含的數(shù)據(jù)是用于填充用的GAP段,其內(nèi)容為0x4E,長度為60 B。
1.2并行CRC運算模塊的原理和實現(xiàn)
循環(huán)冗余校驗(Cyclic Redundancy Check,CRC)算法在檢測數(shù)據(jù)傳輸?shù)恼`差上發(fā)揮著重要的作用[1]。CRC校驗被用在PCI-Express總線、以太網(wǎng)(IEEE 802.3)以及WiFi(IEEE 802.11)等通信標準中[2]。通常使用的CRC校驗生成算法有串行的線性反饋移位運算LFSR[3-4],但隨著數(shù)據(jù)傳輸速率的提高,使用串行運算不能滿足系統(tǒng)的要求[5],有必要實現(xiàn)并行CRC計算模塊。
對于數(shù)據(jù)字節(jié)流{Cn(x),…,C1(x),C0(x)},Ck(x)都是關(guān)于x的7次多項式,表征一個字節(jié)的數(shù)據(jù);生成多項式記作G(x),為關(guān)于x的N次多項式。CRC校驗結(jié)果為:
考慮到有限域GF(2)上的加法等效于XOR異或運算,而乘法等效于AND與運算,在FPGA上可以實現(xiàn)一種基于矩陣式數(shù)據(jù)選通的并行CRC運算模塊。其結(jié)構(gòu)框圖如圖2所示。該并行CRC運算模塊包含有邏輯運算陣列和輸出寄存器兩個部分。其中邏輯運算陣列由組合邏輯構(gòu)成,其功能包括:將收到的數(shù)據(jù)DataIn左移(N-8)位,得到N位數(shù)據(jù)利用與上次CRC運算結(jié)果Rk(x)進行XOR運算,得運算結(jié)果進入數(shù)據(jù)選通運算陣列,陣列由(N×N)個1-bit選擇器和N個N-bit XOR運算單元構(gòu)成,選通使能信號是通過計算Φ=(A+KB)8結(jié)果得到的;陣列出來的運算結(jié)果進入輸出寄存器,由時序邏輯構(gòu)成,在模塊接收到ENA使能信號時,寄存邏輯運算陣列的結(jié)果輸出到Q;當輸出寄存器接收到RST復位信號時,CRC模塊的輸出Q相當于CRC校驗初始值R-1(x)。
在本虛擬軟盤設(shè)計中,取N=16,即進行CRC-16校驗,生成多項式為G(x)=x16+x12+x5+1,根據(jù)定義得到K=[0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]T,計算狀態(tài)轉(zhuǎn)移矩陣Φ,得到選通使能陣列如表1所示。其中橫向表示輸入位,用十六進制表示相應(yīng)的位下標;縱向的表示輸出位對應(yīng)的下標;表中陰影部分對應(yīng)的輸入位被選通,空白部分對應(yīng)的輸入位不被選通。
1.3 MFM編解碼
1.3.1 MFM編碼原理與實現(xiàn)
在軟盤應(yīng)用中,讀寫的數(shù)據(jù)都是以串行方式傳輸?shù)摹MǔT诟鱾€數(shù)據(jù)位之間插入時鐘位,保證數(shù)據(jù)能被正確傳輸和識別[6]。在軟盤的數(shù)據(jù)傳輸中,采用MFM編碼。其表達式如下:(x,y,z)→(x,x NOR y,y,y NOR z,z),其中NOR為非或運算,即p NOR q=p∨q。在RData和WData信號線上,一個電平翻轉(zhuǎn)表示在MFM編碼碼流的時鐘位或者數(shù)據(jù)位中出現(xiàn)了“1”;而沒有翻轉(zhuǎn),則表示在碼流的時鐘位或數(shù)據(jù)位中出現(xiàn)了“0”。采用500 kb/s的傳輸速率,一個數(shù)據(jù)位的傳輸需要消耗2 μs時間。圖3為4-bit數(shù)據(jù)流“1010”MFM編碼示意。
MFM編碼沒有起始標志,所以在每個扇區(qū)地址段和數(shù)據(jù)段之前都有AM域,其中的數(shù)據(jù)字節(jié)“0xA1”的編碼采用了MMFM編碼,用于標記碼流起始:在數(shù)據(jù)位中,若出現(xiàn)連續(xù)的0-0,則時鐘位變1;若出現(xiàn)0-0-0,則時鐘位是1-0;若出現(xiàn)0-0-0-0,則時鐘位是1-0-1;以此類推。
圖4是MFM編碼模塊的結(jié)構(gòu)框圖。整個MFM編碼過程由移位寄存模塊、核心編碼模塊、計數(shù)模塊和并行轉(zhuǎn)串行模塊組成。其中,移位寄存模塊保留上一字節(jié)數(shù)據(jù)的最低位和當前字節(jié)數(shù)據(jù),生成數(shù)據(jù)mfmData用來傳遞給核心編碼模塊進行MFM編碼。核心編碼模塊根據(jù)MFM編碼規(guī)則,對mfmData進行編碼運算,并通過Violate信號判斷當前是否處于AM域,若是,則要使用MMFM編碼規(guī)則。計數(shù)器模塊用來生成BitCnt計數(shù)信號,傳遞給并轉(zhuǎn)串模塊,生成最后的數(shù)據(jù)比特流mfmBit信號。
1.3.2 MFM解碼原理與實現(xiàn)
數(shù)據(jù)在編碼和傳輸過程中,經(jīng)常出現(xiàn)相位超前、延遲的情況。在MFM解碼之前,需要先同步WData碼流和MFM解碼時鐘。此外,軟盤數(shù)據(jù)在AM域的0xA1標志遵循MMFM編碼,用于定位MFM碼流的起始位置。圖5是MFM解碼模塊的模塊結(jié)構(gòu)框圖。采用32 MHz的采樣時鐘捕捉WData信號。因為一個數(shù)據(jù)位周期為2 μs,采樣過程中計數(shù)器由0計到63,即T=0,1,2,…,62,63。據(jù)此設(shè)定數(shù)據(jù)比特的采樣時間在T=10和T=42時刻采樣結(jié)果保存在移位寄存器SHIFTER中,并分離數(shù)據(jù)位和時鐘位。MFM碼流中的下降沿出現(xiàn)通常在T=0或者T=31時刻。AM域的數(shù)據(jù)字節(jié)0xA1經(jīng) MMFM編碼后CLOCK_BITS是0x0A,而MFM編碼后CLOCK_BITS為0x0E。據(jù)此,仲裁單元的相位調(diào)整規(guī)則如下:
(1)檢測到WData下降沿時:若16≤T≤47,選通T=31;若T≤15或者T≥48,選通T=0;
(2)若DATA_BITS==0xA1且CLOCK_BITS ==0x0A,即檢測到0xA1編碼違例,則選通T=44;
(3)否則選通T=T+1。
最后,數(shù)據(jù)比特計數(shù)模塊用來判斷是否接收到8 bit數(shù)據(jù),若是,則輸出數(shù)據(jù)有效脈沖信號MFM_DATA_EN。
2 虛擬軟盤系統(tǒng)的設(shè)計與實現(xiàn)
2.1 虛擬軟盤系統(tǒng)框架結(jié)構(gòu)
虛擬軟盤系統(tǒng)如圖6所示。其中,控制電腦與虛擬軟盤系統(tǒng)處于同一個局域網(wǎng)下,通過socket通信實現(xiàn)與虛擬軟盤系統(tǒng)的交互,包括軟盤狀態(tài)獲取、軟盤狀態(tài)修改、發(fā)送軟盤鏡像和選擇軟盤鏡像等命令;虛擬軟盤系統(tǒng)包括ARM、FPGA和SRAM存儲器3個部分,其中ARM和FPGA的交互通過SPI接口實現(xiàn);ARM負責網(wǎng)絡(luò)交互,從網(wǎng)絡(luò)獲取軟盤數(shù)據(jù)、狀態(tài)的讀寫命令,同時開啟SSH服務(wù),方便遠程登錄,開啟FTP服務(wù)用于控制中心發(fā)送、選擇虛擬軟盤系統(tǒng)中的軟盤鏡像;FPGA負責將2 MB容量的SRAM虛擬成1.44 MB軟盤,并通過軟驅(qū)線和外部的臺式機/織布機進行交互。
2.2 FPGA部分的結(jié)構(gòu)
FPGA部分的結(jié)構(gòu)框圖如圖7所示。該系統(tǒng)主要包括虛擬軟盤控制模塊、SPI收發(fā)模塊、SRAM控制模塊。
控制模塊實現(xiàn)軟盤磁針的位置控制和數(shù)據(jù)編解碼:步進模塊通過檢測iStep下降沿和iDir電平確定當前軟盤磁針所處的磁道號rCylNo;通過iHdSel電平確定磁針所處柱面號rHeadNo;旋轉(zhuǎn)模塊確定當前扇區(qū)號rSectNo以及在扇區(qū)內(nèi)偏移地址rAddrL。MFM解碼模塊根據(jù)WData得到回寫數(shù)據(jù)wData和磁道wCylNo、柱面wHeadNo、扇區(qū)號wSectNo及扇區(qū)內(nèi)偏移地址wAddrL等信息。
通過SPI收發(fā)模塊,F(xiàn)PGA可獲取到ARM給出的讀寫命令,數(shù)據(jù)交換模塊會根據(jù)命令判斷執(zhí)行以下某個行動:讀取軟盤的扇區(qū)數(shù)據(jù)、修改軟盤的扇區(qū)數(shù)據(jù)、獲取軟盤狀態(tài)(寫保護,軟盤就緒,寫入使能,磁道、磁面和扇區(qū)等)、修改軟盤狀態(tài)(寫保護和軟盤就緒等)。
地址、數(shù)據(jù)等信息通過地址轉(zhuǎn)移模塊,映射成對SRAM的讀地址rAddr和寫地址wAddr。通過SRAM讀寫控制模塊,可以對虛擬成軟盤的SRAM進行數(shù)據(jù)訪問。CRC編碼模塊用于計算地址段和數(shù)據(jù)段的校驗和,可以用來檢測數(shù)據(jù)傳輸上可能出現(xiàn)的錯誤。軟盤數(shù)據(jù)或者校驗和經(jīng)過MFM編碼模塊生成MFM碼流傳送給臺式機。
2.3 ARM程序結(jié)構(gòu)
ARM部分的程序設(shè)計框圖如圖8所示。其中,主線程負責socket和SPI接口的初始化,并創(chuàng)建線程1和線程2;線程1負責通過網(wǎng)絡(luò)獲取控制中心的命令(包括軟盤狀態(tài)讀取命令即#R,軟盤狀態(tài)修改命令即#W、WP、READY、FLAG,以及鏡像文件讀取/寫入命令即&R/W、xxx.ima),對互斥量filelock進行上鎖后,修改data_sent為1,再把filelock解鎖;線程2負責判斷data_sent是否為1,即網(wǎng)絡(luò)命令是否有效。若是,則對filelock進行上鎖后,根據(jù)網(wǎng)絡(luò)命令執(zhí)行相應(yīng)的操作,并返回相應(yīng)數(shù)據(jù)給控制中心,再將data_sent清零后,把filelock解鎖;若data_sent為0,即沒有收到網(wǎng)絡(luò)命令,那么讀取當前軟盤狀態(tài),空閑1 s后,重新進行循環(huán)。
此外,ARM端還負責作為FTP服務(wù)器,用于接收控制中心發(fā)送的各個ima軟盤鏡像文件。
3 虛擬軟盤運行測試情況
針對提出的虛擬軟盤設(shè)計方案進行測試與驗證。在Altera的DE2-115開發(fā)板上燒寫FPGA工程文件,并在樹莓派上運行ARM部分的程序。對虛擬軟盤的測試包括虛擬軟盤格式化、文件讀寫、鏡像制作、啟動盤測試等。首先對虛擬軟盤徹底格式化,將虛擬軟盤所有扇區(qū)數(shù)據(jù)清零;然后進行多文件隨機寫入,并讀取虛擬軟盤文件,進行文件比較,比對結(jié)果說明虛擬軟盤讀寫正常;最后,制作啟動盤并利用UltraISO制作軟盤鏡像,通過啟動測試程序加載鏡像,能順利進入系統(tǒng),說明啟動盤制作和讀取正常。
4 結(jié)論
本文提出并實現(xiàn)了一種基于FPGA和ARM的虛擬軟盤方案,并成功將2 MB的SRAM虛擬成1.44 MB軟盤,可通過網(wǎng)絡(luò)對虛擬軟盤的狀態(tài)和數(shù)據(jù)進行遠程訪問,也可通過臺式機對虛擬軟盤進行讀寫操作。利用實際開發(fā)板進行實驗,驗證了本設(shè)計方案的可行性。
-
FPGA
+關(guān)注
關(guān)注
1625文章
21627瀏覽量
601251 -
ARM
+關(guān)注
關(guān)注
134文章
9028瀏覽量
366496 -
編碼
+關(guān)注
關(guān)注
6文章
933瀏覽量
54731
發(fā)布評論請先 登錄
相關(guān)推薦
評論