blob: 98ad167049194b2bd0e035b54d99b1299f0ef2a1 [file] [log] [blame]
package bus
import chisel3._
import freechips.rocketchip.util.{AsyncQueue, AsyncQueueParams}
import kelvin.Parameters
class TlulFifoAsync(
p: TLULParameters,
reqDepth: Int = 4,
rspDepth: Int = 4,
moduleName: String = "TlulFifoAsync"
) extends RawModule {
override val desiredName = moduleName
val io = IO(new Bundle {
val clk_h_i = Input(Clock())
val rst_h_i = Input(Bool())
val clk_d_i = Input(Clock())
val rst_d_i = Input(Bool())
val tl_h = Flipped(new OpenTitanTileLink.Host2Device(p))
val tl_d = new OpenTitanTileLink.Host2Device(p)
})
val req_queue = Module(new AsyncQueue(new OpenTitanTileLink.A_Channel(p), AsyncQueueParams(depth = reqDepth)))
req_queue.io.enq_clock := io.clk_h_i
req_queue.io.enq_reset := io.rst_h_i
req_queue.io.deq_clock := io.clk_d_i
req_queue.io.deq_reset := io.rst_d_i
req_queue.io.enq <> io.tl_h.a
io.tl_d.a <> req_queue.io.deq
val rsp_queue = Module(new AsyncQueue(new OpenTitanTileLink.D_Channel(p), AsyncQueueParams(depth = rspDepth)))
rsp_queue.io.enq_clock := io.clk_d_i
rsp_queue.io.enq_reset := io.rst_d_i
rsp_queue.io.deq_clock := io.clk_h_i
rsp_queue.io.deq_reset := io.rst_h_i
rsp_queue.io.enq <> io.tl_d.d
io.tl_h.d <> rsp_queue.io.deq
}
import _root_.circt.stage.{ChiselStage, FirtoolOption}
import chisel3.stage.ChiselGeneratorAnnotation
import scala.annotation.nowarn
@nowarn
object TlulFifoAsync128Emitter extends App {
val p = new Parameters
p.lsuDataBits = 128
(new ChiselStage).execute(
Array("--target", "systemverilog") ++ args,
Seq(
ChiselGeneratorAnnotation(() =>
new TlulFifoAsync(
p = new bus.TLULParameters(p),
reqDepth = 1,
rspDepth = 1,
moduleName = "TlulFifoAsync128"
)
)
) ++ Seq(FirtoolOption("-enable-layers=Verification"))
)
}