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

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

 

大概是完成了排序。

Verilog hdl 实现单周期cpu的更多相关文章

  1. 使用Verilog搭建一个单周期CPU

    使用Verilog搭建一个单周期CPU 搭建篇 总体结构 其实跟使用logisim搭建CPU基本一致,甚至更简单,因为完全可以照着logisim的电路图来写,各个模块和模块间的连接在logisim中非 ...

  2. Verilog单周期CPU(未完待续)

    单周期CPU:指令周期=CPU周期 Top模块作为数据通路 运算器中有ALU,通路寄存器(R1.R2.R3.R4),数据缓冲寄存器(鉴于书上的运算器只有R0)........... 此为ALU和通用寄 ...

  3. 单周期CPU设计的理论基础

    写在前面:本博客内容为本人老师原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法UR ...

  4. 单周期cpu设计代码解读

    目录 写在前面 单周期cpu设计代码讲解 概念回顾 Verilog代码讲解 写在前面 欢迎转载,转载请说明出处. 单周期cpu设计代码讲解 概念回顾 一.电子计算机的部件 分为:中央处理器(cpu). ...

  5. P4-verilog实现mips单周期CPU

    最近对学习的掌控可能出现了问题,左支右绌,p2挂了,p2.p3.p4.p5每周在计组花的连续时间少了很多,学习到的东西也少了很多,流水线都还没真正开始写,和别人比落后了一大截,随笔自然就荒废了,我得尽 ...

  6. 单周期CPU设计

    终于有点时间了,恰好多周期的设计也已经完成,其实只想写写多周期的,无奈单周期补上才好,哈哈哈~ —————+—————黄金分割线—————+————— 首先要理解什么叫单周期CPU(与后面多周期CPU ...

  7. 为什么现在使用多周期CPU,而单周期CPU被弃用?

    最初设计的CPU结构简单,内部不复杂.之所以制造它是为了让机器自动跑程序,算数. 早期CPU都是单周期的,人们没考虑那么多,性能啥的.就让CPU每个时钟周期跑一个指令,这些时钟周期等长.这样下来,有的 ...

  8. 单周期CPU

    一个时钟周期执行一条指令的过程理解(单周期CPU): https://blog.csdn.net/a201577F0546/article/details/84726912 单周期CPU指的是一条指令 ...

  9. 使用logisim搭建单周期CPU与添加指令

    使用logisim搭建单周期CPU与添加指令 搭建 总设计 借用高老板的图,我们只需要分别做出PC.NPC.IM.RF.EXT.ALU.DM.Controller模块即可,再按图连线,最后进行控制信号 ...

随机推荐

  1. php压缩文件夹并下载到本地

    /** * @param $path 要压缩的文件夹路径 * @param $filename 要生成的压缩包名称 */ public function create_zip($path,$filen ...

  2. 配置Charles 设置手机代理并允许https请求

    前言: 在h5开发调试时,为实现手机app访问localhost地址,可以使用ip地址的方式,但一般公司app出于安全考虑,会限制只能访问其自有域名.因此,使用charles代理的方式 步骤 用手机代 ...

  3. ldf和mdf文件怎么还原到sqlserver数据库

    1.把mdf文件和ldf文件拷贝到数据库的默认路径C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA里:2.在sq ...

  4. C#高级编程第11版 - 第五章 索引

    [1]5.1 泛型概述 1.通过泛型,你可以创建独立于特定类型(contained types)以外的方法和类,而不用为不同类型编写多份同样功能的代码,你只需要创建一个方法或者类. 2.泛型类使用泛型 ...

  5. protoc-gen-validate (PGV)

    https://github.com/envoyproxy/protoc-gen-validate This project is currently in alpha. The API should ...

  6. redis 主从复制 和集群

    redis集群最少三个节点 之间相互通信ping-pong 投票选举机制 主从复制 的话 最少六个节点 ,主三从三

  7. 剖析 CopyOnWriteArrayList

    原文链接:https://www.changxuan.top/?p=1252 CopyOnWriteArrayList 是 JUC 中唯一一个支持并发的 List. CopyOnWriteArrayL ...

  8. HarmonyOS三方件开发指南(7)——compress组件

    目录:1. 组件compress功能介绍2. 组件compress使用方法3. 组件compress开发实现 1. 组件compress功能介绍1.1.  组件介绍:        compress是 ...

  9. HBase的Write Ahead Log (WAL)

    HBase的Write Ahead Log (WAL) 一.预写日志WAL(Write-Ahead-Log) HLog HLogKey LogFlusher LogRoller Replay 问题 二 ...

  10. hadoop使用常见问题总结!

    1,执行 hdfs dfs -copyFromLocal 命令报错! 19/01/02 11:01:32 INFO hdfs.DFSClient: Exception in createBlockOu ...