基于陣列除法的數(shù)據(jù)接收/顯示模塊設(shè)計
根據(jù)系統(tǒng)要求,脈沖雷達高度表通過RS-422串行輸出高度數(shù)據(jù),要求數(shù)據(jù)接收模塊實時接收,并顯示雷達高度數(shù)據(jù)。接收模塊接收到的高度數(shù)據(jù)采用二進制(BIN)碼表示,而數(shù)碼管等顯示設(shè)備需要BCD碼(即二進制編碼的十進制碼),所以二者之間的轉(zhuǎn)換非常必要。
BCD碼與BIN碼的相互轉(zhuǎn)換比較傳統(tǒng)的方法是采用DAA調(diào)節(jié)指令來實現(xiàn),需要逐位調(diào)節(jié),比較費時。文獻[3]提出利用模除,每次移動半字節(jié),使轉(zhuǎn)換效率大為提高,但也僅是軟件算法,無法滿足數(shù)制轉(zhuǎn)換高效率和實時性的要求。文獻[4]提出了采用分段查找EPROM的硬件方法,滿足點陣記錄實時性的要求,但是該算法需要大容量的EPROM。文獻[5]利用BCD碼與BIN碼的邏輯對應(yīng)關(guān)系直接轉(zhuǎn)換,需要經(jīng)過多級復(fù)雜的變換邏輯,面積和時延較差。
為此,本文采用Verilog HDL硬件描述語言將雷達高度數(shù)據(jù)接收/顯示的核心功能集成到XILINX公司的FPGA(XCS200)中,使得整個設(shè)計更加緊湊、小巧、穩(wěn)定和可靠。利用不恢復(fù)余數(shù)陣列除法快速準確地實現(xiàn)BIN碼到BCD碼的轉(zhuǎn)換,僅需要少量的移位和加/減法操作,簡化實現(xiàn)數(shù)制轉(zhuǎn)換中的求余和整除運算。該單元陣列結(jié)構(gòu)規(guī)整,不僅節(jié)省了面積,適于超大規(guī)模集成電路實現(xiàn)需要,而且易向更高進制擴展,具有很高的轉(zhuǎn)換速度。
1 串行高度數(shù)據(jù)接收/顯示模塊簡介
數(shù)字式自動距離跟蹤脈沖雷達高度表串行輸出的高度數(shù)據(jù),首先通過串行高度數(shù)據(jù)接收模塊將串行數(shù)據(jù)轉(zhuǎn)換為并行報文數(shù)據(jù),再通過報文濾波/數(shù)據(jù)提取模塊,提取出高度數(shù)據(jù),并根據(jù)輸出高度數(shù)據(jù)的時間間隔標識雷達的工作狀態(tài),然后BIN碼表示的高度數(shù)據(jù)通過以不恢復(fù)余數(shù)陣列除法為基礎(chǔ)的BIN/BCD碼轉(zhuǎn)換模塊,轉(zhuǎn)換為適合七段碼顯示的90BCD碼后送到掃描七段碼顯示控制器,以驅(qū)動四位七段共陽極動態(tài)顯示數(shù)碼管,如圖1所示。
串行高度數(shù)據(jù)收發(fā)模塊采用三線制連接方式,通信方式為異步傳輸,波特率:9 600,數(shù)據(jù)位:8位,停止位:1位,奇校驗,其字符格式及時鐘同步檢測與采樣過程如圖2所示。
2 基于不恢復(fù)余數(shù)陣列除法的二進制到BCD碼的轉(zhuǎn)換
提出的BIN碼到BCD碼的轉(zhuǎn)換算法采用數(shù)據(jù)除以位權(quán)的方式得到千、百、十、個位BCD碼,因此除法器的設(shè)計是關(guān)鍵。在數(shù)字計算中各種除法都可以用下列遞歸公式來描述:
(1)
這里_j=0,1,…,n-1為遞歸下標;D為除數(shù);qj+1為小數(shù)點右邊第j+1位商;r為基數(shù),r×R(j)為部分被除數(shù);R(j+1)為部分余數(shù);R(0)為被除數(shù)(初始部分余數(shù));R(n)為最后余數(shù)。
除法過程可通過重復(fù)應(yīng)用遞歸式1來得到證明。
對j=0
上述迭代推導(dǎo)過程說明了除法過程是由一系列加法、減法或移位所組成,對于基數(shù)r=2,q…∈{0,1}。
當部分被除數(shù)rR(j)不夠除數(shù)D減時,商qj+1為0,同時補充被除數(shù)的下一位,組成更大的部分被除數(shù);如果夠減,則該位商為1,在部分被除數(shù)rR(j)中減去除數(shù)D,然后補充被除數(shù)的下一位,直至被除數(shù)的每一位都使用到為止。
在除法進行過程中,可使用專門的數(shù)據(jù)比較器來比較部分被除數(shù)rR(j)是否比除數(shù)D大(nonperforming算法),或直接用部分被除數(shù)減去除數(shù)。方式1浪費了專門的數(shù)據(jù)比較電路,運算延遲加大,降低了運算速度。方式2,當完成了減法操作后,如果不夠減,把除數(shù)加回到產(chǎn)生的差,以恢復(fù)原來余數(shù)(恢復(fù)余數(shù)法);或把產(chǎn)生的差留給下一次運算時再處理(不恢復(fù)余數(shù)法)。
2.1 不恢復(fù)余數(shù)陣列除法器
為簡化起見,下文用A表示被除數(shù),D表示除數(shù),R表示余數(shù)。在恢復(fù)余數(shù)法中,如果余數(shù)R為負數(shù),即不夠減,則需要加上除數(shù)D,恢復(fù)成原來的余數(shù),即R+D。然后,余數(shù)R和被除數(shù)A聯(lián)合左移1位。此時余數(shù)為2(R+D)+ai,其中ai為A中的一位,被移入R中。隨后,進入下一步運算。即從余數(shù)中減去除數(shù)D:(2(R+D)+ai)-D,有
(2(R+D)+ai)-D=2R+ai+D (5)
因此,當在某一步中,余數(shù)R為負,無需再加上除數(shù)D來恢復(fù)成原來的余數(shù),只需在下一步中把恢復(fù)余數(shù)法中的減去除數(shù)D改成加上除數(shù)D,這種算法稱為不恢復(fù)余數(shù)法?;謴?fù)余數(shù)除法需要2個步驟來確定1個商位,而不恢復(fù)余數(shù)法沒有這個缺點。
表1以45 10/1010=101101 2/10102作為一個數(shù)值計算的例子,詳細展示了圖3所示的不恢復(fù)余數(shù)法算法流程圖。首先將余數(shù)尺和被除數(shù)A聯(lián)合左移一位,如果余數(shù)R的符號位S為0,將執(zhí)行減法操作,否則應(yīng)該加上除數(shù)D,如果余數(shù)大于零,則當前商位為‘1’,否則為‘0’,循環(huán)這個過程直到被除數(shù)A的所有位都完成運算。最后得商:0001002,余數(shù):000101 2。
在除法中所需要的部分余數(shù)的左移可以用余數(shù)保持固定,而用除數(shù)沿對角線右移的等效操作來代替。如圖4所示,不恢復(fù)余數(shù)陣列除法器可以用一個由可控加法/減法(CAS)單元所組成的疊接陣列來實現(xiàn)。不恢復(fù)陣列每一行所執(zhí)行的操作究竟是加法還是減法,取決于前一行輸出的符號與被除數(shù)的符號是否一致(最上面一行所執(zhí)行的初始操作通常是減法,因此最上面一行的控制線P固定置成‘1’。當出現(xiàn)不夠減時,部分余數(shù)相對于被除數(shù)來說要改變符號。這時應(yīng)該產(chǎn)生一個商位‘0’,除數(shù)首先沿對角線右移,然后加到下一行的部分余數(shù)上。當部分余數(shù)不改變它的符號時,即產(chǎn)生商位‘1’,下一行的操作應(yīng)該是減法。
3 仿真驗證
圖5的仿真結(jié)果說明了數(shù)據(jù)接收/顯示模塊的功能特點。串行高度數(shù)據(jù)接收模塊將串行數(shù)據(jù)轉(zhuǎn)換為并行報文數(shù)據(jù),從并行報文中提取出高度數(shù)據(jù)(1100h=4352,068eh=1678),不恢復(fù)余數(shù)疊接陣列除法器將多位二進制編碼的高度數(shù)據(jù)轉(zhuǎn)換為千、百、十、個位BCD碼送到掃描七段碼顯示控制器。scanout信號選擇四位七段共陽極數(shù)碼管的某一位,leddata分別對應(yīng)7個陰極引腳,對應(yīng)分段字符串“abcdefg”,實現(xiàn)一位一位輪流點亮顯示。由于視覺的記憶性,看到的是穩(wěn)定的多位十進制高度數(shù)據(jù)顯示。從仿真結(jié)果圖中可見其與前述設(shè)計思想完全吻合。
4 結(jié)論
采用不恢復(fù)余數(shù)陣列除法設(shè)計的BIN碼到BCD碼轉(zhuǎn)換器,僅需少量的移位、加/減法等操作,該算法邏輯簡單,結(jié)構(gòu)規(guī)整,速度高,非常適合實時性要求較高的場合,而且非常容易向其它進制轉(zhuǎn)換擴展。以異步串行數(shù)據(jù)接收、陣列除法及動態(tài)顯示等技術(shù)為基礎(chǔ)的脈沖雷達高度表串行高度數(shù)據(jù)接收/顯示模塊作為一個工程的子模塊,在某雷達高度表的設(shè)計中已經(jīng)得到應(yīng)用。