在FPGA上對(duì)OC8051IP核的修改與測(cè)試
2.1 仿真調(diào)試方案
OC8051仿真調(diào)試方案如圖2所示。其原理是:在Keil軟件環(huán)境中編寫測(cè)試程序,編譯生成.hex文件并將其注入ROM的指令寄存器中。testbench負(fù)責(zé)產(chǎn)生OC8051工作時(shí)鐘及控制使能等信號(hào),并將OC8051執(zhí)行ROM中指令的結(jié)果輸出到文本/波形文件中。開發(fā)人員通過對(duì)文本/波形文件和Keil調(diào)試工具執(zhí)行測(cè)試程序的結(jié)果進(jìn)行比較,從而實(shí)現(xiàn)對(duì)邏輯錯(cuò)誤的查找與定位,并對(duì)IP核源文件進(jìn)行修改。本文引用地址:http://www.ex-cimer.com/article/191853.htm
值得注意的是,雖然Modelsim功能強(qiáng)大,可以方便地觀察到任何層次模塊信號(hào)的變化,但是OC8051 IP核的結(jié)構(gòu)和時(shí)序比較復(fù)雜,仍避免不了仿真時(shí)因?yàn)橹虚g信號(hào)多所帶來的不便。因此,在仿真調(diào)試時(shí)可尋求一些簡(jiǎn)化操作的機(jī)制??紤]到借助數(shù)據(jù)寄存器指針DPTR和累加器A,MOVX指令可以將程序執(zhí)行過程中任何寄存器的值輸出到外部RAM中,而觀察外部RAM中的值相對(duì)容易,因而本文采用了這種機(jī)制。
2.2 具體修改方法
(1)oc805 1_ext_addr_sel模塊
讀寫外部RAM地址可以由DPTR指示,也可以由Ri指示,該模塊的主要功能是選擇讀寫外部RAM地址。通過select和write信號(hào)完成對(duì)buff和state的配置,從而完成對(duì)讀寫外部RAM地址addr_out的配置。在Modelsim環(huán)境中,執(zhí)行表1中的代碼1時(shí),發(fā)現(xiàn)addz_out的變化總是比DPTR慢一個(gè)時(shí)鐘周期,因而其執(zhí)行結(jié)果是將5寫入地址為0的外部RAM。造成這種現(xiàn)象的原因是配置buff和state時(shí)采用了always進(jìn)程,本文將該部分代碼修改為:
assign state=write;
asstgn buff=select?{8h00,ri}:{dptr_hi,dptr_lo};
(2)oc8051_psw模塊
該模塊由一個(gè)8位標(biāo)志寄存器及其控制邏輯組成,用來收集指令執(zhí)行后的有關(guān)狀態(tài)。8位寄存器的各位狀態(tài)通常是在指令執(zhí)行過程中自動(dòng)形成,但也可以由用戶根據(jù)需要采用傳送指令加以改變。原設(shè)計(jì)中負(fù)責(zé)解釋傳送指令的邏輯采用if語句:
if(addr[7:3]=='OC8051_SFR_B_ACC)data_out[addr[2:O]]=cy_in;
'OC8051_SFR_B_ACC被定義為累加器A的高5位地址,用在這里顯然不對(duì)。應(yīng)該將其改為程序狀態(tài)字PSW的高5位地址'OC8051_SFR_B_PSW。
(3)oc8051_alu模塊
該模塊是一個(gè)性能極強(qiáng)的運(yùn)算器,不但可以進(jìn)行四則運(yùn)算和邏輯運(yùn)算,而且具有數(shù)據(jù)傳送、移位、程序轉(zhuǎn)移等功能。其中,程序轉(zhuǎn)移功能是當(dāng)遇到短轉(zhuǎn)移指令SJMlE’或變址轉(zhuǎn)移指令JZ、CJNE、DJNZ等時(shí),改變程序計(jì)數(shù)器PC的值,對(duì)應(yīng)原設(shè)計(jì)為always進(jìn)程中的'OC8051_ALU_PCS分支。其代碼如下:
輸入src3為PC[15:8],src2為PC[7;0],src1為目標(biāo)轉(zhuǎn)移地址rel。需要注意的是,rel是以立即數(shù)形式存在的,且為補(bǔ)碼格式(補(bǔ)碼數(shù)的加減法運(yùn)算統(tǒng)一為加法運(yùn)算)。若src1[7]=1'b1成立,則rel為一負(fù)數(shù),對(duì)應(yīng)轉(zhuǎn)移指令是往前轉(zhuǎn)移;否則,往后轉(zhuǎn)移。當(dāng)rel為負(fù)數(shù)時(shí),原設(shè)計(jì)僅考慮了:PC[7:0]≥| rel |的情況,其對(duì)目標(biāo)地址{des1,des2}的處理不全面;當(dāng)PC[7:0]|rel|時(shí),des2=src2+src1為負(fù)數(shù),借位會(huì)對(duì)des1產(chǎn)生影響,因而應(yīng)有des1=src3-8'h1。因此,將該部分代碼修改為:
其中c是借位標(biāo)志位,用來標(biāo)識(shí)程序轉(zhuǎn)移時(shí)PC[7:0]對(duì)PC[15:8]的影響。
評(píng)論