zoukankan      html  css  js  c++  java
  • Verilog hdl 实现单周期cpu

    参考计组实验测试指令 - 简书,添加了一些细节。

    1.添加 bne指令

    修改 ctrl.v


     

     

     

    之后修改mipstestloopjal_sim.asm,mars dump 为 bnetest.dat


     

    修改sccomp_tb


     

    modelsim编译,模拟。信号添加sccomp_tb: u_ctrl -> i_bne ,npc,  pc


     

    可见i_bne控制信号为1时,npc变为44。添加bne成功

    2.添加jr指令

    先看其格式。


     

    R型指令。

    故在ctrl.v如下修改。


     

    ctrl.v又两处修改


     

    然后在NPC.v修改。注意添加参数和input


     

     

     

    =RD1的原因可见sccpu.v


     

    在ctrl_encode_def 定义NPC_JR


     

    在sccpu.v添加参数  .RD1


     

    然后写测试程序

    $ra先赋值为4.这样应该会不断循环。

    导出测试


     

    勿忘修改sccomp_tb


     

    波形图可见PC从1c变到设定的4。添加成功


     

    3.添加JALR


     

    ctrl.v


     

     

     

     

     

    JALR指令格式为 jalr rs

    无条件跳转到由寄存器rs指定的指令,并将下一条指令的地址保存到寄存器$ra中

    测试代码


     

    可见从14跳到4,


     

    并且$ra 记录 18


     

    4.添加NOR指令


     

     

     

    在alu.v中


     

    测试代码


     

    波形:


     

    寄存器:


     

    5.添加sll & sra & srl指令

    注意这里做了扩展


     

    注意同时修改了input ALUOp的宽度


     

    然后在ctrl.v中

    写寄存器

    注意只改了RegWrite,下面的RD没改


     

     

    添加输出


     

     

     

     

    在sccpu.v中


     

     

     

     

     

    测试代码:


     

    波形:可以看到ALUop对应 sll,srl,sra的1000,1001,1010


     

    寄存器值:


     

    6.sllv和srlv

    这里sllv使用的是rs低五位 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令 - yxwkaifa - 博客园

    sllv $t1,$t2,$t3。

    则t1值为t2左移t3的低五位

    但是这里不太懂,没搞明白是怎么实现的逻辑左右移,位数可变

    这里犯了一次错误。复制粘贴后忘了改数字了


     

     

     

     

     

     

    测试代码:


     

    波形:


     

    寄存器变化


     

    7.stli指令

    小于则置一


     

     

     

     

    测试代码:


     

    波形:


     

    寄存器值:


     

    8.lui指令

    取高十六位


     

     

     

     

     

     

     

    测试代码:


     

    波形图:


     

    寄存器值:


     

    9.andi指令


     

     

    别忘了RT


     

     

    aluop同and


     

    测试代码:


     

    波形图:


     

    寄存器:


     

    以上。nice!

    学号后八位排序

    01510029

    lui 0x0151

    ori 0x0029


     

    记得改sccomp_tb


     

    跑完看result.txt


     

    大概是完成了排序。

  • 相关阅读:
    包管理器Bower使用手冊之中的一个
    开机就提示“请安装TCP/IP协议,error=10106”的解决的方法
    Apache Thrift的简单使用
    Python机器学习实战<一>:环境的配置
    数据库期末考试复习题 第二�
    数据集成之主数据管理(一)基础概念篇
    Cocos2d-x开发中C++内存管理
    html中#include file的使用方法
    网页的背景图片代码
    TEST
  • 原文地址:https://www.cnblogs.com/lqerio/p/11117623.html
Copyright © 2011-2022 走看看