一、EMIF总线概述
外部存储器总线(EMIF, External Memory Interface)总线是京微雅格(CME)的8051硬核与FPGA之间的并行8位总线接口,主要的信号有6个,分别为:
memaddr[22:0]:23位地址总线,对应8M地址空间;
memdatao[7:0]:8位数据输出总线;
memdatai[7:0]:8位数据输入总线;
memrd:总线读信号;
memwr:总线写信号;
memack:总线应答信号;
与EMIF操作时序有关的8051的内部寄存器为CKCON寄存器,一般8051的初始化程序需要在主函数的初始化更改该寄存器的初始化值,以实现最快的总线访问效率。
1、EMIF总线相关的MCU寄存器:CKCON
CKCON主要作用是设置存储器地址总线memaddr[22:0]和读写memwr/ memerd信号的宽度,已实现对不同外设时序的操作,若宽度仍不够,也可以通过memack实现硬件延时,理论上可以实现任意宽度的地址总线地址和读写信号。
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的总线地址扩展规则:
CME的8051处理器为冯诺依曼结构,即程序总线和数据总线统一编址。EMIF地址总线的地址位为23位,对应8M Bytes的地址空间。8051是通过Data Banking的方式实现地址总线的扩展。8051每个bank的地址空间为32K Bytes,共有256个bank。地址空间的分布如下图所示,这里仅对外部数据存储空间做介绍:
与外部数据存储空间有关的寄存器为:
D_PAGESEL(默认初始值为0x01,即指向Bank 1地址空间)
因为D_PAGESEL为8位寄存器,所以刚好对应256个bank。D_PAGESEL的值对应地址总线上的memaddr[22:15]的值,即地址总线的高8位地址总线。注意:D_PAGESEL的值不可为0,因为当为0时,将会与Common Bank的地址空间重叠(0-7FFFF)。