【计算机组织与体系结构及其FPGA实现】实验三:流水线处理器-FPGA常见问题社区-FPGA CPLD-ChipDebug

【计算机组织与体系结构及其FPGA实现】实验三:流水线处理器

 

 

系列文章目录

【计算机组织与体系结构】实验一:算术逻辑单元的实现
【计算机组织与体系结构】实验二:给定指令系统的处理器设计
【计算机组织与体系结构】实验三:流水线处理器
【计算机组织与体系结构】实验四:指令 CACHE 的设计与实现


一、实验目的

  • 掌握 Vivado 集成开发环境
  • 掌握 Verilog 语言
  • 掌握 FPGA 编程方法及硬件调试手段
  • 深刻理解流水线型处理器结构和数据冲突解决技术的工作原理

二、实验环境

Vivado 集成开发环境和龙芯 Artix-7 实验平台

三、实验内容

根据本课程所讲的设计思想,在实验二实现的 CPU 的基础上,设计并实现一个具有五段流水线处理器,并通过暂停和定向(或者说旁路)技术来解决流水线中出现的数据冲突,要求该处理器可以通过所提供的自动测试环境

1、流水线处理器的周期划分

与实验二实现的单周期处理器体系结构不同,流水线型处理器将“工作”划分为多个流水段来完成一条指令。每个时钟周期对应于流水线的一个阶段。流水线型处理器结构的主要优点是它可以并行执行多个指令:在同一时刻,多个指令可以同时存在于流水线中不同的阶段。在本实验中,流水线划分为五个周期。每个流水段产生的结果都在相应的时钟周期时传递给下一个流水段。

2、数据冲突的处理

参照参考书(王志英等著)第 3 章的 3.3.2 小节,采用暂停和定向技术来处理流水线中出现的数据冲突。

暂停

当检测到数据冲突,通过暂停来阻止即将进入流水线中的指令。本实验中,暂停只能在必要时插入流水线。

定向

通过增加定向控制所需要的比较器、多路选择器和相关组合逻辑电路,实现对数据的重定向,解决数据冲突。

四、实验要求

按照以上要求将实验二所实现的单周期处理器改进成具有五段流水线处理器,并通过暂停和定向技术解决流水线中产生的数据冲突。

(该文章只实现了五段流水线处理器,未实现暂停和定向)

五、设计思想

(一)五段流水线的寄存器文件描述

IF/ID段

在这里插入图片描述

ID/EX段

在这里插入图片描述

EX/MEM段

在这里插入图片描述

MEM/WB段

在这里插入图片描述
在这里插入图片描述

六、测试结果及实验分析

1、流水线处理器

①处理器仿真测试波形(整体)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②FPGA编程下载

编写处理器功能测试程序,包括助记符和二进制代码。

`timescale 1ns / 1ps

module cpu_tb(

    );

//-----Clock and reset signal simulation-----
//signals
reg clk;
reg resetn;
//simulation
initial begin
    clk    = 1'b0;
    resetn = 1'b0;
    #2000;
    resetn = 1'b1;
end

always #5 clk = ~clk;

cpu_top U_cpu_top(
        .clk     (clk     ),
        .reset   (resetn  )
    );

//-----monitor test-----
initial
begin
    $timeformat(-9,0," ns",10);
    while(!resetn) #5;
    $display("==============================================================");
    $display("Test begin!");
    #10000;
end

endmodule

 

上板波形记录与解释
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、实验总结

本次实验设计并实现了一个流水线处理器,该流水线处理器包括5段,在实验二的基础上,将不同的模块划分到不同的阶段,然后进行流水即可。总之,这次实验以实验二为基础,实现较为简单,通过实践也加深了我对流水线cpu的处理过程的理解,使我收获颇丰。

八、源代码

源代码

 

请登录后发表评论

    没有回复内容