自己动手写CPU(MIPS) 您所在的位置:网站首页 数据重定向和阻塞的流水线图 自己动手写CPU(MIPS)

自己动手写CPU(MIPS)

2024-07-15 11:49| 来源: 网络整理| 查看: 265

代码参考重庆大学计算机组成实验,并且在此基础上添加了刷新和暂停,主要目的是理解一下阻塞流水线。

代码 `timescale 1ns / 1ps // 带有暂停与刷新功能的八位四级流水线, module adder8Bits4StepsWithStopAndClear ( input [7 : 0] num1, input [7 : 0] num2, // 上一位的进位 input cin, // 输入是否有效 input validIn, // 刷新 input rst, // 暂停 input stop, input clk, input outAllow, // 判断输出是否有效 output wire validOut, output wire count, output wire [7 : 0] sum ); reg count1, count2, count3; // 记录每一层是否有效 reg pipe1Valid; reg pipe2Valid; reg pipe3Valid; reg pipe4Valid; // 第一级流水 reg [1:0] sum1; // 控制变量:和之前的一样 // 表示pipe1能否被上一级刷新 wire pipe1AllowIn; // 表示pipe1是否可以用于刷新下一级 wire pipe1ReadyGo; // 表示pipe1能否进入pipe2 wire pipe1ToPipe2Valid; //第二级流水 reg [3:0] sum2; wire pipe2AllowIn; wire pipe2ReadyGo; wire pipe2ToPipe3Valid; //第三级流水 reg [5:0] sum3; wire pipe3AllowIn; wire pipe3ReadyGo; wire pipe3ToPipe4Valid; //第四级流水 wire pipe4AllowIn; wire pipe4ReadyGo; reg [7 : 0]sum4; reg count4; // 如果没有暂停,那么就可以Go assign pipe1ReadyGo = !stop; // 如果pipe1中的值已经无效,或者这一轮一定会传给下一个,那么就可以进行接收 assign pipe1AllowIn = ! pipe1Valid || pipe1ReadyGo && pipe2AllowIn; // 如果pipe1有效,并且pipe1可以进行传输,那么pipe1ToPipe2Valid可以进行。 assign pipe1ToPipe2Valid = pipe1Valid && pipe1ReadyGo; // 是否有效 always @ (posedge clk) begin // 如果需要刷新,那么pipe1Valid 变为0,表示pipe1中的值不再有效 if( rst ) begin pipe1Valid


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有