merge mirror read/write
This commit is contained in:
@@ -8,7 +8,7 @@ import chisel3.util._
|
|||||||
|
|
||||||
class FSMC_Port_Bundle extends Bundle{
|
class FSMC_Port_Bundle extends Bundle{
|
||||||
|
|
||||||
val addr = Input(UInt(11.W))
|
val addr = Input(UInt(10.W))
|
||||||
val dataIn = Input(UInt(16.W))
|
val dataIn = Input(UInt(16.W))
|
||||||
val dataOut = Output(UInt(16.W))
|
val dataOut = Output(UInt(16.W))
|
||||||
val dataOEn = Output(Bool())
|
val dataOEn = Output(Bool())
|
||||||
@@ -71,18 +71,17 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
|
|||||||
io.FSMC.dataOEn := io.FSMC.oen
|
io.FSMC.dataOEn := io.FSMC.oen
|
||||||
|
|
||||||
|
|
||||||
val isWriteSRAM = ~fsmcAddrSync.extract(10) & fsmcAddrSync.extract(9)
|
val isAccessSRAM = ~fsmcAddrSync.extract(9)
|
||||||
val isReadSRAM = ~fsmcAddrSync.extract(10) & ~fsmcAddrSync.extract(9)
|
val isAccessReg = fsmcAddrSync.extract(9)
|
||||||
val isAccessReg = fsmcAddrSync.extract(10)
|
|
||||||
val activeAddr = fsmcAddrSync(8,0)
|
val activeAddr = fsmcAddrSync(8,0)
|
||||||
val regOut = Wire(UInt(16.W))
|
val regOut = Wire(UInt(16.W))
|
||||||
|
|
||||||
mirrorDown.io.enw := (~fsmcCEnSync & isWriteSRAM & (~fsmcWEnSync) )
|
mirrorDown.io.enw := (~fsmcCEnSync & isAccessSRAM & (~fsmcWEnSync) )
|
||||||
mirrorDown.io.addrw := activeAddr
|
mirrorDown.io.addrw := activeAddr
|
||||||
mirrorDown.io.dataw := fsmcdataInSync
|
mirrorDown.io.dataw := fsmcdataInSync
|
||||||
|
|
||||||
|
|
||||||
mirrorUp.io.enr := (~fsmcCEnSync & isReadSRAM & (~fsmcOEnSync) )
|
mirrorUp.io.enr := (~fsmcCEnSync & isAccessSRAM & (~fsmcOEnSync) )
|
||||||
mirrorUp.io.addrr := activeAddr
|
mirrorUp.io.addrr := activeAddr
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
23
src/main/scala/backBoard/Readme.md
Normal file
23
src/main/scala/backBoard/Readme.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# 背板总线
|
||||||
|
|
||||||
|
## 用户接口
|
||||||
|
|
||||||
|
* 地址线 addr 10比特位宽
|
||||||
|
* 数据线 data 16比特位宽
|
||||||
|
* 读使能 OEN 负逻辑
|
||||||
|
* 写使能 WEN 负逻辑
|
||||||
|
* 片选 CEN 负逻辑
|
||||||
|
|
||||||
|
使用要求:在保持其它信号稳定后,最后改变CEN为低,在至少20ns以后将CEN置高,之后方可改变其它信号
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
### 内存空间映射
|
||||||
|
|
||||||
|
* 总线上最多允许挂载32个从站,每个从站有8bits*16个下行寄存器(只写),8bits*16个上行寄存器(只读)
|
||||||
|
* 当地址线第10比特为低时,FSMC访问(只读或者只写)从站镜像寄存器(以8比特形式组织),理论上地址空间支持64个从站,当前要求只访问前32个从站
|
||||||
|
- 通过16比特写用户接口 0x00 ~ 0x07, 可以将数据同步写入到从站0的16个下行寄存器(只写)中,后续从站地址按序分配
|
||||||
|
- 通过16比特读用户接口 0x00 ~ 0x07, 可以将数据同步写入到从站0的16个上行寄存器(只读)中,后续从站地址按序分配
|
||||||
|
* 当地址线第10比特为高时,FSMC通过地址9到0比特访问(可读可写)主站寄存器全部定义为16比特
|
||||||
|
- 0x00 控制状态,预留
|
||||||
|
- 0x01 配置从栈数量,允许配置(0~31)对应1~32个从站
|
||||||
|
|
||||||
Reference in New Issue
Block a user