feat(csr): 修改misa的ext段
This commit is contained in:
parent
534e608337
commit
90efc32bca
|
@ -7,9 +7,10 @@ case class CpuConfig(
|
|||
// 指令集
|
||||
val isRV32: Boolean = false, // 是否为RV32
|
||||
val hasMExtension: Boolean = true, // 是否有乘除法单元
|
||||
val hasAExtension: Boolean = true, // 是否有原子指令
|
||||
// 特权模式
|
||||
val hasSMode: Boolean = false, // 是否有S模式
|
||||
val hasUMode: Boolean = false, // 是否有U模式
|
||||
val hasUMode: Boolean = true, // 是否有U模式
|
||||
// 模块配置
|
||||
val hasCommitBuffer: Boolean = true, // 是否有提交缓存
|
||||
val decoderNum: Int = 2, // 同时访问寄存器的指令数
|
||||
|
|
|
@ -76,10 +76,12 @@ object Const extends Constants with AXIConst with HasExceptionNO
|
|||
object Instructions extends HasInstrType with CoreParameter {
|
||||
def NOP = 0x00000013.U
|
||||
val DecodeDefault = List(InstrN, FuType.csr, CSROpType.jmp)
|
||||
def DecodeTable = RVIInstr.table ++ (if (config.hasMExtension) RVMInstr.table else Array.empty) ++
|
||||
def DecodeTable = RVIInstr.table ++
|
||||
(if (config.hasMExtension) RVMInstr.table else Array.empty) ++
|
||||
(if (config.hasAExtension) RVAInstr.table else Array.empty) ++
|
||||
Priviledged.table ++
|
||||
RVAInstr.table ++
|
||||
RVZicsrInstr.table ++ RVZifenceiInstr.table
|
||||
RVZicsrInstr.table ++
|
||||
RVZifenceiInstr.table
|
||||
}
|
||||
|
||||
object AddressSpace extends CoreParameter {
|
||||
|
|
|
@ -30,7 +30,7 @@ object RV32MInstr extends HasInstrType with CoreParameter {
|
|||
REM -> List(InstrR, FuType.mdu, MDUOpType.rem),
|
||||
REMU -> List(InstrR, FuType.mdu, MDUOpType.remu)
|
||||
)
|
||||
val table = mulTable ++ (if (config.hasMExtension) divTable else Array.empty)
|
||||
val table = mulTable ++ divTable
|
||||
}
|
||||
|
||||
object RV64MInstr extends HasInstrType with CoreParameter {
|
||||
|
@ -49,7 +49,7 @@ object RV64MInstr extends HasInstrType with CoreParameter {
|
|||
REMW -> List(InstrR, FuType.mdu, MDUOpType.remw),
|
||||
REMUW -> List(InstrR, FuType.mdu, MDUOpType.remuw)
|
||||
)
|
||||
val table = mulTable ++ (if (config.hasMExtension) divTable else Array.empty)
|
||||
val table = mulTable ++ divTable
|
||||
}
|
||||
|
||||
object RVMInstr extends CoreParameter {
|
||||
|
|
|
@ -69,7 +69,13 @@ class Csr(implicit val config: CpuConfig) extends Module with HasCSRConst {
|
|||
val misa_init = Wire(new Misa())
|
||||
misa_init := 0.U.asTypeOf(new Misa())
|
||||
misa_init.mxl := 2.U
|
||||
misa_init.extensions := "h101100".U
|
||||
def getMisaExt(ext: Char): UInt = {1.U << (ext.toInt - 'a'.toInt)}
|
||||
var extensions = List('i')
|
||||
if(config.hasMExtension){ extensions = extensions :+ 'm'}
|
||||
if(config.hasAExtension){ extensions = extensions :+ 'a'}
|
||||
if(config.hasSMode){ extensions = extensions :+ 's'}
|
||||
if(config.hasUMode){ extensions = extensions :+ 'u'}
|
||||
misa_init.extensions := extensions.foldLeft(0.U)((sum, i) => sum | getMisaExt(i))
|
||||
val misa = RegInit(UInt(XLEN.W), misa_init.asUInt) // ISA寄存器
|
||||
val mie = RegInit(0.U(XLEN.W)) // 中断使能寄存器
|
||||
val mtvec = RegInit(0.U(XLEN.W)) // 中断向量基址寄存器
|
||||
|
|
Loading…
Reference in New Issue