zoukankan      html  css  js  c++  java
  • 自己写CPU第五级(5)——测试逻辑、实现移动和空指令

    我们会继续上传新书《自己写CPU》(未公布),今天是19片,我每星期试试4


    5.6 測试程序1——測试逻辑操作实现效果

          编写例如以下測试程序用于检验逻辑操作指令是否实现正确,文件名称命名为inst_rom.S,在本附带光盘CodeChapter5_2AsmTestLogicInstTest文件夹下有測试程序源文件。

    .org 0x0
    .global _start
    .set noat
    _start:
    lui  $1,0x0101           # $1 = 0x01010000
    ori  $1,$1,0x0101        # $1 = $1 | 0x0101 = 0x01010101
    ori  $2,$1,0x1100        # $2 = $1 | 0x1100 = 0x01011101
    or   $1,$1,$2            # $1 = $1 | $2     = 0x01011101
    andi $3,$1,0x00fe        # $3 = $1 & 0x00fe = 0x00000000
    and  $1,$3,$1            # $1 = $3 & $1     = 0x00000000
    xori $4,$1,0xff00        # $4 = $1 ^ 0xff00 = 0x0000ff00
    xor  $1,$4,$1            # $1 = $4 ^ $1     = 0x0000ff00
    nor  $1,$4,$1            # $1 = $4 ~^ $1    = 0xffff00ff

          在程序的凝视中给出了程序预期运行效果,在这里就是寄存器$1-$4的变化情况。

    将上述inst_rom.S文件,与第4章建立的Bin2Mem.exeMakefileram.ld这三个文件复制到Ubuntu虚拟机中的同一个文件夹下。打开终端,使用cd命令进入该文件夹,然后输入make  all,就可以得到用于ModelSim仿真的inst_rom.data文件。

          在ModelSim中新建一个project,加入本书光盘CodeChapter5_2文件夹下的全部.v文件,然后能够编译。

    再复制上面得到的inst_rom.data文件到ModelSimproject的文件夹下。就能够进行仿真了。上述仿真步骤以后不再反复说明。

          ModelSim仿真结果如图5-16所看到的,regs[1]regs[2]regs[3]regs[4]各自是寄存器$1$2$3$4,观察这4个寄存器值的变化,可知符合预期,所以OpenMIPS正确实现了逻辑操作指令。


    5.7 測试程序2——測试移位操作与空指令实现效果

          编写例如以下測试程序用于检验移位操作与空指令是否实现正确,文件名称依旧命名为inst_rom.S,在本书光盘的CodeChapter5_2AsmTestShiftInstTest文件夹下有測试程序源文件。

    .org 0x0
    .set noat
    .global _start
    _start:
    lui   $2,0x0404    # $2 = 0x04040000
    ori   $2,$2,0x0404 # $2 = 0x04040000 | 0x0404 = 0x04040404
    ori   $7,$0,0x7
    ori   $5,$0,0x5
    ori   $8,$0,0x8
    sync
    sll   $2,$2,8      # $2 = 0x40404040 sll 8  = 0x04040400
    sllv  $2,$2,$7     # $2 = 0x04040400 sll 7  = 0x02020000
    srl   $2,$2,8      # $2 = 0x02020000 srl 8  = 0x00020200
    srlv  $2,$2,$5     # $2 = 0x00020200 srl 5  = 0x00001010
    nop
    pref
    sll   $2,$2,19     # $2 = 0x00001010 sll 19 = 0x80800000
    ssnop
    sra   $2,$2,16     # $2 = 0x80800000 sra 16 = 0xffff8080
    srav  $2,$2,$8     # $2 = 0xffff8080 sra 8  = 0xffffff80 

          在程序的凝视中给出了程序预期运行效果,主要就是寄存器$2的变化情况。

    ModelSim仿真结果如图5-17所看到的,观察寄存器$2的变化能够知道OpenMIPS正确实现了移位操作指令与空指令。


    5.8 小结

          本章首先分析了流水线中存在的数据相关问题,然后使用数据前推的方法攻克了数据相关问题。随后改动OpenMIPS。实现了对逻辑、移位操作和空指令的支持,主要改动的是译码阶段的ID模块、运行阶段的EX模块。

    当中。在ID模块加入对新指令的译码,在EX模块加入对新的运算类型的支持。


    将从下一个操作命令,将实现,敬请关注!

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    优化SQL Server数据库的经验总结
    #main和.main区别
    通过SQL把n条记录插入表中
    11月6日到8日参加微软Tech.ED2008大会
    NOIP2017 D2T1奶酪
    NOIP2017 D1T2时间复杂度
    NOIP2017 D2T2宝藏
    NOIP2017 D1T1小凯的疑惑
    NOIP2017 D1T3逛公园
    NOIP2017 D2T3列队
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4615344.html
Copyright © 2011-2022 走看看