尼德兰的喵
这个作者很懒,什么都没留下…
展开
-
【前端设计】综合的harden block顶层为什么不能有参数呢?
那么上限大概是多少呢?因为RTL代码经过编译、综合和布局布线等诸多流程之后是要以网表和版图的形式向后交付的,而随着芯片的规模越来越大,如果把所有整个芯片放在一个网表里做,DC综合时间和布局布线时间将会极大(以月计),这根本不可能接受。应该是harden block作为一个单独综合和交付的网表,其本身应该是一个硬化的确定的网表结构,而顶层参数的存在与“确定的网表结构”相违背,因为大家都清楚,一个系统如果传参不同那么就等价于两个系统。然而,在综合后的硬化网表中,参数被替换为具体的值,且不再具有参数化的特性。原创 2023-07-24 23:59:38 · 703 阅读 · 0 评论 -
【前端设计】使用Verdi查看波形时鼠标遮住了parameter值怎么整
最可恨的是这个参数值他会跟着你的鼠标走,你想把鼠标移开看看看这个例化值到底是多大吧,这个数他跟着你的鼠标飞,就很气。盆友,你们在使用Verdi的时候,有没有遇到过鼠标遮挡着了parameter数值的场景?顺便,下面这个Active Annotation也可以点上,完后信号的值就显示出来了。原创 2023-07-21 18:30:53 · 1243 阅读 · 2 评论 -
【芯片前端】It is illegal to leave the interface ports unconnected问题解决
此时是因为该模块的接口中有interface,而interface是不能作为顶层模块的接口的,必须有一个实例化的interface inst与之进行连接。当然,更可能的情况是因为VCS编译时并没有指定顶层,因此工具认为每一个module都是单独的顶层。综上,解决方式为在VCS编译选项中加入-top YYYY指定顶层即可。原创 2023-07-14 10:37:06 · 932 阅读 · 0 评论 -
日常更新·系列文档汇总单
这篇博客是系列文章的的汇总,也是该专栏的导览文章。之后所有的系列文章我会在此博客中进行罗列与更新。原创 2023-06-02 10:30:45 · 347 阅读 · 0 评论 -
数字前端的功能验证利器——SVA断言学习笔记
在我们辛苦搭建环境之余,不如先放松下学习一下非常流行并且历史悠久的断言技术(assertion),熟练掌握断言技术通过断言进行行为检查可以及时发现代码中的低级的bug。以下内容大部分参考了《SystemVerilog Assertions应用指南》,还有一些参考了各类帖子,尽量采用简单易懂的形式来说明。这次我们只关注最常见的并发断言而不对即时断言进行探究了(下文断言皆指并发断言),我个人理解并...原创 2019-08-01 00:13:33 · 15927 阅读 · 28 评论 -
【前端设计】综合编译LOG中需要重点关注的三个warning
之前的笔记,今天整理一下。原创 2023-02-06 11:34:54 · 678 阅读 · 0 评论 -
【前端设计】监控顺序返回型总线超时的计时器模块设计
总线超时检查机制是系统中必要的模块设计,用于在总线无法返回response时能够及时上报中断。从理论上分析,如果总线发生了诸如挂死或者物理损坏等超时行为,无论计时器上报timeout的时间偏大还是偏小,都是一定可以上报中断的。不过呢在一些敏感的系统中,及时发现问题还是很有必要的,因此这篇文章来聊一下如何设计一个相对平衡的超时计数器。适用场景为支持outstanding的顺序返回response的总线。原创 2023-01-30 15:21:11 · 850 阅读 · 0 评论 -
【前端设计】复位保护模块的整体设计思路
复位保护模块,是在单系统进行动态复位的过程中,对接口进行硬性逻辑保护,避免异步复位过程中的毛刺对周围系统产生影响的模块。显然,复位保护所处的阶段是异步复位拉低之前和同步释放之后。原创 2023-01-31 15:01:35 · 870 阅读 · 0 评论 -
【python脚本】应用于git批量提交修改文件的一键式脚本
对于从svn转投git的我来说,每次的文件提交是我比较头疼和容易出错的地方。然后再正向的选择去添加哪些文件去提交。因此呢我觉得这个日常提交修改文件的过程可以形成一个简单的脚本用以节约时间。原创 2023-01-28 10:28:06 · 683 阅读 · 2 评论 -
【前端设计】寄存器复位对综合面积的影响
之前在写代码的时候呢,就一直被要求尽量使用不带复位的寄存器,理由是节约面积和降低功耗。因此我一直有两个疑问:能省多少面积?能降低多少功耗?鉴于我一直没能掌握功耗测试的技能,因此这次先来看看面积的影响,等我学会使用测试功耗的工具我再测测功耗(其实我想先学formal,然后做一个快速formal比对的脚本,有没有合适的教程推荐呢各位大佬)。原创 2022-12-25 00:27:49 · 1743 阅读 · 1 评论 -
【前端设计】SDC中生成时钟create_generated_clock语法解析
好久没有写前端设计系列的博客了,这次因为要在系统里加入时钟分频器因此复习一下sdc中关于生成时钟的约束语法,以下内容来自《综合与时序分析的设计约束》和一些自己的理解。在sdc约束中,由端口输入的时钟使用create_clock进行约束,其语法为:而在内部生成的时钟,则通过create_generated_clock进行约束,其语法为:约束项比较多,我们跟着书画个图写一写,如下图中是两个时钟分频器,实现的功能是将输入时钟半分频:假设输入的时钟为500MHz,则对应的波形为: 上图中实现的分频,而根原创 2022-12-03 20:47:11 · 3284 阅读 · 0 评论 -
【前端验证】验证自动化脚本的最后一块拼图补全——gen_tb
在完成了【芯片前端】可能是定向验证的巅峰之作——auto_testbench_尼德兰的喵的博客-CSDN博客【python脚本】用于生成简单握手接口与自测环境的gen_uvm_agent脚本_尼德兰的喵的博客-CSDN博客gen_tb脚本脚本实现的功能相对比较简单,对生成model和connect功能暂时没有开发(connect严重依赖于gen_agent等公共环境的约定俗称,生成model单纯是我自己习惯先写model再集成),之后有进一步的需求之后再进行开发吧!原创 2022-12-01 16:01:59 · 1129 阅读 · 0 评论 -
【前端验证】uvm验证环境中的看门口watchdog机制探究
uvm中一般通过objection机制来控制仿真的结束时间,不过在这几机制之外,有时还需要通过看门狗来watchdog避免仿真环境挂死,watchdog配合objection一起来控制仿真的进行。原创 2022-11-10 18:14:20 · 963 阅读 · 0 评论 -
【异步电路碎碎念5】 —— 跨异步处理的几个注意事项
前言继续上篇写,最近沉迷游戏一直没有恢复学习状态,今天开始恢复!【异步电路碎碎念4】 —— 跨异步的处理方法今天这个内容跟之前的好像有些重复,不过没关系就当水一水吧~注意事项多比特信号进行同步时,如需要进行逻辑运算必须在源时钟域完成组合逻辑并寄存处理,不能分别同步到目的时钟域后再进行逻辑处理这个老生常谈了,每个比特在同步过程中收敛的时刻不同,有的在第2拍采到正确值,有的在3拍采样到正确值,在目的时钟域对多个同步信号进行组合逻辑的话,产生的结果可能与预期不一致导致整个逻辑的混乱与传播。原创 2021-10-19 01:42:28 · 1393 阅读 · 0 评论 -
【芯片前端】保持代码手感——握手协议valid打拍时序优化
在valid-ready双向握手机制下,对valid和data进行打拍实现对下游接口的valid信号时序优化。无论下游ready是否有效,数据均会在寄存器中寄存一拍。要求数据输出不能丢弃或乱序,且下游的valid和data为寄存器输出。接口如下:module forward_pipe #( parameter WIDTH = 8)( input clk, input rst_n, input [WIDTH -1:0]data_in, input data_in_val.原创 2022-04-10 16:36:56 · 2042 阅读 · 1 评论 -
【验证小bai】静态模块(module或interface等)中的可控随机探索($urandom/$random)
前言搭建简单的superbench在centOS中依靠makefile和VCS搭建了自己的平台之后,可以逐步将之前记录和解决的问题付诸实践,慢慢的归纳和分享。这次要来解决的是一个经典问题,就是验证环境中的静态模块(主要是module和interface)的随机问题;内容较多,节约时间可直接至“结论”;背景我需要做一个延时模块,目的是把输入信号延时一段时间,然后输出,主要的应用场景就是模拟跨异步传输延时误差和总线传输延时误差;因为总线不止1bit,因此要例化多个模块,那么我的需求是这样原创 2020-07-25 00:23:08 · 2400 阅读 · 0 评论 -
verilog时钟分频设计
1.偶分频模块设计偶分频意思是时钟模块设计最为简单。首先得到分频系数M和计数器值N。M = 时钟输入频率 / 时钟输出频率N = M / 2如输入时钟为50M,输出时钟为25M,则M=2,N=1。偶分频则意味着M为偶数。以M=4,N=2为例,我们希望得到的输出时钟时序如下:因此只需要将counter以clk_in为时钟驱动计数,当counter = (N-1)时原创 2017-07-12 15:42:48 · 67450 阅读 · 32 评论 -
【芯片前端】Warning: Cannot find the design ‘xxx‘ in the library ‘WORK‘. (LBR-1)
前言又是跟DC较劲的一个小时,事情是这样的这不是一周的工作结束了嘛,于是我就想着又该整整我的小环境了,所以我就开心的打开了DC的report看看能不能写点什么。然后我就惊奇的发现,DC是可以输出power.rpt,但是我记得DC的power应该是非常的不准,所以我就想综合两个模块看看效果。报错于是我轻车熟路的操作,把文件导入然后开始综合,然后奇怪的事情就发生了,DC报了这个错:Warning: Cannot find the design 'xxxx' in the library 'WO原创 2022-05-27 19:30:24 · 4643 阅读 · 0 评论 -
【异步FIFO的一些小事·3】异步FIFO中指针走线延时的一些思考
前言【异步FIFO的一些小事·2】异步FIFO中异步走线延时约束的一些思考上一篇博客中主要讨论的是不需要进行跨异步的数据总线路径延时的约束,这一篇继续探讨下一个问题:走线延时太大会影响性能,要用多深的fifo才能避免由异步fifo本身引起的数据反压断流呢,尤其在慢时钟跨异步到快时钟的场景下?FIFO深度计算想象一下,数据由慢时钟跨异步到快时钟,写入后wr_ptr在本端打了一拍,跨异步打了三拍到了读侧,对面识别到后读取数据,读指针在本端打了一拍,跨异步打了三拍到写侧,这样写侧才知道了有一.原创 2021-08-09 22:59:44 · 1391 阅读 · 8 评论 -
每日工作记录——任意小数分频研究
最近由于准备面试,任意小数分频设计似乎是比较常问的问题。对于任意小数分频,常用的方法有双模前置小数分频和脉冲删除小数分频。前一种方法设计较为复杂,因此主要以第二种方式为主设计了一下。原创 2017-08-29 16:44:49 · 2509 阅读 · 4 评论 -
【芯片前端】第一次看DC综合报告时看些什么内容
前言最近又要频繁的看DC综合报告,发现之前的东西忘得是差不过了,因此用这篇文章用来做下笔记,记录下第一眼看DC综合报告时看些什么内容。看那个报告这是第一次综合完之后的终极问题,我根本不知道应该看那个报告。进行完综合后,就可以在report目录下得到各类综合结果报告,具体有哪些文件这取决于在综合tcl配置中设置了哪些项,比如像我这样设置:report_timing -delay max -max_paths 1 > $timing_reportreport_timing -delay原创 2022-03-12 01:57:57 · 11049 阅读 · 10 评论 -
【异步FIFO的一些小事·2】异步FIFO中异步走线延时约束的一些思考
前言异步FIFO同步化设计异步FIFO中的几个难点问题思考与解释一直以来异步FIFO都是数字前端的心腹大患,今天的问题来到了,异步FIFO中跨异步走线的约束与影响。异步FIFO结构画了下异步FIFO的简图,橘色为写时钟域,蓝色为读时钟域,结构有以下几个核心点:1.数据ram/mem置于写侧,读取时不进行跨异步直接进行数据选取;2.写指针打三拍向读时钟域同步,在读时钟域进行“空”状态判定;3.读指针打三拍向写时钟域同步,在写时钟域进行“满”状态判定;走...原创 2021-08-07 18:32:09 · 2941 阅读 · 4 评论 -
【芯片前端】sdc学习日常——端口delay的正向设置与反向设置
前言sdc的学习还在继续,这次的话题是设置input_max/min_delay / output_max/min_delay。正向设置设定一下模块的场景,假设一个模块有三个时钟域,对应的接口如下:set clka_ports{ \ clka_sig1 \ clka_sig2 \}set clkb_ports{ \ clkb_sig* \}set clk_sig{ \ clka \ clkb \ clkc \}set rs.原创 2022-05-23 15:16:56 · 1299 阅读 · 0 评论 -
【芯片前端】与RR调度的相爱相杀——verilog实现RR调度器2
前言【芯片前端】与RR调度的相爱相杀——verilog实现RR调度器1上篇博客把一个基本的RR调度器实现了下,然后这篇来处理其中存在的keep问题;keep问题目前已经实现的代码能够实现基本的rr调度,但是在调度时候会遇到两个问题:1.由于grant是实时由new_grant和old_grant逻辑生成的,有可能导致grant的值在两次ack之间发生改变,由于grant一般直接作用于对外输出valid以及info选取,这会导致valid维持有效期间info信息改变,而在一些协议如axi中原创 2021-11-07 00:29:54 · 1800 阅读 · 0 评论 -
在ASIC中异步复位信号的处理——滤毛刺和异步复位/同步撤离
前言在毕业面试的时候遇到了这个问题,当时回答的不太好一直扎在心里,最近培训又讲了这块的知识因此在这里稍微记录总结一下。异步复位由于同步复位会被综合为触发器等元件的输入而增加功耗面积等,ASIC设计中异步复位使用越发广泛,当然这都不是重点,重点是在ASIC设计中应该对异步复位信号进行怎样的预处理以防止电路出现亚稳态等各种问题。简单来说,复位信号在使用前一般需要进行滤毛刺处理和异步复位/同...原创 2018-08-22 00:45:31 · 10733 阅读 · 0 评论 -
【异步电路碎碎念4】 —— 跨异步的处理方法
前言我一直以为我已经把这块东西整理完了,然后发现我就写了三个?【异步电路碎碎念1】 —— 到底什么是异步电路【异步电路碎碎念2】 —— 跨异步引发的电路危机【异步电路碎碎念3】 —— 跨异步的处理原则其中第三个还趋近于半成品,这还真的是始料未及,毕竟是19年动手写的东西,竟然能写着写着就忘了,也是非常的厉害了,因此今天继续总结。处理方法分类常见的跨异步场景处理方法大概可以分为以下几类吧:单比特信号打拍同步 单比特脉冲同步 多比特计数器格雷码同步 多比特信号DM.原创 2021-10-08 00:03:56 · 2958 阅读 · 0 评论 -
【我又有一个大胆的想法】是时候彻底解决 忘记source指定bashrc导致一系列后果 的严重问题
前言最近连续出现了几次忘记source对应的bashrc,导致吃的文件路径或是使用的软件不是所需的情况,再一再二不能再三了,我感觉既然从人是不可靠的,那还是从技术上解决这个问题吧因此呢,我又有一个大胆的想法!自动搜索xxx.bashrc在最开始出现忘记source对应bashrc的时候,我的想法是通过一个搜索的方式,自动查找应该source的文件,于是乎就有了这样一段~/.bashrc中的代码:alias sba="source ~/.bashrc"org=`pwd`whi原创 2021-04-25 00:28:07 · 459 阅读 · 1 评论 -
【VBA脚本】提取word文档中所有批注的信息和待解决状态
VBA提取word批注信息原创 2022-06-01 16:38:14 · 2151 阅读 · 4 评论 -
【快速断言体系】一步步搭建一个高效的快速断言体系 2
前言【快速断言体系】一步步搭建一个高效的快速断言体系 0原创 2021-06-10 00:27:41 · 296 阅读 · 0 评论 -
第四个excel VBA demo —— 在interface中一键添加一组AXI接口
前言第三个excel VBA demo —— 由interface文件生成top.v和dummy.vRTL与excel的结合操作还有很多可以探究的点,这次要做的是在interface文件中自动添加一组AXI接口;效果演示资源路径一键添加axi总线的xlsm文档源码总有人私信说我放的代码没注释,这次我真的努力写注释了!Dim axiMaster As StringDim axiSlave As StringDim axiReadWidth As StringDim原创 2022-03-09 01:15:44 · 494 阅读 · 0 评论 -
【python脚本】用于生成简单握手接口与自测环境的gen_uvm_agent脚本
由于后续的工作需要,大概率会进行一些验证的工作,因此我非常机智的先把gen_uvm_agent脚本写好。gen_uvm_agent只用来生成简单的握手型接口的全套代码,同时也会生成一个自测环境用于行为确认。......原创 2022-08-29 08:00:00 · 919 阅读 · 2 评论 -
第三个excel VBA demo —— 由interface文件生成top.v和dummy.v
前言关于excel VBA代码,之前写过两个demo第一个excel VBA demo —— 添加信号并生成一段Verilog代码第二个excel VBA demo —— 根据规则生成加班申报数据这次的需求其实跟第一个demo差不多,因为在工作中需要维护模块的接口,然后同时要经常提供模块的dummy文件或者top文件做顶层集成或是验证前期适配。那么我要一遍修改.v文件还要同时修改excel文件(或者是接口文档),因此还是把这两件事合在一起吧,每次修改excel文档后直接生成dummy文件和t原创 2020-11-14 23:55:23 · 723 阅读 · 0 评论 -
【快速断言体系】一步步搭建一个高效的快速断言体系 3
前言【快速断言体系】一步步搭建一个高效的快速断言体系 2原创 2021-06-10 22:24:39 · 380 阅读 · 0 评论 -
【python脚本】应用于verilog RTL的顶层模块互连集成工具
前言在我年轻的时候,在例化了几个近百行接口的module,声明了还几百行的接口和wire后,精神就已经恍惚了,一直恍惚到今天。于是后来我尝试了各种办法来简化这个过程,包括生成简单的例化代码,通过VBA做例化文件等等,但是使用无法解决还是需要手动修改和连线的问题。在见识了很多其他的连线工具后,这次我觉得可以彻底解决这个问题了。准备做好的脚本我放在了固定路径下,之后在vimrc中补充这句话:command! L :execute '%! /home/xiaotu/my_work/gen_lin原创 2021-07-16 01:19:35 · 3475 阅读 · 5 评论 -
python与perl语言,字符串转义与正则匹配转义混合探究
前言平时写脚本,经常会被正则匹配中的转义弄得头大,因此基于perl和python的字符串转义和正则匹配转义探究一下转义的规则。字符串转义脚本语言的字符串转义基本是通用的,菜鸟教程中罗列了一下基本的转义字符:转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a 响铃 \b 退格(B...原创 2020-02-04 19:03:34 · 755 阅读 · 0 评论 -
system verilog环境中使用宏的学习笔记
前言宏定义是我们在编码时常用来减少代码量和跨文件定义常量的手段。我的师傅跟我讲如果一段代码你需要重复两次,那么就要考虑封装一下。当然了我在实践中,一般是重复到第三次的时候才会封装代码。封装代码的方式一般就两种吧,一是封装为task或者function,二是封装为宏。如果条件允许的话,我认为还是尽量选择前者。宏定义虽然能够有效的降低编码量减少重复编码,但是会严重的降低代码可读性和定位效率,而...原创 2019-11-24 17:55:50 · 8521 阅读 · 6 评论 -
【验证小bai】一个简单可make run的uvm demo环境
因为最近偶尔看了一些uvm的知识,因此搭了一个uvm环境用来做各种实验:uvm_demo.tar解压后在sim目录进行操作,可以通过:make run seed=0 wave=on来查看运行结果和波形。具体的RTL行为就是个握手型输入输出均打拍的乘法器而已。...原创 2021-12-14 22:50:41 · 1000 阅读 · 4 评论 -
【system verilog】time-slot,仿真的竞争与冒险,对齐与采样
前言这篇文章主要讨论的是数字芯片验证领域,或者说仿真器仿真行为,这一范畴内的时序竞争与冒险。从关联性来讲,内容贴近这一篇博客:https://blog.csdn.net/moon9999/article/details/102983963不过因为最近又对这一内容有了更加深刻的领悟与认识,也意识到之前自己的理解是有一定误区的,所以希望借此记录,与大家分享。本文...原创 2020-04-19 17:06:11 · 8634 阅读 · 6 评论 -
【system verilog】继续探究IC前端仿真中的“时间”,timescale,timeunit/timeprecision设置
前言仿真中的时间单位/时间精度设置是保证验证环境稳定高效的重要手段,但是很多场景下却常常被忽视。如果没有设置合理的相对统一的时间单位/时间精度,不仅延时、打印等信息会不准确,多模块/环境协同时也会隐藏难以发现的问题。因此,继续探究仿真中的时间概念,timescale,timeunit/timeprecision等。timeunit/timeprecisiontimeunit/tim...原创 2020-05-03 17:41:41 · 8046 阅读 · 0 评论 -
【验证小白】无法忍受modelsim?阵地转移,虚拟机centOS+makefile+vcs+verdi继续验证学习——搭建简单的superbench
前言之前的系列都是运行于windows+modelsim环境的,之所以这样运行呢,是因为我当时手头只有这个工具;【验证小白】系列前文但是今时不同往日,我终于找到了一个工具齐全的虚拟机centOS(忙猜很多人应该都是在用这个虚拟机),于是乎我决定把验证环境搬家,顺便也再好好的重构下;当然了那是以后的事,这次的任务是搭建一个基本的superbench平台。目标通过makefile搭建superbench平台,支持VCS仿真和verdi定位功能,包括如下指令:make cmp:VCS编原创 2020-07-16 00:42:44 · 2483 阅读 · 11 评论