在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 21000|回复: 37

[原创] 开源mips32r2p7及其SoC系统

[复制链接]
发表于 2014-3-10 16:29:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 504472832 于 2014-3-11 20:18 编辑

为了感谢版主leishangwen 和 eetop上很多前辈和同学对开源和MIPS的支持,我也来贡献一个开源处理器mips32r2p7及由其搭建的SoC系统,有空的同学可以玩玩。放在OpenMIPS这个版块下,望leishangwen不要介意。



先大概解释下这个名字的意思,mips代表选用的是mips的体系结构;32说明这是个32位的CPU;r2说明兼容的指令集是release 2;p7说明CPU采用了7级流水线。(以前在opencores上看到了Utah大学发布的mips32r1的IP核,感觉写的很不错)




mips32r2p7具有以下特点:
1. 七级流水线:取指1、取指2、读寄存器、执行、访存、异常、写回;
2. 32位数据与地址宽度;
3. 总线采用AHB和APB协议(其中AHB频率50MHz,APB频率10MHz);
4. 静态可配置的大/小端模式;
5. 精确异常,支持外部中断;
6. 分立的指令和数据Cache,可配置为1-4way,1~256KB,突发传输,不过目前只支持LRU替换策略和写回模式‘;
7. 基于分支历史的分支预测,分支历史表(BHT)大小可配置;
8. 支持返回地址预测,返回预测堆栈(RPS)大小可配置;
9. 支持绝大部分整数指令;
10. 支持C编译器(mips-sde-elf-gcc);
11. 支持ucos ii 操作系统;
12. 可综合,synplify_premier综合后报的DE2_115(Cyclone IV E)上能跑的最大频率位66MHz;
13. 性能dhrystone:1.40DMIPS/MHz,Coremark: 2.34 CoreMarks/MHz;貌似和LEON3差不多;
         (配置:Cache:4ways 4KB;  BHT:512;  RPS:8;gcc:-O3; 用MIPS的performance counter算出来的,希望没算错




SoC包含以下部分:
1. mips32r2p7:当然就是上述CPU;
2. ahb_matrix:AHB总线互联矩阵,支持1~16个master,1~16个slave,由Leon3上的互联器改编而来;
3. 存储器控制器:目前只包含flash和sdram,挂在ahb_matrix下,均支持突发传输。flash控制器自己写的,只支持DE2_115上的flash,但改为支持其他的flash应该也不复杂;sdram控制器用的是opencores上的sdr_ctrl项目,不过将其总线改为了AHB;
4. ahb2apb_bridge:ahb转apb的桥接器,目前只支持同源的异步时钟,支持1~16个slave;
5. 外设IP:目前只有gpio和uart的IP,挂在ahb2apb_bridge下;
(以上IP能在mips32r2p7/rtl目录下找到)




由于目前在外面实习,手头没有开发板,所以只能做到仿真这一步。不过目前已经通过了门级的仿真,修修外设的时序,跑起来应该问题不大,等4、5月份回学校再上板调试;
仿真所用到的model如下:
flash: Spansion公司出的s29gl064n01.v model,和DE2_115开发板上的一致;
sdram: 由于ISSI公司的model比较少,没有找到相应的型号model,所以采用了micron公司的mt48lc4m32b2.v;
gpio:自己写的,当IO口的值改变时,用$display打印出信息;
uart:自己写的,将输出的结果打印,同时写到仿真目录的uart.log文件里;
(以上model能在mips32r2p7/model目录下找到)


建立环境流程(很遗憾笔记本装了linux系统,给大家带来不便,不过对于IC/FPGA来说,还是linux比较好用些):
1. 安装linux(必须),支持的版本:rhel(推荐)、centos、ubuntu、fedora;
2. 安装verilog仿真工具,并xxx(必须),可供选择的有:vcs、incisiv、modelsim;
3. 安装verdi,并xxx(可选),想看波形的安装;
4. 安装mips-sde-elf-gcc,想调软件的安装;
5. 安装synplify,quartus,并xxx(可选),想重新综合的安装;
6. 将mips32r2p7.tar.bz2的包解压到linux任意有rwx权限的目录下,例如/home/yourname/
7. 设置环境变量,打开mips32r2p7/env.sh文件,根据实际情况修改一下变量:
        以下一个变量必须设置,
        export PROJ_HOME=        (修改为工程所在的目录,例如export PROJ_HOME=/home/wzk/Projects/mips32r2p7
        以下三个变量设置一个即可,
        export VCS_HOME=         (修改为VCS的安装目录,例如export VCS_HOME=/home/wzk/Tools/synopsys/vcs_mx_vH-2013.06)
        export INCISIV_HOME=    (修改为INCISIV的安装目录,例如export INCISIV_HOME=/home/wzk/Tools/cadence/incisiv-13.20.002
        export MODELSIM_HOME=(修改为MODELSIM的安装目录,例如MODELSIM_HOME=/home/wzk/Tools/mentor/questasim-                                                                                                           10.2b/questasim/linux_x86_64)
        以下变量可根据需求选择性设置,
        export VERDI_HOME=/home/wzk/Tools/synopsys/verdi3-2012.10
        export QUARTUS_HOME=/home/wzk/Tools/altera/13.1/quartus
        export SYNPLIFY_HOME=/home/wzk/Tools/synopsys/fpga_vI-2013.09-SP1
        export MIPS_HOME=/home/wzk/Tools/Sourcery_CodeBench_Lite_for_MIPS_ELF
8. source env.sh,使环境变量生效,每次开启新的terminal都要source下env.sh这个文件;
9. 新建一个仿真目录,例如mips32r2p7/sim
10. 输入命令sims case [-g] [-d] [-vcs/-incisiv/-modelsim] [-64]
     case:case的名字,目前有的case有:gpio_test、uart_test、dhrystone、coremark、ucos_ii;
     -g:   表示用synplify综合的网表文件来跑仿真,而不是默认的rtl文件,网表文件我已经综合好了;
     -d:   表示将仿真时的波形dump出来,没有装verdi的就不要加这个选项;
     -vcs/-incisiv/-modelsim:表示用那个工具来跑仿真,同理;如果不加这个命令,命令会自动根据env.sh寻找存在的工具;
     -64:  表示采用64位的工具跑仿真;
     举几个例子:
     1. 比如想用modelsim跑dhrystone的rtl仿真,不用dump波形,命令是:sims dhrystone -modelsim
     2. 比如想用vcs跑coremark的rtl仿真,并dump波形;命令是:sims coremark -d -vcs
     3. 比如想用incisiv跑ucos ii的gate仿真,并dump波形,命令是:sims ucos_ii -g -d -incisiv
     其实这个命令就是个简单的shell脚本,mips32r2p7/bin/sims
11. 如果没什么报出错误,之后喝杯水看看电影,等结果就行了;对于会执行完的程序(从main返回),仿真会自动停止;对于不会执行完的程序,例如         ucos ii的例子,需要手动停下来,Ctrl+C or Ctrl+4;
12. 跑完了查看下log和uart.log文件,看看输出结果是否正确;
13. 对于装了verdi,加了-d选项跑仿真的,可以在仿真目录下运行./verdi.cmd来启动verdi,查看波形;
14. 如果想改程序,可以到mips32r2p7/software/demos下修改;


dhrystone结果(mips32r2p7/sim_dhrystone/uart.log):
Dhrystone Benchmark, Version 2.1 (Language: C)
Program compiled without 'register' attribute
Execution starts, 10000 runs through Dhrystone
Execution ends
Final values of the variables used in the benchmark:
Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           c
        should be:   c
Ch_2_Glob:           c
        should be:   c
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    10010
        should be:   Number_Of_Runs + 10
Ptr_Glob->
  Ptr_Comp:          402652992
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->
  Ptr_Comp:          402652992
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING


DHRYSTONE Result:
The dhrystone program runs 4052907 clock cycles
This CPU is: 1.40 DMIPS/MHz



Coremark结果(mips32r2p7/sim_coremark/uart.log)
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 17037059
Total time (secs): 0
Iterations       : 40
Compiler version : GCC4.8.1
Compiler flags   : -O3
Memory location  : STATIC
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x65c5
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0     : 2.34 CoreMarks/MHz


QQ: 491179885email: wang.zekun@163.com


工程文件分享:
v0.5.0: 链接: http://pan.baidu.com/s/1c0xNlg0 密码: dgfd
            first release
v0.5.1: 链接: http://pan.baidu.com/s/1sj4iu1R 密码: 83g8

            fix some bugs in script file;
            update netlist;
发表于 2014-3-10 19:32:48 | 显示全部楼层
本帖最后由 leishangwen 于 2014-3-10 19:34 编辑

厉害,学习了,能不能讲一讲设计思路呢?最好发个教程,仅core文件就有4000多行
发表于 2014-3-10 19:36:44 | 显示全部楼层
回复 1# 504472832


    感谢504472832的无私奉献,
发表于 2014-3-11 10:40:31 | 显示全部楼层
楼主能否留下QQ或邮箱
发表于 2014-3-12 17:44:08 | 显示全部楼层
高手在民间啊
发表于 2014-5-8 19:14:07 | 显示全部楼层
厉害了,顶起来
发表于 2014-5-10 14:34:53 | 显示全部楼层
十分感谢楼主的分享的软件和项目
发表于 2014-7-8 19:43:05 | 显示全部楼层
牛人...好厉害
发表于 2014-8-13 21:58:43 | 显示全部楼层
发表于 2014-9-2 09:54:55 | 显示全部楼层
楼主厉害!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 15:21 , Processed in 0.036193 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表