基于FPGA和BU-65170的1553B遠(yuǎn)程終端設(shè)計與實現(xiàn)
3.1 讀/寫模塊
根據(jù)芯片手冊給出的CPU讀寫時序圖編寫程序,在FPGA中實現(xiàn)對BU-65170寄存器和內(nèi)部RAM進(jìn)行讀寫的模塊。讀寫模塊的仿真時序圖如圖4和圖5所示。本文引用地址:http://www.ex-cimer.com/article/189492.htm
在讀寫過程中,信號BU_RD_WR為‘1’時表示對BU-65170進(jìn)行讀操作,為‘0’時為寫操作;信號BU_MEM_REG為‘1’時表示對內(nèi)部RAM進(jìn)行讀/寫,為‘0’時表示對寄存器進(jìn)行讀/寫。在零等待模式中,信號BU_STRBD和BU_SELECT(可與BU_STRBD綁定,所以沒有給出)控制著讀/寫操作的開始。
在長STRBD模式下SELECT和STRBD同時為低電平的第2個CLK上升沿,內(nèi)部鎖存MEM_REG和RD_WR信號;短STRBD模式下STRBD上升沿內(nèi)部鎖存MEM_REG和RD_WR信號??紤]到容易滿足時序要求,采用長STRBD模式。當(dāng)BU-65170鎖存住MEM_REG或RD_WR信號后,BU_READY會出現(xiàn)一個上升沿,緊接著當(dāng)BU_READY出現(xiàn)下降沿時,表示BU-65170內(nèi)部傳送周期已經(jīng)結(jié)束。
在16位零等待模式下,寫一個內(nèi)部存儲單元或寄存器時,只需執(zhí)行一次寫操作,使該字的地址和數(shù)據(jù)呈現(xiàn)在地址總線和數(shù)據(jù)總線上即可。而讀一個內(nèi)部存儲單元或寄存器時,需要進(jìn)行兩次讀操作。第一次讀時,要讀單元的地址和位置出現(xiàn)在A13-A00和MEM_REG上,這個周期獨處的數(shù)據(jù)應(yīng)忽略掉;第二次讀時,相應(yīng)的數(shù)據(jù)會出現(xiàn)在數(shù)據(jù)總線上。
因此,如果FPGA要執(zhí)行一個多字讀操作,地址總是早于對應(yīng)的讀出數(shù)據(jù),在同一個周期上,地址總線上出現(xiàn)下一個字的地址,數(shù)據(jù)總線上出現(xiàn)前一個字的讀出數(shù)據(jù)。
3.2 配置模塊
BU-65170有17個寄存器,通過配置這些寄存器來選擇工作模式和具體功能。選擇增強(qiáng)模式、增強(qiáng)中斷使能模式,使能RT子地址控制字中斷,服務(wù)請求自動清除。初始化流程如圖6所示,寄存器詳細(xì)配置如表3所示,具體子地址設(shè)置如表4所示。
3.3 時鐘模塊
使用40 MHz的外部晶振作為FPGA的時鐘輸入,然后用FPGA自帶DCM模塊分頻得到16 MHz主時鐘,作為其余模塊的全局時鐘,仿真和實際波形測試表明全局時鐘穩(wěn)定性良好,滿足系統(tǒng)要求。
3.4 RS 422控制及UART模塊
RS 422模塊實現(xiàn)了RS 422通信功能,一方面滿足了工程要求;另一方面也使調(diào)試1553B系統(tǒng)變得方便明了,因為1553B發(fā)送過來的數(shù)據(jù)可以立即通過RS 422轉(zhuǎn)RS 232接口顯示在PC機(jī)上,同理,可以通過PC機(jī)發(fā)送數(shù)據(jù)到1553B的總線控制器。1553B總線接收數(shù)據(jù)的過程如下:RS 422端口發(fā)送數(shù)據(jù)到FPGA,將數(shù)據(jù)緩存在FIFO中,RT接收到發(fā)送命令后,F(xiàn)PGA把FIFO中的數(shù)據(jù)寫入RT相應(yīng)的發(fā)送子地址,最后再由RT發(fā)送給BC。類似地,1553B總線發(fā)送數(shù)據(jù)的過程如下:RT接收到接收命令后,F(xiàn)PGA立刻把數(shù)據(jù)從相應(yīng)子地址讀出,并傳送給RS 422模塊,再通過UART將數(shù)據(jù)發(fā)出。
UART采用10位異步通信方式,即1個起始位,8個數(shù)據(jù)位,1個停止位,如圖7所示,波特率為9 600 b/s。RS 422控制模塊內(nèi)部包含一個分頻模塊,將產(chǎn)生RS 422接口定義中的收發(fā)所需的波特率。通過對于系統(tǒng)時鐘的分頻,產(chǎn)生波特率為9 600 b/s和153 600的信號。
接收狀態(tài)機(jī)見圖8。當(dāng)檢測到起始位時,首先檢驗起始位是否正確,如果正確,立即采樣數(shù)據(jù)位,否則就返回空閑狀態(tài)。當(dāng)采樣計數(shù)器計到8后判斷下一位是否為停止位,若不是,則丟棄數(shù)據(jù)并進(jìn)入空閑狀態(tài);若是,則把數(shù)據(jù)存入寄存器后進(jìn)入空閑狀態(tài),結(jié)束一次成功的接收。為了提高正確率,還采用三模冗余算法。UART發(fā)送過程與接收類似,在收到發(fā)送信號后將需要發(fā)送的數(shù)據(jù)存入緩存,在使能有效和緩存不空的情況下開始傳輸。此時指針開始計數(shù),首先發(fā)送起始位‘0’,接著一次發(fā)送8 b數(shù)據(jù),最后發(fā)送停止位‘1’,結(jié)束一次發(fā)送過程。
fpga相關(guān)文章:fpga是什么
評論