基于太陽能LED照明控制系統的處理器設計
當ADD 指令進入LO 級進行取數操作時, 其之前的兩條MOVD 指令分別在EX 級與WB 級運行著, 此時從寄存器組中取數是不正確的。所以要把ADD 指令推后, 等到MOVD 指令退出流水線后, 方可進行取數。如果是第二條MOVD 指令推出流水線時ADD 進入LO 級的話, 中間需要間隔3 個流水線周期。但實際上只需間隔兩個流水線周期就夠了。這是由本處理器ALU 操作體系決定的。ALU 的第一操作數是從寄存器中直接取出, 無需通過LO 級。等價于第一操作數比第二操作數要快一個流水線周期。所以, 這里設計讓第一條MOVD指令存儲第二操作數, 當此指令完成后,ADD 進入LO 級將第二操作數取出。經過一個流水線周期ADD 指令進入EX 級時, 第二條MOVD 也把第一操作數存儲到了寄存器。
之后再經過兩個周期, 運算結果存入寄存器組。
整個過程如圖4 所示。
從第一條指令輸入到結果寫入寄存器組共用了10 個流水線周期( 20 個時鐘周期) 。考慮到指令串的流水化運行, 在大段程序中費時是指令輸入的5 個流水線按周期。實際上, 在這5 個流水線周期中的2 個間隔周期并不必須為空, 只要與本條指令沒有數據相關就可以, 例如進行兩個存儲器操作。這樣最好情況下一個加法操作只需3 個流水線周期。
5. 1. 2 分支跳轉指令流
分支跳轉指令是高級語言中經常用到的關鍵語句。現在用跳轉指令( JUMPI) 來構建條件跳轉操作。分支跳轉語句首先是要判斷條件是否成立, 如果條件成立則順序執行, 如果不成立則跳到下一程序塊執行。編譯成處理器的操作碼后變為: 送條件; 進行比較,置標志位; 根據標志位跳轉。在這種情況下, 實現一個無內容條件結構需要7 條語句( 7 個流水線周期) 。其中兩個周期可以插入無關操作, 還有兩個周期可以提前執行JUMPI 后續指令。所以最好情況下需要三個流水線周期完成。
5. 1. 3 循環語句
循環語句在高級語言中也是常用語句之一。它的實現與分支跳轉類似, 同樣是跳轉指令的應用。
循環語句中要定義一個條件變量, 通過循環體的運行改變條件變量的值, 完成后進行判斷, 符合條件跳出循環體, 否則重新開始循環體。
此種循環情況下, 循環結構共需7 條指令, 如條件允許優化NOP 指令, 最好情況下只需3 個流水線周期。在時序驗證完成后, 筆者結合XILINX 公司的Virtex2 FPGA, 利用Synplify 7. 5 對設計進行了綜合,綜合報表顯示時鐘頻率最高可到153 MHz。
5. 2 FPGA 實現
將設計下載至FPGA 后, 筆者采用名為Chipscope Pr o Analyzer 的波形觀察工具。Chipscope Pro 是采用JTAG 方式觀察FPGA 內部的信號, 再反映到終端上,與板級驗證方法原理一致, 而節省了板級布線時間。
將Chipscope Pro 設置為arm( 伺機捕獲) 狀態, 當觸發條件滿足時捕獲數據, 并且在緩沖區填滿后停止捕獲, 并將數據上傳, 由波形窗口顯示出來。
觸發條件( 復位后) 滿足時捕獲到的波形圖如圖5所示。所觀察的數據共有16 位, 其中port[ 0]2por t[ 7] 為存儲器地址輸出, port[ 8]2port[ 15] 為存儲器數據輸出。程序數我們前面所介紹過的加法操作, 并且在得到結果后利用STORE 指令輸出到總線上。程序為:
MOVD R2 1B
MOVD R1 10B
NOP
NOP
ADD R3 R2
NOP
NOP
ST ORE 11110000B R3
程序的操作是1 加2, 結果為3, 將其送到11110000B 地址, 其后仿真波形如圖6 所示。
與FPGA 中結果完全相同。設計正確。
6 結 語
本文針對太陽能LED 照明控制系統設計了一款低功耗面積小的精簡指令集處理器, 指令集共包含12 條指令。處理器綜合頻率達150 MHz, 實際在板最高工作頻率為100 MHz。系統外設包括計時器和脈寬調制模塊。能夠實現系統所需功能, 完成控制器功能。待下一步進行系統統調后進行芯片后端設計。
評論