FSMC跑测试

This commit is contained in:
RuigeLee
2024-01-09 17:48:23 +08:00
parent d74a4754a7
commit d729dfbe7e
3 changed files with 74 additions and 47 deletions

View File

@@ -109,13 +109,13 @@ class BackBoardMstBase extends Module{ //10M
trait BackBoardMstFSMC{ this: BackBoardMstBase =>
val isRegRefleshFlip = withClockAndReset( io.ides_pclk.asClock, reset ){ RegInit(false.B) }
val wrRegAddr = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(10.W)) }
val wrRegData = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(16.W)) }
val isRegRefleshFlip = withClockAndReset( io.ides_pclk.asClock, reset ){ RegInit(false.B) } //100M
val wrRegAddr = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(10.W)) } //100M
val wrRegData = withClockAndReset( io.ides_pclk.asClock, reset ){ Reg(UInt(16.W)) } //100M
withClockAndReset( io.ides_pclk.asClock, reset ){//100M
mirrorDown.io.clockw := io.ides_pclk.asBool
mirrorUp.io.clockr := io.ides_pclk.asBool
mirrorDown.io.clockw := io.ides_pclk.asBool //100M
mirrorUp.io.clockr := io.ides_pclk.asBool //100M
val fsmcCSSync = ShiftRegisters( io.FSMC.cs, 3, false.B, true.B )
val fsmcRDSync = ShiftRegisters( io.FSMC.rd, 3, false.B, true.B )
@@ -137,6 +137,7 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
mirrorDown.io.enw := isAccessSRAM & ~fsmcCSWRSync(2) & fsmcCSWRSync(1)
mirrorDown.io.addrw := activeAddr
mirrorDown.io.dataw := io.FSMC.ADIn
@@ -188,9 +189,9 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
val isChkRegReflesh = RegInit(false.B)
when( isChkRegReflesh =/= isRegRefleshFlip ){
when( wrRegAddr === 1.U ){
ctrlTransmit := wrRegData.extract(5)
isChkRegReflesh := ~isChkRegReflesh
when( wrRegAddr === 0.U ){
when( wrRegData.extract(4) ){
statusCDRErr := false.B
}
@@ -200,9 +201,22 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
when( wrRegData.extract(2) ){
statusLinkErr := false.B
}
}
when( wrRegAddr === 1.U ){
ctrlTransmit := wrRegData.extract(5)
ctrlSynch := wrRegData.extract(1)
ctrlInit := wrRegData.extract(0)
when( wrRegData.extract(0) ){
ctrlInit := true.B
statusSynch := false.B
statusInit := false.B
}
}
}
@@ -476,18 +490,14 @@ trait BackBoardMstLVDSError{ this: BackBoardMstLVDSBase =>
when( lvdsMst.io.closed_loop_err ){
slvOffLine := lvdsMst.io.link_err_location(5,0)
statusLinkErr := true.B
statusSynch := false.B
statusInit := false.B
}
when( lvdsMst.io.upstream_cdr_err ){
statusCDRErr := true.B
ctrlTransmit := false.B
}
when( lvdsMst.io.upstream_crc_valid & lvdsMst.io.upstream_crc_err ){
statusCRCErr := true.B
ctrlTransmit := false.B
}
}

View File

@@ -2,22 +2,35 @@
## 用户接口
* 地址线 addr 10比特位宽
* 数据线 data 16比特位宽
* 读使能 OEN 负逻辑
* 写使能 WEN 负逻辑
* 片选 CEN 负逻辑
使用要求在保持其它信号稳定后最后改变CEN为低在至少20ns以后将CEN置高之后方可改变其它信号
* 数据地址线 AD 16比特位宽
* 地址锁存 ADV 正逻辑
* 读使能 WR 正逻辑
* 写使能 WR 正逻辑
* 片选 CS 正逻辑
使用要求地址锁存时ADV保持高至少30ns 写入时CS,WR保持高至少30ns读出时CS,RD保持高至少30ns方可读取数据线上数据
--------------------------------------
### 内存空间映射
* 总线上最多允许挂载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个从站
* 总线上最多允许挂载64个从站每个从站有8bits*32个下行寄存器只写8bits*32个上行寄存器(只读)
* 当地址线第11比特(AD[10])为低时FSMC访问只读或者只写从站镜像寄存器以8比特形式组织
- 通过16比特写用户接口 0x00 ~ 0x1F, 可以将数据同步写入到从站0的16个下行寄存器只写后续从站地址按序分配
- 通过16比特读用户接口 0x00 ~ 0x1F, 可以将数据同步写入到从站0的16个上行寄存器只读后续从站地址按序分配
* 当地址线第11比特(AD[10])为高时FSMC通过地址9到0比特访问可读可写主站寄存器全部定义为16比特
- 0x00 控制状态,
+ statusCDRErr: 第4比特表示LVDS总线发生CDR解析错误写1清零
+ statusCRCErr: 第3比特表示LVDS总线发生传输CRC错误写1清零
+ statusLinkErr: 第2比特表示LVDS总线发生从站掉线写1清零
+ statusSynch: 第1比特表示LVDS总线各个从站已经同步初始化完成时且ctrlSynch为高自动置高手动将ctrlInit置高时自动置低
+ statusInit: 第0比特表示LVDS总线已经初始化初始化完成时自动置高手动将ctrlInit置高时自动置低
- 0x01 操作寄存器
+ ctrlTransmit: 第5比特手动写入1将触发LVDS总线传输传输完成将自动清零
+ ctrlSynch: 第1比特手动写入1表示初始化的同时同步所有从站
+ ctrlInit: 第0比特手动写入1将触发LVDS总线初始化初始化完成将自动清零
- 0x02 配置从栈数量(减一): 从站数量当前无法手动配置,初始化过程中将自动检测在线从站数量,并以该数量进行初始化,从站数量将自动写入该寄存器
- 0x03 离线位置: 当发生从站掉线,该寄存器可读出掉线从站编号