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

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

    关注

    53

    文章

    4407

    浏览量

    137671
  • HDL
    HDL
    +关注

    关注

    8

    文章

    331

    浏览量

    48814

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    如何使用CMSIS DAP仿真调试,通过NucleiStudio调试蜂鸟SOC

    如标题所示,我们分享如何使用CMSIS DAP仿真调试,通过NucleiStudio调试蜂鸟SOC 我们先介绍一下CMSIS DAP仿真器: 他的功能如下: 可以看到,它支持JT
    发表于 10-21 12:05

    请问Finsh可以支持裸机?

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

    【干货分享】RT-Trace国产调试工具 | 技术集结

    嵌入式系统开发调试一直是最具挑战性的环节之一。传统的调试方式往往依赖低速串口输出、简单的断点调试或离线日志记录,这些
    的头像 发表于 09-16 08:07 576次阅读
    【干货分享】RT-Trace国产<b class='flag-5'>调试</b>工具 | 技术集结

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

    时间同步设备是保障网络系统协同运行的基础设施,尤其金融、电力、通信等领域对精度要求较高的场景,其稳定性直接影响业务连续性。实际部署,网络环境的复杂性常给同步精度带来挑战。本文将
    的头像 发表于 08-13 15:48 296次阅读
    时间同步设备<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 1157次阅读
    RT-Trace初体验一之使用Trace功能<b class='flag-5'>调试</b>Cortex-M4 | 技术集结

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

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

    如何解决Air780EPM开发调试难题?深度解析高效调试方法

    Air780EPM项目开发调试效率往往直接影响进度。面对代码报错、逻辑漏洞等常见痛点,开发者亟需一套系统化的方法论。本文将揭秘实战验证的调试
    的头像 发表于 05-17 10:46 550次阅读
    如何解决Air780EPM开发<b class='flag-5'>中</b>的<b class='flag-5'>调试</b>难题?深度解析高效<b class='flag-5'>调试</b>方法

    轴承损坏后导轨还能用吗?

    轴承损坏后导轨还能用吗?
    的头像 发表于 04-03 17:52 567次阅读
    轴承损坏后导轨<b class='flag-5'>还能用</b>吗?

    SEW_DPV1调试手

    电子发烧友网站提供《SEW_DPV1调试手册.pdf》资料免费下载
    发表于 04-01 16:29 0次下载

    模拟示波器电路设计与调试的应用

    模拟示波器电路设计与调试的应用主要体现在以下几个方面:一、电路设计阶段 信号验证: 电路设计阶段,设计师可以通过模拟示波器观测电路
    发表于 03-31 14:07

    单晶硅纳米力学性能测试方法

    材料纳米力学性能测试的众多方法,纳米压痕技术凭借其独特的优势脱颖而出,成为当前的主流测试手段
    的头像 发表于 03-25 14:38 1129次阅读
    单晶硅纳米力学性能测试方法

    是德示波器功率稳定性测试的技术方法

    功率稳定性测试现代电子设备的研发、生产和维护过程至关重要。是德示波器作为一种高精度的测试仪器,其强大的功率分析功能为工程师提供了有效的测试手段,确保电子设备各种工作条件下的稳定性
    的头像 发表于 03-25 12:57 631次阅读
    是德示波器<b class='flag-5'>在</b>功率稳定性测试<b class='flag-5'>中</b>的技术方法

    安科瑞DTSD1352电能表与预付费系统能用电管理的应用研究

    安科瑞 程瑜 187 0211 2087 摘要 本文研究了安科瑞DTSD1352电能表及其预付费系统能用电管理的应用。DTSD1352电能表是一款多功能电力测量设备,具有高精度测量、数据存储
    的头像 发表于 02-13 15:00 651次阅读
    安科瑞DTSD1352电能表与预付费系统<b class='flag-5'>在</b>智<b class='flag-5'>能用</b>电管理<b class='flag-5'>中</b>的应用研究