chisel fifo

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

// Hello World
import chisel3._
/*
class Hello extends Module {
  val io = IO(new Bundle {
    val led = Output(UInt(1.W))
  })
  val CNT_MAX = (50000000 / 2 - 1).U

  val cntReg = RegInit(0.U(32.W))
  val blkReg = RegInit(0.U(1.W))

  cntReg := cntReg + 1.U
  when(cntReg === CNT_MAX) {
    cntReg := 0.U
    blkReg := ~blkReg
  }
  io.led := blkReg
}
 */

import chisel3.util._
class FifoController(width: Int, depth: Int) extends Module {
  val io = IO(new Bundle {
    val enq = Flipped(Decoupled(UInt(width.W)))
    val deq = Decoupled(UInt(width.W))
    val count = Output(UInt(log2Ceil(depth + 1).W))
  })
  // 定义FIFO的存储器
  val mem = SyncReadMem(depth, UInt(width.W))
  // 定义FIFO的读写指针
  val pointer = RegInit(0.U(log2Ceil(depth).W))
  val enqPtr = pointer
  val deqPtr = pointer
  // 定义FIFO的计数器
  val count = RegInit(0.U(log2Ceil(depth + 1).W))
  // 连接输入输出
  io.enq.ready := count < depth.U
  io.deq.valid := count > 0.U
  io.deq.bits := mem.read(deqPtr)
  io.count := count
  // 当enq.fire()为真时,写入数据到FIFO
  when(io.enq.fire()) {
    mem.write(enqPtr, io.enq.bits)
    pointer := pointer + 1.U
    count := count + 1.U
  }
  // 当deq.fire()为真时,从FIFO读取数据
  when(io.deq.fire()) {
    pointer := pointer - 1.U
    count := count - 1.U
  }
}
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值