Chisel3高版本中如何为内部信号添加mark_debug属性生成SystemVerilog
Chisel 6.x版本实现信号调试标记(适配Vivado ILA)
旧版本的markDebug实现依赖的AttributeAnnotation等API在Chisel 6.x中已被重构,改用FIRRTL官方提供的专用注解即可实现相同功能,以下是适配新版本的代码:
import chisel3._ import chisel3.experimental.{annotate, ChiselAnnotation} import firrtl.annotations.MarkDebugAnnotation object MarkDebug { /** 将信号标记为可调试状态,可选禁止优化以确保能被ILA抓取 */ def apply[T <: Data](data: T, markDontTouch: Boolean = false): T = { annotate(new ChiselAnnotation { override def toFirrtl = MarkDebugAnnotation(data.toNamed) }) if (markDontTouch) dontTouch(data) else data } }
说明
- 改用
firrtl.annotations.MarkDebugAnnotation替代旧版本手动拼接的属性字符串,完全适配Chisel 6.x的注解规范 markDontTouch参数保留原有功能,设置为true时会调用dontTouch阻止信号被综合工具优化,确保Vivado ILA能正常抓取目标信号- 使用方式和旧版本一致:在需要调试的信号前调用
MarkDebug(your_signal)即可,例如val debug_signal = MarkDebug(internal_reg, markDontTouch = true)
内容的提问来源于stack exchange,提问作者Aperture Initiative
相关产品推荐
相关产品推荐

