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
相关产品推荐
相关产品推荐

