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