0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

仿真调试手段在SpinalHDL中还能用吗?

FPGA之家 来源:Spinal FPGA 作者:玉骐 2021-06-17 09:33 次阅读

要问做逻辑的什么看的最久,那一定是波形吧。那除了看波形,还能做点儿其他的么?

调试“三十六计”

作为逻辑开发者仿真是一个永远跑不掉的话题。尽管说严格来讲设计和验证是分离的,但对于FPGA开发来讲,即便是大厂也很少配备专门的逻辑验证人员来支持你的工作。无论是单元级仿真还是系统级仿真,那些年我们常用到仿真调试手段首推的估计就是看波形了。但老实讲,小的模块或者小的case看看波形还好,但如果是比较大的模块或case需要很长的时间来跑的话那么追踪波形对我个人来讲还是很废眼神的~

那么除了查看波形,我们常用的仿真调试手段无外乎在待仿真测试逻辑里添加打印和添加SVA了。对于添加打印,在之前通过verilog/systemVerilog搬砖时是时常干的事情,而SVA在上学的那会儿倒是看过下面这本书:

那么如今转到SpinalHDL,这些手段是否还能用呢?

Assertion

与SystemVerilog中相似,SpinalHDL中也提供Assertion功能,其关键字也为assert:

assert(assertion : Bool, message : String = null, severity: AssertNodeSeverity = Error)assert(assertion: Bool, message: Seq[Any], severity: AssertNodeSeverity)

assertion:断言条件

message:断言失败时显示信息,可以是字符串或者是Seq。

severity:断言等级。

来看一个demo:

pYYBAGDKqMiAXbFuAAFxmXl5Rhg455.jpg

这里放置了两个assert,分别使用了两种assert的使用方式。message中放置Seq时可以显示更多的提示信息。 要知道即便我们是采用SpinalHDL,在仿真的时候还是要生成Verilog文件交给仿真器去执行的。那看下生成的RTL代码:

pYYBAGDKqAKAFKFZAAE0dJBUbdw865.jpg

可以看到,在SpinalHDL中,对于SVA中的立即断言和并发断言,其只支持并发断言。而且会生成额外逻辑用来支持断言,而且在复位期间是不做断言检查的。

report

SpinalHDL中提供了report方法用于在逻辑中显示打印信息:

def report(message: String) = assert(False, message, NOTE)def report(message: Seq[Any]) = assert(False, message, NOTE) def report(message: String, severity: AssertNodeSeverity) = assert(False, message, severity)def report(message: Seq[Any], severity: AssertNodeSeverity) = assert(False, message, severity) 可以看到,report的底层实现是基于assert来实现的,且默认断言失败,故而信息会一直打印。像上面的dmeo我们可以添加下面的打印信息:

report(Seq(“data0:”,io.data0,“ data1:”,io.data1,“ sum:”,io.sum),WARNING)

在生成的RTL代码中会有:

poYBAGDKp_yAUeVJAADPLU4VgLQ035.jpg

同样不出意外,在复位期间将不会打印任何信息。

Formal

针对SVA的支持,SpinalHDL提供了部分支持。在SpinalHDL-Doc中给出了下面的这个Demo:

pYYBAGDKp_KAKvVsAAF7a7PJauA080.jpg

object MyToplevelSystemVerilogWithFormal { def main(args: Array[String]) { val config = SpinalConfig(defaultConfigForClockDomains = ClockDomainConfig(resetKind=SYNC, resetActiveLevel=HIGH)) config.includeFormal.generateSystemVerilog(new TopLevel()) }}

但这个demo有几个问题是: 1、使用GenerationFlags.formal及includeFormal时如果我们的代码在GenerationFlags外围如果有使用assert或者report时,GenerationFlags.formal会将其屏蔽掉,在仿真时不起作用。 2、initstate()在verilator中不支持。 针对上面的问题,可以采用: 1、采用GenerationFlags.simulation和includeSimulation替代GenerationFlags.formal及includeFormal。 2、如果要在复位期间添加sva,那么通过clockDomain.isResetActive替换initstate() 当在生成Verilog时不添加includeSimulation,那么GenerationFlags.simulation所包含的内容将不会生成在Verilog中,从而能够提供一个干净的代码。 手册中给出了支持的SVA:

pYYBAGDKp-uAVGcSAAFaHOXsqfU933.jpg

但具体还是要看仿真器是否支持,毕竟verilator和vcs这些在功能上还是有一些差距。

文章来源:Spinal FPGA

图片来源:似猿非猿的FPGA

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    3976

    浏览量

    133015
  • HDL
    HDL
    +关注

    关注

    8

    文章

    324

    浏览量

    47241

原文标题:除了看波形,还能做点儿啥

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AFE77 JESD204B 调试手

    电子发烧友网站提供《AFE77 JESD204B 调试手册.pdf》资料免费下载
    发表于 09-11 10:25 0次下载
    AFE77 JESD204B <b class='flag-5'>调试手</b>册

    TI AFE8092 AFE8030 JESD204配置及调试手册- Part A

    电子发烧友网站提供《TI AFE8092 AFE8030 JESD204配置及调试手册- Part A.pdf》资料免费下载
    发表于 09-03 10:02 2次下载
    TI AFE8092 AFE8030 JESD204配置及<b class='flag-5'>调试手</b>册- Part A

    TI AFE8092 AFE8030 JESD204C配置及调试手册 Part B

    电子发烧友网站提供《TI AFE8092 AFE8030 JESD204C配置及调试手册 Part B.pdf》资料免费下载
    发表于 08-29 10:50 0次下载
    TI AFE8092 AFE8030 JESD204C配置及<b class='flag-5'>调试手</b>册 Part B

    TI AFE8092/AFE8030 JESD204C配置及调试手册 Part C

    电子发烧友网站提供《TI AFE8092/AFE8030 JESD204C配置及调试手册 Part C.pdf》资料免费下载
    发表于 08-29 10:39 0次下载
    TI AFE8092/AFE8030 JESD204C配置及<b class='flag-5'>调试手</b>册 Part C

    请问PMODE[2:0]处于悬空状态,即FFF,USB接口还能用吗?

    请问PMODE[2:0]处于悬空状态,即FFF,USB接口还能用
    发表于 05-23 08:01

    单片机Debug的这几种方式,你都知道吗?

    调试、LED/蜂鸣器调试、单元测试等方式。下面我们就这些方式来进行介绍。一、仿真调试仿真调试
    的头像 发表于 05-01 08:10 2663次阅读
    单片机Debug的这几种方式,你都知道吗?

    stm32 JTAG和普通IO复用,当软件设置为普通IO时,还能用JTAG下载软件吗?

    stm32 JTAG和普通IO复用,当软件设置为普通IO时,还能用JTAG下载软件吗。
    发表于 04-07 07:52

    工字电感的磁芯掉一小块还能用

    电子发烧友网站提供《工字电感的磁芯掉一小块还能用吗.docx》资料免费下载
    发表于 03-29 14:37 0次下载

    浅析SpinalHDLPipeline的复位定制

    之前有系列文章介绍了SpinalHDLPipeline的使用,最近在一个功能模块真实的使用了这个lib。
    的头像 发表于 03-17 17:31 867次阅读
    浅析<b class='flag-5'>SpinalHDL</b><b class='flag-5'>中</b>Pipeline<b class='flag-5'>中</b>的复位定制

    fpga仿真器是什么?它有哪些优势?

    FPGA仿真器是一种用于模拟FPGA(现场可编程门阵列)硬件行为的软件工具。它通过模拟FPGA内部的逻辑电路、时序和接口等,帮助工程师FPGA设计过程中进行功能验证和性能测试。FPGA仿真
    的头像 发表于 03-15 15:15 1164次阅读

    贴片绕线电感外壳坏了还能用

    电子发烧友网站提供《贴片绕线电感外壳坏了还能用吗.docx》资料免费下载
    发表于 01-22 09:22 0次下载

    #2024,立Flag了嘛? #win平台搭建SpinalHDL开发环境

    %\\\\lib; 系统变量path的 值里面添加%JAVA_HOME%\\\\bin和%JRE_HOME%\\\\jre\\\\bin 至此,对应的开发所用的软件安装结束,对应的仿真和波形显示不再赘述; 还有就是要在SBT文件中进行改写: 到此就所有工作完成了。
    发表于 01-21 10:52

    ARMv7-A那些事-栈回溯浅析

    嵌入式开发过程,经常需要对代码进行调试来解决各种各样的问题,常用的调试手段
    的头像 发表于 11-21 15:51 1489次阅读
    ARMv7-A那些事-栈回溯浅析

    GSM开发板V1调试手

    电子发烧友网站提供《GSM开发板V1调试手册.pdf》资料免费下载
    发表于 11-17 14:50 0次下载
    GSM开发板V1<b class='flag-5'>调试手</b>册

    SpinalHDL 1.9.4版本的PackedBundle、PackedWordBundle的使用

        聊一聊SpinalHDL 1.9.4版本的PackedBundle、PackedWordBundle的使用 位域的提取与封装     逻辑设计里,但凡牵涉到协议,一般都避免不了协议字段
    的头像 发表于 11-11 15:35 1036次阅读
    <b class='flag-5'>SpinalHDL</b> 1.9.4版本<b class='flag-5'>中</b>的PackedBundle、PackedWordBundle的使用