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

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

  1 OpenMIPS实践版主要特点

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

   

       各接口描述如下表所示: 

序号

接口名

宽度(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。

       
       2 OpenMIPS实践版文件目录

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


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

  • 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,结构如下图所示:

       这些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下载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值