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

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. window安装nvm

    先说一下背景,最近做的两个项目一个是祖传angularjs1.X版本另一个是react hooks结合tailwindcss,前者angularjs的node版本比较低,而tailwindcss的no ...

  2. Vitis下载安装尝试

    Vitis下载安装记录 一.下载安装 文章目录 一.下载安装 提示:以下是本篇文章正文内容,下面案例可供参考 一.下载安装 首先本次下载主要使用的是linux系统,所以我们先看一下Vitis支持的li ...

  3. SAP ERP中权限参数和角色相关表

    SAP版本:S/4 HANA 1809

  4. apijson简单使用

    apijson简单使用 介绍 APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库.为简单的增删改查.复杂的查询.简单的事务操作 提供了完全自动化的 ...

  5. 写给 Linux 初学者的一封信

    大家好,我是肖邦. 这篇文章是写给 Linux 初学者的,我会分享一些作为初学者应该知道的一些东西,这些内容都是本人从事 Linux 开发工作多年的心得体会,相信会对初学者有所帮助.如果你是 Linu ...

  6. 别再问我们用什么画图的了!问就是excalidraw

    每次发 https://github.com/tal-tech/go-zero 相关文章时,都会有读者问我们用什么画图的. 这图什么工具画的呀?好看! 这个手绘风格真好看,用啥工具画的呀? 可不可以介 ...

  7. 扩展:Flash消息

    扩展:Flash消息 flash存值之后只能取一次 from flask import Flask,render_template,flash,get_flashed_messages,session ...

  8. NFS存储迁移至GlusterFS

    NFS存储迁移至GlusterFS 前提条件 为防止脑裂,建议使用最低3台节点制作3复制集的存储卷: 在进行存储迁移前,GluseterFS存储节点需先成为k8s集群中的node节点: 存储切换时请勿 ...

  9. CSSmargin击穿问题(子元素margin-top会影响父元素)

    最近写一个H5页面的时候发现了这个被忽视的问题,一时没想到什么原因,搜了半天,记录一下,方便他人踩坑.唉,有些东西不用就忘. 一.问题描述 <div class="container& ...

  10. Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 开源了

    开源的来了,懒人程序员的福音,.NET 生态闭环太缺开源精神了, 拥抱开源! 前言: 本人不是不喜欢现有ORM的轮子,而是发现现有的ORM 的都不太符合开发人员的一些习惯.现有的ORM 要么功能太冗余 ...