简单的ori指令实现
来源:互联网 发布:单片机c语言编程入门 编辑:程序博客网 时间:2024/06/05 23:53
4.2.4取址阶段的实现
取出指令存储器中的指令。PC值递增,包括IF/ID模块
第一步实现需要用到的宏定义
`defineRstEnable 1'b1
`define RstDisable 1'b0
`define ZeroWord 32'h00000000
`define WriteEnable 1'b1
`define WriteDisable 1'b0
`define ReadEnable 1'b1
`define ReadDisable 1'b0
`define AluOpBus 7:0
`define AluSelBus 2:0
`define InstValid 1'b0
`define InstInvalid 1'b1
`define Stop 1'b1
`define NoStop 1'b0
`define InDelaySlot 1'b1
`define NotInDelaySlot 1'b0
`define Branch 1'b1
`define NotBranch 1'b0
`define InterruptAssert 1'b1
`define InterruptNotAssert 1'b0
`define TrapAssert 1'b1
`define TrapNotAssert 1'b0
`define True_v 1'b1
`define False_v 1'b0
`define ChipEnable 1'b1
`define ChipDisable 1'b0
//指令
`define EXE_ORI 6'b001101
`define EXE_NOP 6'b000000
//AluOp
`define EXE_OR_OP 8'b00100101
`define EXE_ORI_OP 8'b01011010
`define EXE_NOP_OP 8'b00000000
//AluSel
`define EXE_RES_LOGIC 3'b001
`define EXE_RES_NOP 3'b000
//指令存储器inst_rom
`define InstAddrBus 31:0
`define InstBus 31:0
`define InstMemNum 131071
`define InstMemNumLog2 17
//通用寄存器regfile
`define RegAddrBus 4:0
`define RegBus 31:0
`define RegWidth 32
`define DoubleRegWidth 64
`define DoubleRegBus 63:0
`define RegNum 32
`define RegNumLog2 5
`define NOPRegAddr 5'b00000
IF/ID模块
其作用是暂时保存取址阶段得到的指令,以及对应的指令地址,并在下一个时钟周期传递到译码阶段
对应的接口有:rst,clk,if_pc,if_inst,id_pc,id_inst,对应的代码模块为if_id.v文件
`include "defines.v"
module if_id(
input wire clk,
inputwire rst,
inputwire[`InstAddrBus] if_pc,
inputwire[`InstBus] if_inst,
outputreg[`InstAddrBus] id_pc,
outputreg[`InstBus] id_inst
);
always@ (posedge clk) begin
if(rst == `RstEnable) begin
id_pc<= `ZeroWord;
id_inst<= `ZeroWord;
end else begin
id_pc <= if_pc;
id_inst <= if_inst;
end
end
endmodule
综上,if_id模块实现的原理比较简单,实现指令的缓存功能
- 简单的ori指令实现
- 自己动手写处理器之第四阶段(1)——第一条指令ori的实现
- 自己动手写CPU之第四阶段(2)——验证第一条指令ori的实现效果
- more指令的简单实现
- cp指令的简单实现
- pwd指令的简单实现
- ac指令的简单实现
- uptime指令的简单实现
- od指令的简单实现
- Ori-a改动过的文件
- Oracle 的连接方式ori和thin
- 【angularjs指令】简单的搜索框实现
- 简单的UNIX指令
- GCC的简单指令
- Vue的简单指令
- 一些简单的Linux指令
- angularjs一些简单的指令
- 简单的 vsftpd指令配置
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- 『 Jack_a_Lent_Notes』---功率因数校正(PPFC)
- 在安装win7系统时如何不产生100M的系统保留分区
- 可能是最in的React Native使用原生自定义下拉刷新组件
- 4195: [Noi2015]程序自动分析
- 简单的ori指令实现
- nmap常用命令及参数说明
- 安卓中Paint类和Canvas类的方法汇总
- NYOJ241 - 字母统计
- weex项目实战篇(一)
- 关于虚拟机部分故障的解决
- [工程优化]用CPLEX解决工程规划问题 (
- Android正方教务系统软件的适配制作
- JAVA设计模式之状态模式