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

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

3天内不再提示

芯片实现码代码的部分

倩倩 来源:IP与SoC设计 作者:IP与SoC设计 2022-08-23 14:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

0 绪论

经过了上篇文章的文档设计,我们这一章开始写代码。码代码这个问题确实是一个必备技能,任何设计不会码代码其实无法实现的。

这块儿流程上包括了两个东西。第一个码代码,第二个是一些必要的代码检查,保证代码不会出现什么歧义导致实现结果和设计意图不一致。具体语法我们就不在这一章讲了,写出来也是千篇一律,此处就简单讲讲HDL的简介,同时讲一下如何提高编码质量,供大家参考。然后简单讲一个代码写完必要的检查工序spyglass检查,这个工具可以避免大部分低级BUG。

521f79dc-21fa-11ed-ba43-dac502259ad0.jpg

1 码代码

52393af2-21fa-11ed-ba43-dac502259ad0.jpg

1.1 HDL简介

此处的代码主要指的是HDL, hardware design language, 最主流的只有一种:Verilog,以及它的衍生品system verilog。其实还有两种语言,VHDL,属于它的时代已经过去了, 还有一种Chisel为代表的高级语言,属于它的时代似乎还没到来。所以我们这个地方重点讲讲verilog。

verilog 1983年被gateway设计,1990年gateway被candance收购。然后90年代出了第一个标准Verilog-95,定义了最原始的语法。直到现在,部分公司还是只允许使用95中的特性。2001年公布新一代标准,verilog-2001, 这一代标准中加入了generate, 多维数组等等实用的语法,现在是verilog使用最主流的标准,基本上所有的软件工具链都支持该标准,后续verilog更新了一代标准verilog2005, 不过这一代标准开始向着一个独立的方向演变,最后被合并到了systemverilog 2009。system verilog中提供了interface等等一系列面向对象的方法,已经广泛被验证支持了,但是在设计实现中只被支持了少部分特性。具体什么特性允许使用其实各个公司都有自己的看法与标准,你需要注意一下公司的编码标准。从我个人的观点来看,如果确认新特性没问题最好用新特性,减少工作量的同时还能避免代码出低级错误。

verilog代码长这样。下面实现了一个十进制的计数器。

524b8824-21fa-11ed-ba43-dac502259ad0.jpg

1.2 编码质量

Verilog其实不是一个很难的语言,但是由于比较落后,编码质量很多需要人为来注意。编码质量主要就是两个方面考虑。容易出错的点以及提高后续步骤效率的点。常见容易出错的点大家应该都懂,此处简单总结了一下我觉得需要了解又容易被忽略的点,欢迎大家补充。

1.2.1 容易出错的点

·命名有意义,代码有注释。这个任何编程语言都需要注意,我把它列在第一点,这是一个码农最起码的素质。即可以避免自己出错,又可以避免接手代码的人一头雾水。我也看过不少代码没注释,命名还全是tmp1 tmp2 tmp3, 最后结局只能是自己重写。

·信号不要以Reg以及数字结尾。这个点很容易被忽略,综合时会自动给信号加上reg, 到时候就没办法区分是你写的,还是自动生成的,非要标识这是个寄存器可以用ff结尾。同时,如果多组信号不要命名为xx1,xx2, 这么做非常容易和xx[1]混淆,建议改成xxa, xxb。

·敏感列表用*,不要用具体的信号。always实现组合逻辑的时候一个敏感列表always @(列表),这个列表直接用*,让综合去自动填敏感列表,把信号写进去非常容易出错。

·少用magic numer。设计的时候好多时候需要用到参数,比如fifo的深度,这种东西尽量用参数表示出来,不同地方引用一个参数,否则非常容易出现不一致的情况。

·不要生产latch。latch指的是没有锁存的寄存,生成latch会产生毛刺,所以非必要不允许使用latch。之所以产生latch其原理是你实现了组合逻辑,但是某个周期某个变量值没有发生变化。所以牢记规律,时序逻辑值可以不变,但组合逻辑必须每个周期都赋值。具体点讲,实现组合逻的时候,case必须有default, if必须有else。

·不要生产组合逻辑环。组合逻辑环指的是同周期A变化的条件是B,而B变化依赖于A。相当于软件中的死循环。功能上就不可能正确,所以设计的时候要记得避免组合逻辑环。

·异步信号不要直接打拍。异步信号需要特别注意。在详设的时候应该就要考虑清楚怎么处理。是用多级打拍,DMUX,异步FIFO等等办法,总之,不能当做同步信号给直接处理了,否则必出错。

1.2.2 提高后续效率需要注意的点

·尽量一个模块用一个时钟域。主要是为了后端设计起来比较方便,CTS步骤(见后续文章)较容易。

·大的模块最好reg in和reg out。可以最大程度上避免后端时序上出问题。因为后端模块与模块之间不一定是按着放的,寄存器输出寄存器输入留出足够的时间余量。

·不可综合的与可综合的代码分模块。设计代码的时候有时候可能会用到SRAM cell, 或者其他硬核IP,再或者designware IP。这些东西最好单独封装模块调用。主要是为了后续代码可能会用FPGA或者emulation验证,不可综合的部件直接替换成逻辑版本。

码代码部分内容大致就是这些。其实也不必压力太大,因为代码写出来是要经过多轮工具检查的。尤其经过下面讲的spyglass检查后,想出错也没有那么容易(当然,一旦出错就是非常隐蔽的错误,可能流片后都没发现Orz)

2 Spyglass检查

码完代码,其实我们有一个非常强力的工具可以避免大部分低级错误。这个工具应该是synopsys公司出的。这个工具的GUI长这样。

5275db92-21fa-11ed-ba43-dac502259ad0.jpg

最主要检查的东西应该有两个,lint检查一些常用的语法错误,CDC (Clock Domain Crossing )检查异步的处理是不是有问题。

5287e8d2-21fa-11ed-ba43-dac502259ad0.jpg

lint会检查出所有等号左右位宽不匹配、组合逻辑环、生成了latch, 端口连接不对等等问题。基本上常见的错误都会报出来,一般它会采用宁可错杀不会放过的策略。所以此处会爆出一大堆的错误,需要逐个check一下有没有问题。当然,好多问题也是可以waive掉的,但必须每个waive都要十分确定能不能waive掉。比如计数器,一般计数器到溢出就自动回环了,这种时候lint就会爆出错,你就要检查一下是不是真的要让计数器回环。一般spygalss给你报的错分为四类,fatel, error, warning, info。其中fatel和error是一定不能有的, 有了必然不让你拿去流片,warning可以适当waive,info大多不用管。

CDC会检查异步问题。主要检查是不是所有跨时钟域的信号经过了同步,如果spyglass没检查到跨时钟域的信号没有经过多级打拍或者dmux同步会报错。再比如A时钟域的两个信号同步到了B时钟域,然后合并了,这个时候也会报错,因为这两个信号同步过去以后时序可能会发生变化,要仔细检查。再比如要同步的信号不是寄存器输出的,这种情况由于存在毛刺风险,会增大亚稳态的概率,所以也会报出来。总之, 你能想到的错误基本上都会检查出来。

本部分主要简单介绍了编码完后要用到的最重要的工具之一spyglass。实际使用的时候确实也要有一定的经验积累,什么问题可以waive掉,什么问题必须改。没必要所有问题都改掉,耗费的精力实在是太大,但真的存在风险的问题必须改掉,否则就可能搞出大事儿。。。

3 总结

本节我们讲了芯片实现码代码的部分。主要就是verilog以及后续的检查。芯片流片是一锤子买卖,所以一定要保证写的代码不出错,一方面,在本节讲的编码阶段要尽量少写bug, 另一方面,要经过缜密的验证,最大程度上拦截BUG。

审核编辑 :李倩

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

    关注

    462

    文章

    53550

    浏览量

    459280
  • vhdl
    +关注

    关注

    30

    文章

    820

    浏览量

    131351
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73156

原文标题:一颗芯片的前世今生:设计(前端之编码)

文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    扫镭射雕用什么扫枪?

    在电子制造、汽车零部件等行业,镭射雕(DPM的常见形式)因耐磨、耐高温的特性成为产品追溯的核心标识。但金属、塑料等材质的反光、曲面凹凸,加上镭雕可能存在的模糊、低对比度问题,让普通扫
    的头像 发表于 11-20 15:30 162次阅读
    扫镭射雕<b class='flag-5'>码</b>用什么扫<b class='flag-5'>码</b>枪?

    代码实现茶吧机自定义语音控制定制

    代码实现茶吧机自定义语音控制定制 前言 茶吧机集成离线语音控制,核心是通过自然语音交互替代手动操作实现全方位体验升级 —— 既无需起身即可完成烧水、调温等操作,省去传统多步按键调试的繁琐,又依托
    的头像 发表于 10-17 16:43 567次阅读
    零<b class='flag-5'>代码</b><b class='flag-5'>实现</b>茶吧机自定义语音控制定制

    自助柜如何集成扫模组,以及如何选择扫模组?

    在智能自助设备日益普及的今天,扫模组已成为自助柜实现便捷操作的核心部件。那么,自助柜该如何集成扫模组?又该如何选择合适的扫模组呢?▣自助柜集成扫
    的头像 发表于 10-11 15:10 248次阅读
    自助柜如何集成扫<b class='flag-5'>码</b>模组,以及如何选择扫<b class='flag-5'>码</b>模组?

    工业物联网平台有哪些低代码应用

    多协议支持:主流平台(如领方案、AIRIOT)内置200+工业协议驱动包(如MQTT、Modbus、OPC UA),通过JSON配置实现协议转换,支持自定义协议扩展。例如,领方案支持“即插即用”设备接入,10分钟完成设备上
    的头像 发表于 09-24 14:49 420次阅读

    代码自动化测试平台ATECLOUD功能详解

    平台通过三大优势显著区别于传统系统: 1.零代码快速构建:无需编程即可实现测试方案搭建; 2.即插即用设备生态:兼容主流测试仪器,降低集成门槛; 3.全维度数据智能:定制化报告模板与数据分析中心为行业独有功能。 自动化测试平台 二、核心价值:业务流程整合与
    的头像 发表于 08-20 17:32 782次阅读
    零<b class='flag-5'>代码</b>自动化测试平台ATECLOUD功能详解

    模块厂家怎么选?二维模组详解

    你是否发现,从超市自助结账的POS机到小区的智能门禁,从快递柜的取件扫到地铁闸机的乘车识别,二维模组早已渗透到生活与产业的每一个角落。作为所有扫
    的头像 发表于 08-18 15:58 562次阅读
    扫<b class='flag-5'>码</b>模块厂家怎么选?二维<b class='flag-5'>码</b>扫<b class='flag-5'>码</b>模组详解

    什么是零代码平台?

    代码平台是一种无需编写传统代码,通过可视化拖拽、参数配置、逻辑连线即可快速搭建业务流程与应用系统的工具平台。它将复杂的软件开发过程转化为 “搭积木” 式的操作,让非技术人员(如业务人员、运营人员
    发表于 07-12 20:28

    芯知识|广州唯创电子WT2003H语音芯片播放功能解析与应用指南

    一、连播放功能的核心价值连播放(组合播放)是语音芯片将多段独立语音片段无缝拼接为连续语句的技术。广州唯创电子WT2003H系列通过高性能32位处理器(主频120MHz)和优化的固件算法,
    的头像 发表于 06-27 09:19 577次阅读
    芯知识|广州唯创电子WT2003H语音<b class='flag-5'>芯片</b>连<b class='flag-5'>码</b>播放功能解析与应用指南

    基于RV1126开发板实现二维识别方案

    在RV1126开发板上实现方案设计逻辑流程图,方案代码分为两个业务流程,主体代码负责抓取、合成图像,算法代码负责二维识别功能。
    的头像 发表于 04-21 14:25 54次阅读
    基于RV1126开发板<b class='flag-5'>实现</b>二维<b class='flag-5'>码</b>识别方案

    基于RV1126开发板实现二维识别方案

    在RV1126上实现二维识别方案
    的头像 发表于 04-11 14:48 580次阅读
    基于RV1126开发板<b class='flag-5'>实现</b>二维<b class='flag-5'>码</b>识别方案

    COG封装CN9122C1S96单COM静态段LCD液晶驱动芯片

    COG封装CN9122C1S96单COM静态段LCD液晶驱动芯片
    的头像 发表于 03-19 09:51 891次阅读
    COG封装CN9122C1S96单COM静态段<b class='flag-5'>码</b>LCD液晶驱动<b class='flag-5'>芯片</b>

    一“”当先!看二维模组如何重塑智能门锁扫体验

    在科技日新月异的今天,智能门锁正逐步取代传统机械锁,成为现代家庭安全防护的首选。在这场门锁智能化革命中,二维模组以其独特的识别技术和便捷的操作方式,成为智能门锁的重要组成部分。本文将深入探讨二维
    的头像 发表于 03-12 16:17 778次阅读
    一“<b class='flag-5'>码</b>”当先!看二维<b class='flag-5'>码</b>模组如何重塑智能门锁扫<b class='flag-5'>码</b>体验

    二维读取器读取DPM金属零件激光雕刻

    二维读取器,作为现代自动识别技术的重要组成部分,其在各行各业的应用日益广泛。特别是在工业制造领域,二维读取器读取DPM(DirectPartMark)金属零件激光雕刻的技术,更是
    的头像 发表于 01-02 16:21 1130次阅读
    二维<b class='flag-5'>码</b>读取器读取DPM金属零件激光雕刻<b class='flag-5'>码</b>

    XL系列433芯片、2.4G收发芯片 通讯对说明

    户自定义,一般而言,使用标准的 1527 协议即可。 1527 协议的数据长度一般为 24 位,其中前 16 位表示地址,后 8 为表示数据。那么也就是前 4 个十六进制位为地址,也就是对的关键,保证每个发送端的地址不同,这样就能
    的头像 发表于 12-27 17:06 2130次阅读
    XL系列433<b class='flag-5'>芯片</b>、2.4G收发<b class='flag-5'>芯片</b> 通讯对<b class='flag-5'>码</b>说明

    条码扫器的用途,适合哪些应用场景?

    条码扫器,作为现代信息技术的重要组成部分,其用途广泛且深远,不仅极大地提升了各行各业的工作效率,还降低了人为错误,实现了信息的快速准确传递。本文将深入探讨条码扫器的多种用途及其适合
    的头像 发表于 12-24 15:22 2160次阅读
    条码扫<b class='flag-5'>码</b>器的用途,适合哪些应用场景?