riscv-sodor-rv32_3stage(3)

consts.scala文件定义了Sodor处理器的一些关键常量和控制信号,包括内存端口数量、预测PC+4策略、调试标志以及各种控制信号如PC选择、分支类型、操作数选择、寄存器写使能、回写选择、内存操作类型等,这些常量和信号在处理器的指令执行和数据流控制中起着重要作用。

现在分析的是consts.scala。这两个文件的主要作用是定义一些常量。

consts.scala:

package Sodor
package constants
{
   
   

import chisel3._
import chisel3.util._


trait SodorProcConstants
{
   
   
   //************************************
   // Machine Parameters

   //声明两个memory的端口。
   val NUM_MEMORY_PORTS = 2;

   // if the front-end ONLY predicts PC+4, this simplifies quite a bit of logic.
   // First, the PC select mux never needs to compute ExePC + 4 on a branch
   // redirect (since PC+4 is always predicted).
   // Second, JAL can write-back to rd the ExePC, since it will already be PC+4
   // relative to the JAL.
   //做最简单的预测,每次都是当前PC+4,不需要计算执行PC+4的分支(即一条指令可能是跳转指令或
   //者是分支指令,由现在的A跳转到C,C是作为一个PC数值存在于该指令中的,这里的意思是只需
   //要计算A+4的值就可以,不需要额外计算C+4这个分支的值。)
   //跳转指令执行时,将PC+4的值(即错误预测的ExePC值)回写至rd中,即使回写的这个PC可能以后
   //都不会用。这是因为默认预测的PC永远是+4的,遇到跳转指令,这个预测就是错误的,回写只是一
   //个默认的操作。3stage还只是PC+4的预测,还没有BTB的分支预测功能。
   val PREDICT_PCP4 = true; require(PREDICT_PCP4==true) // no BTB, etc, added yet

   //************************************
   // Debugging
   val PRINT_COMMIT_LOG = false
}

trait ScalarOpConstants
{
   
   
   //************************************
   // Control Signals

   val Y      = true.B
   val N      = false.B
   //PC的选择信号
   //PC_4  		---  	PC+4 			--- 位宽为3bits的信号,0值
   //PC_BR 		---  分支目标 			--- 位宽为3bits的信号,1值
   //PC_J  		---  跳转目标 			--- 位宽为3bits的信号,2值
   //PC_JR 		---  跳转寄存器目标 		--- 位宽为3bits的信号,3值
	//PC_EXC 	---  异常 				--- 位宽为3bits的信号,4值
   // PC Select Signal
   val PC_4   = 0.asUInt(3.W)  // PC + 4
   val PC_BR  = 1.asUInt(3.W)  // branch_target
   val PC_J   = 2.asUInt(3.W)  // jump_target
   val PC_JR  = 3.asUInt(3.W
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值