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
无条件跳转到由寄存器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的更多相关文章
- 使用Verilog搭建一个单周期CPU
使用Verilog搭建一个单周期CPU 搭建篇 总体结构 其实跟使用logisim搭建CPU基本一致,甚至更简单,因为完全可以照着logisim的电路图来写,各个模块和模块间的连接在logisim中非 ...
- Verilog单周期CPU(未完待续)
单周期CPU:指令周期=CPU周期 Top模块作为数据通路 运算器中有ALU,通路寄存器(R1.R2.R3.R4),数据缓冲寄存器(鉴于书上的运算器只有R0)........... 此为ALU和通用寄 ...
- 单周期CPU设计的理论基础
写在前面:本博客内容为本人老师原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法UR ...
- 单周期cpu设计代码解读
目录 写在前面 单周期cpu设计代码讲解 概念回顾 Verilog代码讲解 写在前面 欢迎转载,转载请说明出处. 单周期cpu设计代码讲解 概念回顾 一.电子计算机的部件 分为:中央处理器(cpu). ...
- P4-verilog实现mips单周期CPU
最近对学习的掌控可能出现了问题,左支右绌,p2挂了,p2.p3.p4.p5每周在计组花的连续时间少了很多,学习到的东西也少了很多,流水线都还没真正开始写,和别人比落后了一大截,随笔自然就荒废了,我得尽 ...
- 单周期CPU设计
终于有点时间了,恰好多周期的设计也已经完成,其实只想写写多周期的,无奈单周期补上才好,哈哈哈~ —————+—————黄金分割线—————+————— 首先要理解什么叫单周期CPU(与后面多周期CPU ...
- 为什么现在使用多周期CPU,而单周期CPU被弃用?
最初设计的CPU结构简单,内部不复杂.之所以制造它是为了让机器自动跑程序,算数. 早期CPU都是单周期的,人们没考虑那么多,性能啥的.就让CPU每个时钟周期跑一个指令,这些时钟周期等长.这样下来,有的 ...
- 单周期CPU
一个时钟周期执行一条指令的过程理解(单周期CPU): https://blog.csdn.net/a201577F0546/article/details/84726912 单周期CPU指的是一条指令 ...
- 使用logisim搭建单周期CPU与添加指令
使用logisim搭建单周期CPU与添加指令 搭建 总设计 借用高老板的图,我们只需要分别做出PC.NPC.IM.RF.EXT.ALU.DM.Controller模块即可,再按图连线,最后进行控制信号 ...
随机推荐
- window安装nvm
先说一下背景,最近做的两个项目一个是祖传angularjs1.X版本另一个是react hooks结合tailwindcss,前者angularjs的node版本比较低,而tailwindcss的no ...
- Vitis下载安装尝试
Vitis下载安装记录 一.下载安装 文章目录 一.下载安装 提示:以下是本篇文章正文内容,下面案例可供参考 一.下载安装 首先本次下载主要使用的是linux系统,所以我们先看一下Vitis支持的li ...
- SAP ERP中权限参数和角色相关表
SAP版本:S/4 HANA 1809
- apijson简单使用
apijson简单使用 介绍 APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库.为简单的增删改查.复杂的查询.简单的事务操作 提供了完全自动化的 ...
- 写给 Linux 初学者的一封信
大家好,我是肖邦. 这篇文章是写给 Linux 初学者的,我会分享一些作为初学者应该知道的一些东西,这些内容都是本人从事 Linux 开发工作多年的心得体会,相信会对初学者有所帮助.如果你是 Linu ...
- 别再问我们用什么画图的了!问就是excalidraw
每次发 https://github.com/tal-tech/go-zero 相关文章时,都会有读者问我们用什么画图的. 这图什么工具画的呀?好看! 这个手绘风格真好看,用啥工具画的呀? 可不可以介 ...
- 扩展:Flash消息
扩展:Flash消息 flash存值之后只能取一次 from flask import Flask,render_template,flash,get_flashed_messages,session ...
- NFS存储迁移至GlusterFS
NFS存储迁移至GlusterFS 前提条件 为防止脑裂,建议使用最低3台节点制作3复制集的存储卷: 在进行存储迁移前,GluseterFS存储节点需先成为k8s集群中的node节点: 存储切换时请勿 ...
- CSSmargin击穿问题(子元素margin-top会影响父元素)
最近写一个H5页面的时候发现了这个被忽视的问题,一时没想到什么原因,搜了半天,记录一下,方便他人踩坑.唉,有些东西不用就忘. 一.问题描述 <div class="container& ...
- Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 开源了
开源的来了,懒人程序员的福音,.NET 生态闭环太缺开源精神了, 拥抱开源! 前言: 本人不是不喜欢现有ORM的轮子,而是发现现有的ORM 的都不太符合开发人员的一些习惯.现有的ORM 要么功能太冗余 ...