File tree 5 files changed +25
-6
lines changed
5 files changed +25
-6
lines changed Original file line number Diff line number Diff line change @@ -636,7 +636,7 @@ class CSRFile(
636
636
(if (usingAtomics) " A" else " " ) +
637
637
(if (fLen >= 32 ) " F" else " " ) +
638
638
(if (fLen >= 64 ) " D" else " " ) +
639
- (if (usingVector ) " V" else " " ) +
639
+ (if (coreParams.hasV ) " V" else " " ) +
640
640
(if (usingCompressed) " C" else " " )
641
641
val isaString = (if (coreParams.useRVE) " E" else " I" ) +
642
642
isaMaskString +
Original file line number Diff line number Diff line change @@ -66,6 +66,8 @@ case class RocketCoreParams(
66
66
override val useVector = vector.isDefined
67
67
override val vectorUseDCache = vector.map(_.useDCache).getOrElse(false )
68
68
override def vLen = vector.map(_.vLen).getOrElse(0 )
69
+ override def eLen = vector.map(_.eLen).getOrElse(0 )
70
+ override def vfLen = vector.map(_.vfLen).getOrElse(0 )
69
71
override def vMemDataBits = vector.map(_.vMemDataBits).getOrElse(0 )
70
72
override val customIsaExt = Option .when(haveCease)(" xrocket" ) // CEASE instruction
71
73
override def minFLen : Int = fpu.map(_.minFLen).getOrElse(32 )
Original file line number Diff line number Diff line change @@ -10,6 +10,8 @@ import freechips.rocketchip.tilelink._
10
10
case class RocketCoreVectorParams (
11
11
build : Parameters => RocketVectorUnit ,
12
12
vLen : Int ,
13
+ eLen : Int ,
14
+ vfLen : Int ,
13
15
vMemDataBits : Int ,
14
16
decoder : Parameters => RocketVectorDecoder ,
15
17
useDCache : Boolean ,
Original file line number Diff line number Diff line change @@ -104,8 +104,17 @@ trait HasNonDiplomaticTileParameters {
104
104
val f = if (tileParams.core.fpu.nonEmpty) " f" else " "
105
105
val d = if (tileParams.core.fpu.nonEmpty && tileParams.core.fpu.get.fLen > 32 ) " d" else " "
106
106
val c = if (tileParams.core.useCompressed) " c" else " "
107
- val v = if (tileParams.core.useVector) " v" else " "
107
+ val v = if (tileParams.core.useVector && tileParams.core.vLen >= 128 && tileParams.core.eLen == 64 && tileParams.core.vfLen == 64 ) " v" else " "
108
108
val h = if (usingHypervisor) " h" else " "
109
+ val zvl = Option .when(tileParams.core.useVector) { Seq (s " zvl ${tileParams.core.vLen}b " ) }
110
+ val zve = Option .when(tileParams.core.useVector) {
111
+ val c = tileParams.core.vfLen match {
112
+ case 64 => " d"
113
+ case 32 => " f"
114
+ case 0 => " x"
115
+ }
116
+ Seq (s " zve ${tileParams.core.eLen}$c" )
117
+ }
109
118
val multiLetterExt = (
110
119
// rdcycle[h], rdinstret[h] is implemented
111
120
// rdtime[h] is not implemented, and could be provided by software emulation
@@ -114,6 +123,8 @@ trait HasNonDiplomaticTileParameters {
114
123
Option .when(tileParams.core.useConditionalZero)(Seq (" zicond" )) ++
115
124
Some (Seq (" zicsr" , " zifencei" , " zihpm" )) ++
116
125
Option .when(tileParams.core.fpu.nonEmpty && tileParams.core.fpu.get.fLen >= 16 && tileParams.core.fpu.get.minFLen <= 16 )(Seq (" zfh" )) ++
126
+ zvl ++
127
+ zve ++
117
128
tileParams.core.customIsaExt.map(Seq (_))
118
129
).flatten
119
130
val multiLetterString = multiLetterExt.mkString(" _" )
Original file line number Diff line number Diff line change @@ -63,9 +63,11 @@ trait CoreParams {
63
63
def dcacheReqTagBits : Int = 6
64
64
65
65
def minFLen : Int = 32
66
+
66
67
def vLen : Int = 0
67
- def sLen : Int = 0
68
- def eLen (xLen : Int , fLen : Int ): Int = xLen max fLen
68
+ def eLen : Int = 0
69
+ def vfLen : Int = 0
70
+ def hasV : Boolean = vLen >= 128 && eLen >= 64 && vfLen >= 64
69
71
def vMemDataBits : Int = 0
70
72
}
71
73
@@ -106,14 +108,16 @@ trait HasCoreParameters extends HasTileParameters {
106
108
val traceHasWdata = coreParams.traceHasWdata
107
109
108
110
def vLen = coreParams.vLen
109
- def sLen = coreParams.sLen
110
- def eLen = coreParams.eLen(xLen, fLen)
111
+ def eLen = coreParams.eLen
112
+ def vfLen = coreParams.vfLen
111
113
def vMemDataBits = if (usingVector) coreParams.vMemDataBits else 0
112
114
def maxVLMax = vLen
113
115
114
116
if (usingVector) {
115
117
require(isPow2(vLen), s " vLen ( $vLen) must be a power of 2 " )
116
118
require(eLen >= 32 && vLen % eLen == 0 , s " eLen must divide vLen ( $vLen) and be no less than 32 " )
119
+ require(eLen == 32 || eLen == 64 )
120
+ require(vfLen <= eLen)
117
121
}
118
122
119
123
lazy val hartIdLen : Int = p(MaxHartIdBits )
You can’t perform that action at this time.
0 commit comments