Files
eb001/src/main/scala/backBoard/pico/SimpleGpio.scala.bk

43 lines
1.1 KiB
Plaintext
Raw Normal View History

2024-10-29 10:43:48 +08:00
package BACK
import chisel3._
import chisel3.util._
import org.chipsalliance.cde.config._
import freechips.rocketchip.diplomacy._
import freechips.rocketchip.tilelink._
2024-11-01 14:53:52 +08:00
class SimpleGpio()(implicit p: Parameters) extends BackModule{
2024-10-29 10:43:48 +08:00
class SimpleGpioIO extends Bundle{
2024-11-01 14:53:52 +08:00
val mem = Flipped(new Mem_Port_Bundle)
2024-10-29 10:43:48 +08:00
val out = Output(UInt(32.W))
val in = Input(UInt(32.W))
val isOnline = Output(Bool())
val isLast = Input(Bool())
}
val io: SimpleGpioIO = IO(new SimpleGpioIO)
2024-11-01 14:53:52 +08:00
val isWriteGpio = io.mem.fire & io.mem.addr(3,0) === "h0".U & io.mem.wstrb =/= 0.U
val isReadGpio = io.mem.fire & io.mem.addr(3,0) === "h0".U & io.mem.wstrb === 0.U
// val isWriteDir = io.mem.fire & io.mem.addr(3,0) === "h4".U & io.mem.wstrb =/= 0.U
val isReadIsLast = io.mem.fire & io.mem.addr(3,0) === "h8".U & io.mem.wstrb === 0.U
2024-10-29 10:43:48 +08:00
io.isOnline := false.B
2024-11-01 14:53:52 +08:00
io.out := RegEnable( io.mem.wdata, 0.U(32.W), isWriteGpio )
2024-10-29 10:43:48 +08:00
2024-11-01 14:53:52 +08:00
io.mem.ready := true.B
io.mem.rdata :=
Mux( io.mem.addr(3,0) === "h0".U, io.in,
Mux( io.mem.addr(3,0) === "h8".U, io.isLast, 0.U ) )
2024-10-29 10:43:48 +08:00
2024-11-01 14:53:52 +08:00
}
2024-10-29 10:43:48 +08:00