Skip to content

Commit 8e96393

Browse files
committed
feat: add periph addr and modify axi mem access size logic
1 parent 5648a2f commit 8e96393

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

rtl/tc_l2/src/main/scala/axi4/AXI4Bridge.scala

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package treecorel2
22

33
import chisel3._
44
import chisel3.util._
5+
import treecorel2.common.ConstVal._
56

67
object AXI4Bridge {
78
// Burst types
@@ -286,7 +287,6 @@ class AXI4Bridge() extends Module with AXI4Config with InstConfig {
286287
protected val ALIGNED_WIDTH = 3 // eval: log2(AxiDataWidth / 8)
287288
protected val OFFSET_WIDTH = 6 // eval: log2(AxiDataWidth)
288289
protected val AXI_INST_SIZE = if (SoCEna) 2.U else 3.U // because the flash only support 4 bytes access
289-
protected val AXI_MEM_SIZE = 3.U
290290
protected val MASK_WIDTH = 128 // eval: AxiDataWidth * 2
291291
protected val TRANS_LEN = 1 // eval: 1
292292
protected val BLOCK_TRANS = false.B
@@ -317,7 +317,7 @@ class AXI4Bridge() extends Module with AXI4Config with InstConfig {
317317

318318
instAxiLen := Mux(instTransAligned.asBool(), (TRANS_LEN - 1).U, Cat(Fill(7, "b0".U(1.W)), instOverstep))
319319
protected val instAxiSize = AXI_INST_SIZE
320-
protected val instAxiAddr = if(SoCEna) io.inst.addr else Cat(io.inst.addr(AxiAddrWidth - 1, ALIGNED_WIDTH), Fill(ALIGNED_WIDTH, "b0".U(1.W)))
320+
protected val instAxiAddr = if (SoCEna) io.inst.addr else Cat(io.inst.addr(AxiAddrWidth - 1, ALIGNED_WIDTH), Fill(ALIGNED_WIDTH, "b0".U(1.W)))
321321
protected val instAlignedOffsetLow = Wire(UInt(OFFSET_WIDTH.W))
322322
protected val instAlignedOffsetHig = Wire(UInt(OFFSET_WIDTH.W))
323323
protected val instMask = Wire(UInt(MASK_WIDTH.W))
@@ -373,7 +373,20 @@ class AXI4Bridge() extends Module with AXI4Config with InstConfig {
373373

374374
memAxiLen := Mux(memTransAligned.asBool(), (TRANS_LEN - 1).U, Cat(Fill(7, "b0".U(1.W)), memOverstep))
375375

376-
protected val memAxiSize = AXI_MEM_SIZE
376+
// flash only support 4 bytes rd(0x3000_0000~0x3fff_ffff)
377+
// periph suport 4 bytes w/r(0x1000_0000~0x1000_1fff)
378+
// chiplink suport 4 bytes w/r(0x4000_0000~0x7fff_ffff)
379+
protected val memAxiSize = Wire(UInt(3.W))
380+
when(
381+
(io.mem.addr >= UartBaseAddr && io.mem.addr <= UartBoundAddr) ||
382+
(io.mem.addr >= SpiBaseAddr && io.mem.addr <= SpiBoundAddr) ||
383+
(io.mem.addr >= ChiplinkBaseAddr && io.mem.addr <= ChiplinkBoundAddr)
384+
) {
385+
memAxiSize := 2.U
386+
}.otherwise {
387+
memAxiSize := 3.U
388+
}
389+
377390
protected val memAxiAddr = Cat(io.mem.addr(AxiAddrWidth - 1, ALIGNED_WIDTH), Fill(ALIGNED_WIDTH, "b0".U(1.W)))
378391
protected val memAlignedOffsetLow = Wire(UInt(OFFSET_WIDTH.W))
379392
protected val memAlignedOffsetHig = Wire(UInt(OFFSET_WIDTH.W))

rtl/tc_l2/src/main/scala/common/ConstVal.scala

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ object ConstVal {
99
val InstOperTypeLen = 6
1010
val CSRAddrLen = 12
1111
val CLINTAddrLen = 64
12-
val PrivModeLen = 2
12+
val UARTAddrLen = 32
13+
val SPIAddrLen = 32
14+
val CHIPLINKAddrLen = 32
15+
16+
val PrivModeLen = 2
1317
// exu inst type
1418
val aluADDIType = 0.U(InstOperTypeLen.W)
1519
val aluADDIWType = 1.U(InstOperTypeLen.W)
@@ -99,11 +103,22 @@ object ConstVal {
99103
val mCycleAddr = 0xb00.U(CSRAddrLen.W)
100104
// clint addr
101105
val ClintTickCnt = 2
102-
val ClintBaseAddr = 0x2000000.U(CLINTAddrLen.W)
103-
val ClintBoundAddr = 0x200bfff.U(CLINTAddrLen.W)
106+
val ClintBaseAddr = 0x02000000.U(CLINTAddrLen.W)
107+
val ClintBoundAddr = 0x0200bfff.U(CLINTAddrLen.W)
104108
val MSipOffset = 0x0.U(CLINTAddrLen.W)
105109
val MTimeOffset = 0xbff8.U(CLINTAddrLen.W)
106110
val MTimeCmpOffset = 0x4000.U(CLINTAddrLen.W)
111+
112+
// UART addr
113+
val UartBaseAddr = 0x10000000.U(UARTAddrLen.W)
114+
val UartBoundAddr = 0x10000fff.U(UARTAddrLen.W)
115+
// SPI addr
116+
val SpiBaseAddr = 0x10001000.U(SPIAddrLen.W)
117+
val SpiBoundAddr = 0x10001fff.U(SPIAddrLen.W)
118+
// ChipLink addr
119+
val ChiplinkBaseAddr = 0x40000000.U(CHIPLINKAddrLen.W)
120+
val ChiplinkBoundAddr = 0x7fffffff.U(CHIPLINKAddrLen.W)
121+
107122
// privMode
108123
val mPrivMode = 3.U(PrivModeLen.W)
109124
val sPrivMode = 1.U(PrivModeLen.W)

0 commit comments

Comments
 (0)