完成0x300,0x301寄存器实现
This commit is contained in:
@@ -58,7 +58,7 @@ class CommonRegisterBundle extends Bundle{
|
|||||||
|
|
||||||
val custom = Vec( 128, UInt(8.W) )
|
val custom = Vec( 128, UInt(8.W) )
|
||||||
|
|
||||||
|
val smUsedDepth = Vec(8, UInt(8.W))
|
||||||
val smTrigLen = Vec(8, UInt(11.W)) //触发SM切换缓冲区的地址 (或读或写)
|
val smTrigLen = Vec(8, UInt(11.W)) //触发SM切换缓冲区的地址 (或读或写)
|
||||||
|
|
||||||
|
|
||||||
@@ -183,6 +183,9 @@ class InterfaceIO extends Bundle{
|
|||||||
val interrupt = Output(Bool())
|
val interrupt = Output(Bool())
|
||||||
|
|
||||||
val wdtTrigger = Input(Vec(17, Bool()))
|
val wdtTrigger = Input(Vec(17, Bool()))
|
||||||
|
|
||||||
|
val smUsedDepth = Input( Vec(8, UInt(8.W)) )
|
||||||
|
val isSMReset = Output( Vec(8, Bool()) )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -386,6 +389,9 @@ abstract class InterfaceBase extends Module{
|
|||||||
( ( addr === ( "h208".U(16.W) + (10*i).U) ) & isSlvMode ) -> sReg.ebmmu(i).op,
|
( ( addr === ( "h208".U(16.W) + (10*i).U) ) & isSlvMode ) -> sReg.ebmmu(i).op,
|
||||||
( ( addr === ( "h209".U(16.W) + (10*i).U) ) & isSlvMode ) -> sReg.ebmmu(i).isEnable,
|
( ( addr === ( "h209".U(16.W) + (10*i).U) ) & isSlvMode ) -> sReg.ebmmu(i).isEnable,
|
||||||
)}.reduce(_++_) ++
|
)}.reduce(_++_) ++
|
||||||
|
( 0 until 8 ).map{ i =>
|
||||||
|
( addr === ("h301".U(16.W) + (i*4).U) ) -> cReg.smUsedDepth(i)
|
||||||
|
} ++
|
||||||
( 0 until 8 ).map{ i =>
|
( 0 until 8 ).map{ i =>
|
||||||
( addr === ("h302".U(16.W) + (i*4).U) ) -> cReg.smTrigLen(i)(7,0)
|
( addr === ("h302".U(16.W) + (i*4).U) ) -> cReg.smTrigLen(i)(7,0)
|
||||||
} ++
|
} ++
|
||||||
@@ -636,6 +642,10 @@ trait InterfaceCheckSM{ this: InterfaceBase =>
|
|||||||
|
|
||||||
|
|
||||||
for( i <- 0 until 8 ){
|
for( i <- 0 until 8 ){
|
||||||
|
|
||||||
|
io.isSMReset(i) := isEnW & (addrw === ("h300".U(16.W) + (i*4).U))
|
||||||
|
|
||||||
|
cReg.smUsedDepth(i) := io.smUsedDepth(i)
|
||||||
cReg.smTrigLen(i) := Cat( smTrigLen_H(i), smTrigLen_L(i) )
|
cReg.smTrigLen(i) := Cat( smTrigLen_H(i), smTrigLen_L(i) )
|
||||||
|
|
||||||
when( isEnW & addrw === ("h303".U(16.W) + (i*4).U) ){
|
when( isEnW & addrw === ("h303".U(16.W) + (i*4).U) ){
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ class SMUnitIO(depth: Int) extends Bundle {
|
|||||||
val deq = Input(Bool())
|
val deq = Input(Bool())
|
||||||
|
|
||||||
val sram = Flipped(Vec(depth, new SRAM2kIO))
|
val sram = Flipped(Vec(depth, new SRAM2kIO))
|
||||||
|
val cnt = Output(UInt(8.W))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +85,14 @@ abstract class SMUnitBase(depth: Int = 4) extends Module {
|
|||||||
( (rPtr(log2Ceil(depth)-1, 0)) === i.U ) -> io.sram(i).rd.datar
|
( (rPtr(log2Ceil(depth)-1, 0)) === i.U ) -> io.sram(i).rd.datar
|
||||||
})
|
})
|
||||||
|
|
||||||
|
val cnt = RegInit(0.U((log2Ceil(depth)).W)); io.cnt := cnt
|
||||||
|
|
||||||
|
when( io.enq & ~isFull ){
|
||||||
|
cnt := cnt + 1.U
|
||||||
|
} .elsewhen( io.deq & ~isEmpty ){
|
||||||
|
cnt := cnt - 1.U
|
||||||
|
assert(cnt =/= 0.U)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,11 @@ abstract class ShinTopBase extends Module{
|
|||||||
smUnit(5).io.enq := interface.io.uSMenq(2)
|
smUnit(5).io.enq := interface.io.uSMenq(2)
|
||||||
smUnit(7).io.enq := interface.io.uSMenq(3)
|
smUnit(7).io.enq := interface.io.uSMenq(3)
|
||||||
|
|
||||||
|
for( i <- 0 until 8 ){
|
||||||
|
interface.io.smUsedDepth(i) := smUnit(i).io.cnt
|
||||||
|
smUnit(i).reset := reset.asBool | interface.io.isSMReset(i)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for( i <- 0 until 4 ){
|
for( i <- 0 until 4 ){
|
||||||
|
|||||||
Reference in New Issue
Block a user