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