Chisel3.4.3实现BRAM BlackBox时Verilog生成无报错如何排查?
排查步骤
1. 优先验证BlackBox资源加载问题
- 确认项目路径下
src/main/resources/sv/bram.sv文件存在,路径大小写完全匹配(Linux系统大小写敏感,重装系统后文件路径大小写变动会触发HasBlackBoxResource加载失败,这类错误在Chisel 3.4.3默认日志配置下大概率会被截断)。 - 临时注释
BRamSv类声明中的with HasBlackBoxResource和setResource("/sv/bram.sv")语句,再次执行sbt run,如果报错消失,即可定位为资源路径问题。
2. 修改配置强制输出全量异常日志
方式一:添加日志配置文件
在项目根目录创建src/main/resources/logback.xml,写入以下配置输出全量调试日志:
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n%rEx</pattern> </encoder> </appender> <root level="trace"> <appender-ref ref="STDOUT" /> </root> </configuration>
方式二:正确传递调试参数
注意Chisel运行参数需要传递给主程序而非sbt本身,执行命令改为:
sbt "run -ll debug --full-stacktrace --throw-on-first-error"
也可以在build.sbt中添加全局Java运行参数:
javaOptions ++= Seq( "-Dchisel3.logLevel=debug", "-Dfirrtl.logLevel=debug", "-Dlogback.stacktraceHandling=true" )
3. 排除环境兼容性问题
- 验证JDK版本:Chisel 3.4.3仅兼容JDK 8、JDK 11,重装系统后如果安装了JDK 17及以上版本,会出现无明确栈信息的异常,执行
java -version确认版本,过高则切换到JDK 11即可。 - 最小用例验证:写一个不含BlackBox的简单Chisel模块测试运行是否正常,排除Chisel依赖本身安装异常:
import chisel3._ class TestAdder extends Module { val io = IO(new Bundle{ val a = Input(UInt(8.W)) val b = Input(UInt(8.W)) val c = Output(UInt(8.W)) }) io.c := io.a + io.b } object TestMain extends App { chisel3.Driver.execute(args, () => new TestAdder) }
如果最小用例也报错,删除本地缓存的依赖包~/.ivy2、~/.cache/coursier后重新执行sbt update拉取依赖即可。
内容的提问来源于stack exchange,提问作者escou64
相关产品推荐
相关产品推荐

