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 isRV32: Boolean = false, // 是否为RV32
|
||||||
val hasMExtension: Boolean = true, // 是否有乘除法单元
|
val hasMExtension: Boolean = true, // 是否有乘除法单元
|
||||||
|
val hasAExtension: Boolean = true, // 是否有原子指令
|
||||||
// 特权模式
|
// 特权模式
|
||||||
val hasSMode: Boolean = false, // 是否有S模式
|
val hasSMode: Boolean = false, // 是否有S模式
|
||||||
val hasUMode: Boolean = false, // 是否有U模式
|
val hasUMode: Boolean = true, // 是否有U模式
|
||||||
// 模块配置
|
// 模块配置
|
||||||
val hasCommitBuffer: Boolean = true, // 是否有提交缓存
|
val hasCommitBuffer: Boolean = true, // 是否有提交缓存
|
||||||
val decoderNum: Int = 2, // 同时访问寄存器的指令数
|
val decoderNum: Int = 2, // 同时访问寄存器的指令数
|
||||||
|
|
|
@ -76,10 +76,12 @@ object Const extends Constants with AXIConst with HasExceptionNO
|
||||||
object Instructions extends HasInstrType with CoreParameter {
|
object Instructions extends HasInstrType with CoreParameter {
|
||||||
def NOP = 0x00000013.U
|
def NOP = 0x00000013.U
|
||||||
val DecodeDefault = List(InstrN, FuType.csr, CSROpType.jmp)
|
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 ++
|
Priviledged.table ++
|
||||||
RVAInstr.table ++
|
RVZicsrInstr.table ++
|
||||||
RVZicsrInstr.table ++ RVZifenceiInstr.table
|
RVZifenceiInstr.table
|
||||||
}
|
}
|
||||||
|
|
||||||
object AddressSpace extends CoreParameter {
|
object AddressSpace extends CoreParameter {
|
||||||
|
|
|
@ -30,7 +30,7 @@ object RV32MInstr extends HasInstrType with CoreParameter {
|
||||||
REM -> List(InstrR, FuType.mdu, MDUOpType.rem),
|
REM -> List(InstrR, FuType.mdu, MDUOpType.rem),
|
||||||
REMU -> List(InstrR, FuType.mdu, MDUOpType.remu)
|
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 {
|
object RV64MInstr extends HasInstrType with CoreParameter {
|
||||||
|
@ -49,7 +49,7 @@ object RV64MInstr extends HasInstrType with CoreParameter {
|
||||||
REMW -> List(InstrR, FuType.mdu, MDUOpType.remw),
|
REMW -> List(InstrR, FuType.mdu, MDUOpType.remw),
|
||||||
REMUW -> List(InstrR, FuType.mdu, MDUOpType.remuw)
|
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 {
|
object RVMInstr extends CoreParameter {
|
||||||
|
|
|
@ -69,7 +69,13 @@ class Csr(implicit val config: CpuConfig) extends Module with HasCSRConst {
|
||||||
val misa_init = Wire(new Misa())
|
val misa_init = Wire(new Misa())
|
||||||
misa_init := 0.U.asTypeOf(new Misa())
|
misa_init := 0.U.asTypeOf(new Misa())
|
||||||
misa_init.mxl := 2.U
|
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 misa = RegInit(UInt(XLEN.W), misa_init.asUInt) // ISA寄存器
|
||||||
val mie = RegInit(0.U(XLEN.W)) // 中断使能寄存器
|
val mie = RegInit(0.U(XLEN.W)) // 中断使能寄存器
|
||||||
val mtvec = RegInit(0.U(XLEN.W)) // 中断向量基址寄存器
|
val mtvec = RegInit(0.U(XLEN.W)) // 中断向量基址寄存器
|
||||||
|
|
Loading…
Reference in New Issue