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

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

3天内不再提示

如何从源代码中寻找并修复漏洞

科技绿洲 来源:新思科技 作者:新思科技 2022-06-07 16:23 次阅读

专用集成电路ASIC)的设计规模不断扩大、复杂度不断攀升,这对芯片开发者的能力和所使用的工具都提出了更高的要求。

在之前的文章中,我们探讨过数十亿门级ASIC所面临的跨时钟域(CDC)和跨复位域(RDC)挑战,今天我们将共同探讨第三大挑战──静态代码校验。

高效的代码校验

让芯片开发周期左移

代码校验,即对源代码进行自动检查以排查错误,是硬件开发生命周期中非常重要的一环。如果能在RTL开发的早期阶段就开始代码校验工作,评估代码质量以及一旦代码错误会对设计流程的后续环节造成哪些影响,这对开发者来说将会大大提升开发效率,并最终实现开发周期的左移。

现在的代码校验已经远远超出了RTL语义规则检查的范畴,扩展到了综合能力检查、结构分析以及网表/电气规则检查。为实现左移,芯片开发者希望能够在开发流程早期阶段就完成许多复杂的任务,比如在 RTL 内执行更复杂的检查,以及确保 RTL 与下游合成引擎更加一致等等。开发者还希望 RTL 对各种仿真器“友好”并可进行互操作,同时兼容等价性检查器。这些要求都不简单,而这其中真正的挑战就在于如何从源代码中寻找并修复漏洞。

如果把这些挑战放大到数十亿门级ASIC的设计中,可以想想代码校验会有多复杂,因此为了在设计规模和复杂度不断攀升的情况下,依旧实现将开发周期左移,就需要更强大的代码校验工具来帮助芯片开发者们高效完成代码的预先排查工作。

管理规则集

代码校验工具需要使用规则集运行,开发者需要创建、管理和编策这些规则集。这些都是非常专业的技能,其中涉及的专业知识通常是小公司不具备的或者想要引入的,所以对小公司而言,入门级的做法就是购买现成的软件包。而大型公司一般有自己的内部代码校验规则集,这些内部规则集对公司来说都是重要的投资。

第三方或行业标准规则集可以降低准入门槛,帮助小规模的设计团队加速代码校验工作流程。新思科技的GuideWare方法学文档和规则集正是为了这一目的而开发的,旨在帮助开发者快速开始采用此技术,并根据需要进一步制定规则。

GuideWare的目标是能够在至少80%的用例中实现RTL移交,从而更大限度地减少创建、管理和编策相关规则所需的专业知识。对小型设计团队而言,GuideWare绝对是一个福音,他们的设计可以实现质的飞跃,生产力也会大幅提升。

新思科技会对GuideWare定期进行更新,以确保规则集的复杂性始终处于行业领先地位。新思科技的IP均已通过代码校验认证,开发者们可以选择新思科技的IP以及GuideWare中的设计复用合规性检查功能,做出符合行业标准的设计。

如何处理无用代码?

无用代码或无法访问的代码在开发阶段通常都会存在,有些甚至会保留到流片阶段。为什么会这样呢?

设计的复杂性在开发过程中也会不断演进,开发者会随时进行漏洞修复、增加功能、集成可复用的模块等等,有时还会为了实现功耗和性能目标做全面的代码优化,这样就会导致最初写的一些代码变为无用代码。但是由于产品交付时间并没有因为设计变复杂而延后,迫于时间压力,很多时候开发者没有时间去清理这些无用代码。虽然保留这些代码并不会影响下个代码的正常运行,但是如果追求精简设计,这些代码就必须要处理。

使用代码校验工具来清理无用代码是非常有必要的,有些开发者对工具是否好用持怀疑态度,他们可能会为了以防万一就保留相关代码,但大多数都会秉持“零违例”准则,即“要么修复,要么放弃”。因此,代码校验工具能够准确识别无用代码并知道如何处理它们是非常重要的。

新思科技的静态代码校验工具VC SpyGlass™ Lint采用形式引擎,在识别无用代码上效率非常出众。但开发者通常会有以下几种操作选项:

更新RTL代码从而移除无用代码:这应该是能把无用代码清理的最干净的解决方案,还能够有效移除覆盖率分析中的覆盖率空洞。但这一方法需要重新构思代码,并进行功能验证,所以比较花时间。

把无用代码注释掉并为了以后参考附上相关信息的注释:虽然这种方法也还需要进行功能验证,但它也能提供一个干净的代码并移除覆盖率空洞。

弃用代码校验 waiver 文件中的无用代码:仅确认无用代码的安全性,不对其进行清理,RTL代码库保持不变。覆盖空洞将仍然存在。

了解设计复杂性

越复杂的设计所包含的漏洞也就越复杂。但开发者在设计中通常都会追求精简、直观、一看就懂且易于维护的代码结构。不过随着时间的推移,在开发者不断debug修正代码的过程中,代码的整体质量与最初相比会有所下降,他们可能还会突然发现RTL代码怎么好像越改越复杂了,逻辑也越来越难理解了。

衡量并可视化呈现代码的复杂性可以帮助开发者“看见”代码中变得复杂的部分,他们可以利用这一信息对积攒的复杂代码进行评估和推演。针对复杂性风险过高的代码区,开发者会在性能和功能之间做一些权衡,并对部分代码进行重构。

通过同行评议保证鲁棒性很有用,且是一项所有设计团队都应采用的最佳实践,但新思科技的VC SpyGlass Lint有一个独特的优势是其他工具无法比拟的,就是可以衡量代码的复杂性,为开发者提供非常有用的建议。VC SpyGlass Lint利用形式引擎提供功能分析及代码复杂性分析,并通过仪表板呈现结果。

永远存在的误报问题

在CDC和RDC的文章中,我们讨论过误报问题,这一问题在代码校验过程中同样存在。在数十亿门级的设计中,势必会产生大量违例,数量过大就会有遗漏风险。开发者们希望的是,工具可以帮助他们直观地看到有意义的信息、准确评估信息、正确标记违例、对违例进行分类等等,从而提高处理违例的效率和准确性。

VC SpyGlass Lint利用形式引擎来有效解决误报问题。开发者们无需知道形式验证,也无需具备这方面的专业知识,所有形式验证都将在后台完成。这一工具内置了5000多项检查,而且新思科技仍在不断地对检查项目进行添加和完善。

功能校验,加快签核

借助一键式形式验证的功能校验,开发者们可以在验证平台可用前就对功能和覆盖率问题进行测试,从而节省时间并实现左移。功能校验在检查以下控制问题时非常有用:

FSM死锁

无法访问状态的检查

覆盖率问题(如常值信号

无用代码检查

数组边界违例

总结来说,如果开发者们能够尽早知道复杂的RTL代码是否能够实现预期的设计结果,他们就可以在设计开发后续流程中节省很多时间和精力,不仅实现开发周期的左移,还可节约成本。新思科技的VC SpyGlass Lint等工具可以完美解决这一问题,它利用形式引擎实现功能分析,可有效帮助开发者们尽早判断他们的RTL代码质量是否满足设计需求,最终加速签核。

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

    关注

    445

    文章

    47476

    浏览量

    407878
  • 新思科技
    +关注

    关注

    5

    文章

    713

    浏览量

    50039
  • 源代码
    +关注

    关注

    94

    文章

    2922

    浏览量

    65982
收藏 人收藏

    评论

    相关推荐

    源代码审计怎么做?有哪些常用工具

    地匹配、查找。 2、Checkmax:通过虚拟编译器自动对软件源代码分析,建立了代码元素及代码元素之间关系的逻辑图。 然后对这个内部代码
    发表于 01-17 09:35

    为什么安秉信息的源代码防泄密软件这么稳定?

    现在很多研发性企业都会意识到企业的源代码文件需要防泄密保护,现在很多企业对于源代码只是用了git或svn版本管理服务器进行了简单的代码统一管控。虽然现在对于源代码防泄密,有专业的
    的头像 发表于 12-05 10:21 176次阅读
    为什么安秉信息的<b class='flag-5'>源代码</b>防泄密软件这么稳定?

    安秉信息源代码图纸防泄密方案,电路图纸,源代码文件

    安秉信息源代码图纸防泄密方案,电路图纸,源代码文件
    发表于 12-01 16:56 0次下载

    瑞萨MCU洗衣机控制器源代码

    瑞萨MCU洗衣机控制器源代码
    发表于 11-09 15:18 7次下载
    瑞萨MCU洗衣机控制器<b class='flag-5'>源代码</b>

    在Raspberry Pi上源代码构建OpenVINO 2021.3收到错误怎么解决?

    在 Raspberry Pi 上源代码构建 OpenVINO™2021.3。 运行OpenVINO™推理,收到错误消息: ModuleNotFoundError:没有
    发表于 08-15 08:24

    XCP源代码分享

    XCP源代码
    发表于 06-25 11:43 7次下载

    19个经典Java小程序源代码合集

    19个经典Java小程序源代码合集
    发表于 06-07 14:59 0次下载

    [源代码]Python算法详解

    [源代码]Python算法详解[源代码]Python算法详解
    发表于 06-06 17:50 0次下载

    Python编程实战(源代码)

    [源代码]Python编程实战 妙趣横生的项目之旅
    发表于 06-06 17:49 1次下载

    NPATCH漏洞无效化解决方案

    NPATCH漏洞无效化解决方案 防御恶意漏洞探测 防御恶意漏洞攻击 防御利用漏洞扩散 安全挑战 未修复
    的头像 发表于 05-25 14:46 998次阅读
    NPATCH<b class='flag-5'>漏洞</b>无效化解决方案

    服务器有漏洞如何修复和解决?

    服务器漏洞会有什么问题?如何修复它?随着互联网的发展,网络攻击和服务器漏洞的安全问题越来越突出,那么服务器漏洞会有什么影响呢?我们应该如何处理这些
    的头像 发表于 05-24 13:57 1193次阅读

    STC-1T-用for循环测脉宽源代码实例

    STC-1T-用for循环测脉宽源代码
    发表于 05-12 15:49 0次下载

    如何将Arduino IDE源代码与ESP8266源代码进行比较?

    由于缺乏管理,我想知道是否有一种(简单的)方法可以将我在 Arduino IDE 源代码与我实际烘焙到 ESP8266 源代码进行比较。现在有一个运行了一年多的工作程序,我想添
    发表于 05-11 07:11

    基于STM32单片机DMA使用库文件设计源代码

    基于STM32单片机DMA使用库文件设计源代码)
    发表于 04-26 15:03 1次下载

    使用最新的源代码构建固件时报错怎么解决?

    我在使用最新的源代码构建固件时遇到了问题,它几乎要了我的命,这是消息: ...... ../lobject.h:416: error: redefinition of typedef
    发表于 04-26 06:19