一、EMIF總線概述
外部存儲器總線(EMIF, External Memory Interface)總線是京微雅格(CME)的8051硬核與FPGA之間的并行8位總線接口,主要的信號有6個,分別為:
memaddr[22:0]:23位地址總線,對應8M地址空間;
memdatao[7:0]:8位數(shù)據(jù)輸出總線;
memdatai[7:0]:8位數(shù)據(jù)輸入總線;
memrd:總線讀信號;
memwr:總線寫信號;
memack:總線應答信號;
與EMIF操作時序有關的8051的內(nèi)部寄存器為CKCON寄存器,一般8051的初始化程序需要在主函數(shù)的初始化更改該寄存器的初始化值,以實現(xiàn)最快的總線訪問效率。
1、EMIF總線相關的MCU寄存器:CKCON
CKCON主要作用是設置存儲器地址總線memaddr[22:0]和讀寫memwr/ memerd信號的寬度,已實現(xiàn)對不同外設時序的操作,若寬度仍不夠,也可以通過memack實現(xiàn)硬件延時,理論上可以實現(xiàn)任意寬度的地址總線地址和讀寫信號。
CKCON寄存器的默認值為:0x71
通過設置CKCON的第4-6位,可以改變CPU的運行效率,最小值是001,不可設置為000;當設置為111,運行的效率最慢;所以推薦客戶在CPU開始運行就改變4-6位的值為001,以使CPU運行的效率最快。
通過設置CKCON的第0-2位,可以改變EMIF總線的memrd,memwr,memaddr的寬度,最小值是000,對應memrd,memwr,memaddr的寬度為1個時鐘周期;當設置為111時,對應memrd,memwr,memaddr的寬度為8個時鐘周期;所以推薦客戶在CPU開始運行就改變4-6位的值為000,以使EMIF總線訪問的效率最快。
所以推薦用戶在8051主程序程序一開始就改變CKCON的值為0x10。
2、基于Data Banking的總線地址擴展規(guī)則:
CME的8051處理器為馮諾依曼結構,即程序總線和數(shù)據(jù)總線統(tǒng)一編址。EMIF地址總線的地址位為23位,對應8M Bytes的地址空間。8051是通過Data Banking的方式實現(xiàn)地址總線的擴展。8051每個bank的地址空間為32K Bytes,共有256個bank。地址空間的分布如下圖所示,這里僅對外部數(shù)據(jù)存儲空間做介紹:
與外部數(shù)據(jù)存儲空間有關的寄存器為:
D_PAGESEL(默認初始值為0x01,即指向Bank 1地址空間)
因為D_PAGESEL為8位寄存器,所以剛好對應256個bank。D_PAGESEL的值對應地址總線上的memaddr[22:15]的值,即地址總線的高8位地址總線。注意:D_PAGESEL的值不可為0,因為當為0時,將會與Common Bank的地址空間重疊(0-7FFFF)。