自己动手写CPU之第九阶段(9)——修改OpenMIPS以实现ll、sc指令

将陆续上传新书《自己动手写CPU》,今天是第48篇。


9.8 修改OpenMIPS以实现llsc指令

9.8.1 LLbit寄存器的实现

      LLbit寄存器在LLbit模块中实现,模块接口如图9-30所示,各接口描述如表9-8所示。



      LLbit寄存器的代码如下,源文件是本书光盘Code\Chapter9_2目录下的LLbit_reg.v文件。

module LLbit_reg(

  input	wire			   clk,
  input  wire			   rst,
	
  // 异常是否发生,为1表示异常发生,为0表示没有异常
  input  wire                   flush,
	
  // 写操作
  input wire			   LLbit_i,
  input wire                    we,
	
  // LLbit寄存器的值
  output reg                    LLbit_o
	
);

  always @ (posedge clk) begin
     if (rst == `RstEnable) begin
        LLbit_o <= 1'b0;
     end else if((flush == 1'b1)) begin //如果异常发生,那么设置LLbit_o为0
        LLbit_o <= 1'b0;
     end else if((we == `WriteEnable)) begin
        LLbit_o <= LLbit_i;
     end
  end

endmodule

      当有异常发生时,会使得LLbit寄存器的值为0。所以此处有一个输入接口flush,当flush1时,表示有异常发生(在第11章实现异常处理的时候会详细介绍),从而设置LLbit寄存器的值为0

9.8.2 修改译码阶段的ID模块

      在译码阶段的ID模块要增加对llsc指令的译码,根据图9-28给出的llsc指令格式可得,确定llsc指令的过程如图9-31所示。


      其中涉及的宏定义如下,正是llsc指令的指令码,在本书附带光盘Code\Chapter9_2目录下的defines.v文件可以找到这些定义。

`define EXE_L
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
《自己动手CPU(含CD光盘1张)》使用Verilog HDL 设计实现了一款兼容MIPS32指令集架构的处理器——OpenMIPSOpenMIPS 处理器具有两个版本,分别是教学版和实践版。教学版的主要设计思想是尽量简单,处理器的运行情况比较理想化,与教科书相似,便于使用其进行教学、学术研究和讨论,也有助于学生理解课堂上讲授的知识。实践版的设计目标是能完成特定功能,发挥实际作用。《自己动手CPU(含CD光盘1张)》分为三篇。第一篇是理论篇,介绍了指令集架构、Verilog HDL的相关知识。第二篇是基础篇,采用增量模型,实现了教学版OpenMIPS处理器。首先实现了仅能执行一条指令处理器,从这个最简单的情况出发,通过依次添加,实现逻辑操作指令、移位操作指令、空指令、移动操作指令、算术操作指令、转移指令、加载存储指令、协处理器访问指令、异常相关指令,最终实现了教学版OpenMIPS处理器。第三篇是进阶篇,通过为教学版OpenMIPS添加Wishbone总线接口,从而实现了实践版OpenMIPS处理器,并与SDRAM控制器、GPIO模块、Flash控制器、UART控制器、Wishbone总线互联矩阵等模块组成一个小型SOPC,然后下载到FPGA芯片以验证实现效果,最后为实践版OpenMIPS处理器移植了嵌入式实时操作系统μC/OS-II。 《自己动手CPU(含CD光盘1张)》适合计算机专业的学生、FPGA开发人员、处理器设计者、嵌入式系统应用开发工程师、MIPS平台开发人员以及对处理器内部的实现感兴趣的读者阅读,也可以作为高等院校计算机原理、计算机体系结构等课程的实践参考书。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值