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

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

    关注

    55

    文章

    4568

    浏览量

    138825
  • HDL
    HDL
    +关注

    关注

    8

    文章

    332

    浏览量

    49088

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    变频器参数实际应用调试

    变频器调试的核心是将电机铭牌参数"告诉"变频器,并配置控制指令、频率源及加减速时间等基本参数,以满足工艺需求。调试通常遵循"先静后动、由简入繁"的原则,确保系统安全、高效运行。 下面是变频器调试
    的头像 发表于 04-24 07:10 300次阅读
    变频器参数<b class='flag-5'>在</b>实际应用<b class='flag-5'>中</b>的<b class='flag-5'>调试</b>

    阻抗分析仪E4990A太阳能电池研究的应用

    随着清洁能源技术的快速发展,太阳能电池作为核心的光电转换器件,其性能优化与可靠性评估成为科研与产业界关注的重点。众多测试手段,是德科技(Keysight)E4990A阻抗分析仪凭借其高精度、宽频带和多功能特性,正逐渐成为太阳
    的头像 发表于 04-20 16:41 201次阅读
    阻抗分析仪E4990A<b class='flag-5'>在</b>太阳能电池研究<b class='flag-5'>中</b>的应用

    SINAMICS S120 STARTER 调试手

    SINAMICS S120 STARTER 调试手册 工程技术人员 
    发表于 04-02 15:38 0次下载

    Renesas E1/E20 仿真器使用指南:从规格到调试全解析

    Renesas E1/E20 仿真器使用指南:从规格到调试全解析 电子工程师的日常工作仿真器是调试
    的头像 发表于 03-31 15:30 315次阅读

    浅谈复杂芯片设计的SPICE仿真困境

    现代集成电路设计领域,SPICE(Simulation Program with Integrated Circuit Emphasis)仿真一直是验证电路功能和性能的核心手段。然而,随着芯片设计复杂度的指数级增长,传统SPI
    的头像 发表于 03-13 13:39 839次阅读

    Renesas E1/E20 仿真器:设计与调试的全方位指南

    Renesas E1/E20 仿真器:设计与调试的全方位指南 电子设计领域,仿真器是调试和验证微控制器(MCU)程序不可或缺的工具。Ren
    的头像 发表于 02-28 15:45 415次阅读

    瑞萨E1/E20仿真器:设计、调试与使用全解析

    瑞萨E1/E20仿真器:设计、调试与使用全解析 嵌入式系统开发仿真器是不可或缺的工具,它能帮助工程师高效地进行硬件
    的头像 发表于 02-11 17:05 1040次阅读

    Renesas E1/E20 仿真器:设计与调试全解析

    Renesas E1/E20 仿真器:设计与调试全解析 嵌入式系统开发的广阔领域中,仿真器扮演着至关重要的角色,它是工程师们调试和优化代码
    的头像 发表于 02-09 10:30 881次阅读

    CD7377CZ/7388工程化调试故障排查手册

    标签:#CD7377CZ故障排查 #7388调试手册 #音频芯片工程调试 #线性稳压故障解决 #国产芯片应用 #电子工程实操
    的头像 发表于 12-11 16:07 618次阅读

    嵌入式开发调试神器全解析:JTAG、SWD、串口打印

    写嵌入式代码只是第一步,调试才是决定项目能不能顺利推进的关键。MCU不跑?外设不响应?代码跑飞?没有合适的调试手段,排查问题就像摸黑找路。本文带你搞懂三大调试利器——JTAG、SWD、串口打印。不仅
    的头像 发表于 11-24 19:04 1332次阅读
    嵌入式开发<b class='flag-5'>调试</b>神器全解析:JTAG、SWD、串口打印

    请问Finsh可以支持裸机?

    我想在我们裸机的里面加入finsh的的功能,是否可以支持呢? 我们的系统为消息事件驱动的伪系统,比较稳定,但是缺少一些调试手段
    发表于 09-28 14:46

    时间同步设备复杂网络环境调试要点

    时间同步设备是保障网络系统协同运行的基础设施,尤其金融、电力、通信等领域对精度要求较高的场景,其稳定性直接影响业务连续性。实际部署,网络环境的复杂性常给同步精度带来挑战。本文将
    的头像 发表于 08-13 15:48 692次阅读
    时间同步设备<b class='flag-5'>在</b>复杂网络环境<b class='flag-5'>中</b>的<b class='flag-5'>调试</b>要点

    RT-Trace初体验一之使用Trace功能调试Cortex-M4 | 技术集结

    随着嵌入式系统规模和复杂度不断提升,传统的调试手段已难以满足对系统运行状态的精细化分析需求。为提升开发效率、优化系统性能,RT-Thread推出了一款全新调试工具——RT-Trace。该工具
    的头像 发表于 07-06 10:03 1752次阅读
    RT-Trace初体验一之使用Trace功能<b class='flag-5'>调试</b>Cortex-M4 | 技术集结

    泰克示波器 MSO58 混合信号示波器嵌入式系统调试的核心技巧

    嵌入式系统的开发与调试,泰克示波器 MSO58 混合信号示波器凭借其强大的功能和灵活的特性,成为工程师不可或缺的调试利器。掌握其核心调试
    的头像 发表于 07-01 16:28 810次阅读
    泰克示波器 MSO58 混合信号示波器<b class='flag-5'>在</b>嵌入式系统<b class='flag-5'>调试</b><b class='flag-5'>中</b>的核心技巧

    如何调试nRF5 SDK

    本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题。一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_check函数
    的头像 发表于 06-24 08:59 1204次阅读
    如何<b class='flag-5'>调试</b>nRF5 SDK