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模块即可,再按图连线,最后进行控制信号 ...
随机推荐
- Git 沙盒模拟实战(远程篇)
Git 沙盒模拟实战(远程篇) >---基础篇 远程仓库 远程仓库并不复杂, 在如今的云计算盛行的世界很容易把远程仓库想象成一个富有魔力的东西, 但实际上它们只是你的仓库在另个一台计算机上的拷贝 ...
- java-数据类型复习
java中共有8种基本的数据类型,分别为 字节型byte(8字节,32位),短整型short(16字节),整型int(32字节),长整型long(64字节), 字符型char(16字节),浮点型flo ...
- Infrastructure as Code 行为驱动开发指南 https://www.ibm.com/developerworks/cn/devops/d-bbd-guide-iac/index.html
Infrastructure as Code 行为驱动开发指南 https://www.ibm.com/developerworks/cn/devops/d-bbd-guide-iac/index.h ...
- YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. data = yaml.load(file_data)
YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsa ...
- Page (computer memory) Memory segmentation Page table 虚拟地址到物理地址的转换
A page, memory page, or virtual page is a fixed-length contiguous block of virtual memory, described ...
- 熟悉而陌生API:Promise
前言 ES6 发布到现在差不多有5年时间了.在这5年时间里ES6摧枯拉朽般的将现代前端"改朝换代",Promise是其中"大将"般的存在,影响着无数的前端库和A ...
- Java之五种遍历Map集合的方式
摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历. 在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历.这篇文章主要给大家介 ...
- Spring Boot构建 RESTful 风格应用
Spring Boot构建 RESTful 风格应用 1.Spring Boot构建 RESTful 风格应用 1.1 实战 1.1.1 创建工程 1.1.2 构建实体类 1.1.4 查询定制 1.1 ...
- centos设系统置语言为中文
[root@host /]# vim /etc/sysconfig/i18n #i18n 是 internationalization 的缩写形式,意即在 i 和 n 之间有 18 个字母,本意是指软 ...
- 代码审计学习01-in_array() 函数缺陷
一.开始代码审计之旅 01 从今天起,学习代码审计了,这篇文章就叫代码审计01吧,题目来自 PHP SECURITY CALENDAR 2017 的第一题,结合 红日安全 写的文章,开始吧. 二.先看 ...