You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chisel实现串行接收器:Register与printf输出异常问题求助

Chisel串行接收器(Rx Serializer)实现异常排查

我正在用Chisel实现一个简单的串行接收器,用来接收1位串行数据流,假设该数据流的时钟频率远低于内部时钟频率。

我使用了几个寄存器来存储数据并检测外部时钟的上升沿:

// 寄存数据输入
val dataReg = RegNext(io.data_in)

// 上升沿检测函数
def risingedge(x: Bool): Bool = x && !RegNext(x)
val clkRisingEdge = risingedge(io.clk_in)

我计划在(io.enable && clkRisingEdge)为高电平时更新数据缓冲区,相关代码如下:

val byteData = Reg(UInt(bufferWidth.W))

when(bitIndex === 0.U) {
  byteData := dataReg
  }.otherwise {
    byteData := Cat(byteData((bufferWidth - 2), 0), dataReg)
}

其中bufferWidth设置为8位。

测试阶段我注入了1位串行数据流,用clock.step(5)驱动时钟。打印dataReg的值完全正确,但用printf("byteData: 0x%x\n", byteData)输出byteData时,结果却不符合预期。

作为Chisel新手,我可能忽略了一些基础问题。

补充模块定义代码:

class Serializer extends Module {
  val io = IO(new Bundle {
    val enable = Input(Bool())
    val reset = Input(Bool())
    val data_in = Input(Bool()) // 异步、低时钟速率
    val clk_in = Input(Bool()) // 异步、低时钟速率
    val valid = Output(Bool())
  })

  io.valid := false.B // 初始化输出
}

内容的提问来源于stack exchange,提问作者Henrik9k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:00:09