張 彬,呂東明
(中國電子科技集團公司第四十七研究所,沈陽110000)
Intel公司的16位高精度微處理器M80C186將15~20個最常見的微處理器系統組件集成在一個芯片上,它具有很多8086系列處理器的新特性,例如DRAM刷新控制單元、直接數字接口以及省電模式等。此外,M80C186在原有的8086指令集上增加了10種新的指令,可以在兼容模式和增強模式下工作。在增強模式下增加了節能控制、DRAM刷新、協處理器接口這三個新功能[1]。M80C186以其豐富的功能及強大的運算能力在通信系統、信號處理系統中有著廣泛的應用。
M80C186具有16根數據線和20根地址線,可尋址空間為1MB,I/O地址空間為64kB。它的硬件僅支持對整數的算術運算,不能進行高精度的數值運算,而高性能數學協處理器M80C187的誕生為解決該問題提供了新的可能[2]。M80C187與M80C186的目標代碼是兼容的,能夠并行工作,協同分工。故此可基于各自特點,將兩者配合起來使用,設計出一套改進的聯合驗證系統。
微處理器M80C186的中央處理單元(CPU)主要包含總線接口單元和執行單元。總線接口單元包括6字節的隊列和16位的段寄存器。執行單元包含16位算數邏輯單元和16位通用寄存器組,以及用作總體控制的程序控制器[3]。片內電路還包含時鐘發生器、可編程定時器、可編程中斷控制器、可編程DMA控制器、片選單元等。
M80C186沒有存儲單元和一些必要的外設,不能構成一個完整的系統,因此需要用戶自己設計電路來搭建系統。在所設計的聯合驗證系統中,除了占主體地位的16位高精度微處理器M80C186與高性能數學協處理器M80C187之外,還包括以下幾個重要組成部分:外部時鐘源、電源電路、串口通信電路、地址鎖存器、緩沖器(數據收發器)、存儲器(包含數據存儲器和程序存儲器)等。系統的總體設計框圖如圖1所示。

圖1 M80C186與M80C187聯合驗證系統總體框圖
作為控制系統的核心,微處理器M80C186與協處理器M80C187通過BUSY、ERROR、PEREQ、NCS等端口直接連接,以并行協同的方式進行工作。微處理器和協處理器供電電源均為5V直流電。時鐘發生器為M80C186提供系統時鐘。M80C186的數據線和地址線是分時復用的,因此需要地址鎖存器(LATCH)將地址信息保存起來,為外設提供地址信息[4]。當系統總線所掛外設過多時,需要利用緩沖器(BUFFER)來增加總線的驅動能力。M80C186內部也沒有存儲器,因此需要外接程序存儲器(E2PROM)和數據存儲器(RAM)。增加串口(Serial Port)的目的是為了將微處理器與PC建立通信,進而把系統的運算結果輸出到PC上。
此聯合驗證系統設計中最重要的是M80C186和M80C187的協同電路設計。在該協同電路中,主處理器M80C186處于最大工作模式,一切控制指令均由M80C186發出,M80C187作為協處理器進行高精度的數值浮點運算[5]。
高性能數學協處理器M80C187的指令集增加了70多種助記符用來進行復雜的數值計算。它通過浮點運算和BCD數據擴展了8086架構,且兩者的外圍接口電路和指令集完全兼容,這為硬件電路設計和軟件編寫都帶來極大的便利條件。M80C187的接入,可大幅提高系統的數值運算速度與運算能力。協同電路的設計架構如圖2所示。

圖2 M80C186和M80C187的協同電路架構
M80C186與M80C187的部分控制接口通過通過BUSY、ERROR、PEREQ、NCS四個接口進行信息交互,這四個接口的信號分別與TEST、MCS1、MCS0、MCS3這四個信號進行復用。當M80C186處于非復位狀態時,M80C187會自動將M80C186置于增強模式,并自動配置引腳功能,此時M80C186處于編程就緒狀態[6]。
AD0~AD15是數據與地址的復用總線,在總線周期的T1狀態,用作總線的低16位地址總線;在總線的T2、T3、Tw時,用作數據總線。
AD16~AD19是狀態與地址的復用總線,在總線周期的T1狀態,用作高4位地址線;在總線的T2、T3、Tw時,用作狀態信號線。通過引腳的分時復用,可以在不同的時刻傳遞不同的信息,進而減少引腳數量又不縮減芯片的功能。
在此協同電路中,M80C186和系統總線相連,當需要M80C187進行高精度數據運算時,M80C186的處理器擴展請求引腳(PEREQ)發出總線請求進行取指令,從CPU獲取總線控制權限,由M80C187從數據總線獲取數據并準備操作數,忙信號(BUSY)有效表示M80C187的數值執行單元正在執行數值運算指令。M80C186的讀、寫信號直接與M80C187的讀、寫引腳相連。該設計減少了總線上掛載的外設,也降低了系統的復雜度。
M80C186的AD0~AD15是數據與地址的復用總線,AD16~AD19是狀態與地址的復用總線。它們需要地址鎖存器將地址信息保留起來,為存儲器等外設提供地址信息。此處選用的鎖存器是三態輸出的8路D類鎖存器74ACT573T芯片。
采用三片74ACT573T芯片對地址信息AD0~AD19進行鎖存,設計出的鎖存電路如圖3所示。將微處理器M80C186的地址鎖存信號ALE連接到鎖存器的LE引腳。鎖存器的輸出使能引腳OE直接接地。第一片74ACT573T對地址信息AD0~AD7進行鎖存;第二片74ACT573T對地址信息AD8~AD15進行鎖存,第三片74ACT573T對地址信息AD16~AD19進行鎖存。

圖3 三片74ACT573T芯片構成鎖存電路
當系統總線連接外設較多時,就需要為系統增加緩沖器電路,以便增加總線的驅動能力。此處設計由兩片74LS245芯片構成緩沖電路,如圖4所示。微處理器M80C186的數據總線允許信號DEN接到74LS245芯片的使能引腳OE上。M80C186的數據收發信號DT/R接到74LS245芯片的DIR引腳上。這樣通過兩片74LS245芯片組成的數據收發電路,對M80C186的數據傳輸起到緩沖的作用,增加了總線的驅動能力。

圖4 兩片74LS245芯片構成緩沖電路
在所設計的聯合驗證系統中,存儲器以字節為單位進行地址分配。容量為1MB的存儲空間被分成了奇體單元和偶體單元。奇體單元的地址是奇數,偶體單元的地址為偶數,它們各自的存儲空間大小即為512kB。但在電路的邏輯上,M80C186的存儲單元還是按照地址順序進行排列。
在此設計出基于AT28C256(E2PROM)芯片的程序存儲電路,用來讀取程序代碼并加載運行。電路選用兩片32k×8bit的AT28C256芯片,一片作為奇體存儲單元,另一片作為偶體存儲單元,如圖5所示。在電路中,M80C186的片選信號UCS連接AT28C256芯片的片選引腳CE。M80C186的讀取信號RD連接AT28C256芯片的使能引腳OE。M80C186的數據總線的高8位與奇體單元的數據線相連,低8位與偶體單元的數據線相連。

圖5 兩片AT28C256芯片構成程序存儲電路
數據存儲電路則是基于JM7C185(RAM)芯片進行設計,用來保存臨時數據。該部分電路采用兩片8kB×8bit的JM7C185芯片與一片四通道或門邏輯器件CD4071,一共可以存儲8kB×16bit的數據,所設計電路如圖6所示。M80C186的片選信號LCS連接JM7C185芯片的片選引腳CS。對于低字節RAM,M80C186的LA0和RD作或邏輯運算,輸出接到第一片JM7C185的使能引腳OE。M80C186的LA0和WR作或邏輯運算,輸出接到第一片JM7C185的寫引腳WE。同理,對于高字節RAM,M80C186的LA0和RD作或邏輯運算,輸出接到第二片JM7C185的使能引腳OE,M80C186的LA0和WR作或邏輯運算,輸出接到第二片JM7C185的寫引腳WE。

圖6 兩片JM7C185芯片構成的數據存儲電路
M80C186不具有串口功能,因此要想把運算結果輸出到PC上,需要設計串口電路,讓M80C186和M80C187聯合驗證系統與PC建立通信,為此所設計的基于8251芯片的串口通信電路如圖7所示。

圖7 基于8251的串口通信電路
在該電路中,M80C186的片選信號PCS接至8251的片選引腳CS;地址信號LA0接至8251的尋址引腳CD;讀、寫信號分別接至8251的讀、寫引腳。8251芯片采用查詢的方式與M80C186進行信息交換。當8251的狀態寄存器D0為信號1時,M80C186可以向8251數據端口寫入數據,完成串行數據的發送。當8251的狀態寄存器D1為1信號時,M80C186可以向8251數據端口讀出數據,完成一幀數據的接收。
基于上述設計方案,依據原理設計圖,對實際電路進行布局布線、PCB制作,最后搭建出此款基于微處理器M80C186和協處理器M80C187的聯合驗證電路,實物圖如圖8所示。M80C187協處理器主要包含三個單元:控制單元、數據接口單元和浮點運算單元。控制單元通過數據接口單元與微處理器M80C186進行通信[7]。M80C187的指令分為六個功能組:數據傳輸、計算、比較、超越、常數、控制。M80C187的浮點運算單元在控制單元和數據接口單元的監控下進行取指、執行。為驗證該系統的雙精度浮點數運算能力,首先對E2PROM進行編程使系統進行常數計算:3+5。然后通過邏輯分析儀進行多通道信號采集、邏輯分析與時序判定,得到系統的運算結果(雙精度浮點數)并與標準值進行對比,進而驗證系統的可操作性與準確性。邏輯分析儀采集的信號如圖9所示。

圖8 所設計聯合驗證電路實物圖

圖9 邏輯分析儀采集信號
利用邏輯分析儀采集以下信號:總線上的數據、PEREQ、BUSY、ERROR、NPRD、NPWR、CMD0、CMD1、NPS1、RESET、CLK。其中,CLK為系統時鐘;PEREQ信號有效表示M80C187從M80C186獲取局部總線控制權限;BUSY信號有效表示M80C187的浮點運算單元正在執行指令。
在系統發生錯誤時,ERROR信號變為有效,BUSY信號變為無效。M80C187的接口電路狀態始終與M80C186保持一致。為了便于指令的區分,M80C187的指令都是以“11011”開始的。M80C187內部包含了臨時寄存器、移位寄存器等。當系統執行逃逸指令(ESC)時,無需數值執行部件參加運算,由控制部件單獨完成運算[8]。
通過分析圖9的信號時序可知,系統運算的結果為雙精度浮點數“41000000”,該數表示十進制數“8”,因此系統計算正確。同配置下的后續實驗也進一步證明了該聯合測試系統可以計算三角函數、指數和對數等高精度浮點數數值運算。
M80C186和M80C187的聯合驗證平臺的設計不僅可以用于驗證M80C187數字協處理器的功能,還可以用于驗證M80C186的一些其他重要功能,為設計M80C187協處理器提供有力的參考依據。驗證系統的整體電路的設計可以為以后基于80X86、80X87、8096、8XC196等一系列16位MCU應用驗證的硬件設計提供參考依據。