天天看点

自制处理器OpenMIPS移植ucos-II过程之2——OpenMIPS实践版及SOPC搭建

这是第二部分,介绍了OpenMIPS实践版的主要特点、结构、文件组织,同时以OpenMIPS实践版为核心,搭建了一个小型的SOPC,该SOPC具有SDRAM控制器、GPIO控制器、flash控制器、UART控制器等,可以满足我们的验证需要。

  1 OpenMIPS实践版主要特点

      相对OpenMIPS教学版而言,OpenMIPS实践版最大的特点是引入了Wishbone总线接口,其接口如下图所示:

自制处理器OpenMIPS移植ucos-II过程之2——OpenMIPS实践版及SOPC搭建

       各接口描述如下表所示: 

序号 接口名 宽度(bit) 输入/输出 作用
1 rst 1 输入 复位信号,高电平有效
2 clk 1 输入 时钟信号
3 iwishbone_o 输出 指令wishbone总线的输出信号
4 iwishbone_i 输入 指令wishbone总线的输入信号
5 int_i 8 输入 中断信号
6 SI_TimerInt 1 输出 时钟中断信号
7 dwishbone_o 输出 数据wishbone总线的输出信号
8 dwishbone_i 输入 数据wishbone总线的输入信号

       其中iwishbone_o、dwishbone_o的类型定义如下:   type wishbone_host_out_type is record     address : std_logic_vector(31 downto 0);     data : word;     we   : std_logic;     sel  : std_logic_vector(3 downto 0);     stb  : std_logic;     cyc  : std_logic;     ack  : std_logic;   end record;

       iwishbone_i、dwishbone_i的类型定义如下:   type wishbone_host_in_type is record  data : word;  ack  : std_logic;   end record;

       这都是符合Wishbone总线规范的,读者可以搜索一下Wishbone总线规范的文档(在本文中会给出OpenMIPS的下载地址,其中有一篇文档《OpenMIPS快速入门手册(实践版)》就在附录中包含了Wishbone总线的介绍)。        OpenMIPS支持8个外部输入中断,通过int_i接口输入。        OpenMIPS内部结构如下图所示,可见内部包含一个整数单元IU、一个除法单元Div、一个寄存器文件单元Regfile,这三个单元分别对应iu.vhd、div.vhd、regfile.vhd三个源文件,其中IU内部实现了五级整数流水线,Div模块实现了32位整数除法,采用的是试商法,Regfile实现了32个32位整数寄存器。此外还有OpenMIPS.vhd文件实现了顶层模块OpenMIPS。

自制处理器OpenMIPS移植ucos-II过程之2——OpenMIPS实践版及SOPC搭建

               2 OpenMIPS实践版文件目录

       OpenMIPS实践版的文件目录如下:

自制处理器OpenMIPS移植ucos-II过程之2——OpenMIPS实践版及SOPC搭建

       各个文件夹具体说明如下:

  • rtl

       所有OpenMIPS实践版的源代码文件在该文件夹下,包括流水线文件iu.vhd、除法模块       div.vhd、寄存器文件Regfile.vhd、顶层文件OpenMIPS.vhd、宏定义文件stdlib.vhd

  • min_sopc

       包括多种IP核:GPIO、UART、SDRAM控制器、flash控制器、Wishbone总线互联矩阵等,以及一个用来测试OpenMIPS的最小SOPC的顶层文件OpenMIPS_min_sopc.vhd,在其中例化上述IP核,通过Wishbone总线互联矩阵与OpenMIPS连接在一起,形成一个SOPC。关于该SOPC的结构在后会有介绍。此处的各种IP核都是从OpenCores下载的,均符合Wishbone总线接口规范。

  • tools

       包含与具体评估板有关的一些工具,笔者主要是使用Altera的DE2作为评估板,所以tools下有一个Altera/DE2的目录,其中包含DE2的DE2_control_panel这个工具软件,可以通过该软件读写DE2上的flash芯片。

       该目录下还包括一个BinMerge.exe软件,该软件在BootLoader、SimpleOS的实验中会有作用,用来将BootLoader、SimpleOS产生的二进制文件合并在一起,具体作用会在后面的博文中介绍。

  • doc

       包含一些说明文档,具体有:《MIPS32指令集》、《MIPS Architecture for Programmers Volume III》、《OpenMIPS快速入门手册(实践版)》、《10天实现处理器——OpenMIPS成长记》,以及min_sopc文件夹下各种IP核的说明手册。

  • asm_test

       包含几个测试程序,均使用汇编编写,分别用来测试GPIO、UART、SDRAM,以及一个综合程序。该综合程序由BootLoader、SimpleOS组成,用来模拟一个操作系统的启动。在本次博文系列的第三部分“在DE2上验证OpenMISP”就以这个综合程序为例。

        3 OpenMIPS_min_sopc

       OpenMIPS只是一个处理器核,为了能够具有实际作用,还需要提供必要的组件,通过这些组件的配合,完成特定功能。        根据具体的评估板DE2所具有的硬件资源,我们添加了GPIO控制器、UART控制器、SDRAM控制器、flash控制器,通过Wishbone总线互联矩阵wb_conmax与OpenMIPS 通信,从而形成一个小型的SOPC,结构如下图所示:

自制处理器OpenMIPS移植ucos-II过程之2——OpenMIPS实践版及SOPC搭建

       这些IP核都是从OpenCores上下载的,需要根据具体评估板的情况进行设置,比如笔者根据DE2的具体情况进行例化,将SDRAM例化为16bit宽度数据总线。此外,在笔者的实验中,将GPIO口的输出设置为32个,连接到DE2上的4个7段数码管。

       OpenMIPS的数据总线接口连接到Wishbone总线互联矩阵的主接口0(即m0),OpenMIPS的指令总线接口连接到Wishbone总线互联矩阵的主接口1(即m1),SDRAM控制器连接到Wishbone总线互联矩阵的从接口0(即s0),UART控制器连接到Wishbone总线互联矩阵的从接口1(即s1),GPIO控制器连接到Wishbone总线互联矩阵的从接口2(即s2),FLASH控制器连接到Wishbone总线互联矩阵的从接口3(即s3),所以各个外部设备的寻址空间如下:

  •    SDRAM:0x00000000-0x0fffffff
  •    UART:0x10000000-0x1fffffff
  •    GPIO:0x20000000-0x2fffffff
  •    FLASH:0x30000000-0x3fffffff

       SDRAM需要在使用前进行初始化,其输出sdram_init_done可以用来指示是否初始化完毕,将该输出送到GPIO控制器,作为一个输入,这样OpenMIPS就可以通过读取GPIO的输入,判断SDRAM是否初始化完毕。

       DE2评估板的flash是nor格式的,所以,可以将flash作为启动盘,在笔者的实验中,OpenMIPS从flash读取第一条指令,也就是启动后从0x30000000处取指。这是与教学版不同的,教学版是从0x0处开始取指。

       各个IP核的使用手册在doc目录下都有提供。

       OpenMIPS实践版可以在http://bbs.eetop.cn/forum-257-1.html下载

继续阅读