
SystemVerilog
文章平均质量分 81
硅芯思见
分享个知识居然还有人要收费!!!
为学,扎扎实实,不可沽名钓誉
做事,认认真真,不可吊儿郎当
展开
-
硅芯思见:天天说亚稳态,那亚稳态中的MTBF是啥
在进行电路仿真时,特别是后仿真时,经常会遇到时序违例,常见的有setup违例和hold违例,然后究其原因和危害时,常常会谈论到亚稳态,而谈到亚稳态解决方法时,常常会说到两触发器同步结构。这其实就牵扯亚稳态讨论中的一个关键概念:MTBF,本文,将通过对于MTBF的讨论,示例使用三个或多个触发器到底值不值(当然,如果你抬杠,有钱任性,你的芯片对于时序资源面积功耗等等无要求,n级同步也是可以的)?在具体的电路设计中,特定信号传输的亚稳态的MTBF可以使用与设计和器件相关的特性信息来计算评估。原创 2025-01-29 19:52:28 · 314 阅读 · 0 评论 -
硅芯思见:此非(!)非彼非(~)
一些初学者经常在编写判断条件表达式时经常混用"!"和"~",导致仿真结果有时正确有时错误,出现这种情况的原因是因为对于"!"和"~"没有正确理解和使用导致的,本文将以具体示例说明两者的差异.原创 2022-11-26 11:29:23 · 434 阅读 · 1 评论 -
硅芯思见:UDP是干什么的?
本文示例UDP如何使用原创 2022-11-03 20:11:49 · 915 阅读 · 0 评论 -
硅芯思见:task和function的区别
本文示例task和function的区别联系原创 2022-10-24 19:13:46 · 1423 阅读 · 6 评论 -
硅芯思见:阻塞赋值与非阻塞赋值
本文说明Verilog和SystemVerilog中阻塞赋值与非阻塞赋值的区别原创 2022-10-23 09:18:06 · 6633 阅读 · 34 评论 -
硅芯思见:编译命令指定隐性线网类型
在Verilog中,对于未指定线网类型的隐性线网默认的类型为wire,如果没有对线网进行上拉或者下拉操作,那么其状态为高阻态,即“Z”。对于特定设计在后端实现时会对相应的端口进行上下拉操作,为了保持这种特性,除了显示声明线网类型为tri0或者tri1等外,还可以通过编译命令实现端口上下拉。本文将对通过编译命令实现线网类型的设置进行示例。原创 2022-10-18 23:31:29 · 692 阅读 · 0 评论 -
硅芯思见:线网或变量宽度与端口宽度不匹配
在使用Verilog进行数字设计或者构建验证平台时,如果连接模块端口的线网或变量的宽度与端口定义的宽度不一致,在进行仿真时将有可能出现逻辑功能与期望不一致的情况,本文将对此类情况进行示例分析。原创 2022-10-07 10:18:28 · 813 阅读 · 0 评论 -
硅芯思见:1 bit宽的未声明线网
Verilog中对于未声明线网的处理一方面极大地简化了大规模设计或者网表中各模块的互联,另一方面如果使用不当也将会导致设计逻辑功能的异常。例如,线网连接到指定宽度端口的设计时,仿真后发现该矢量端口仅有最低位发生变化,其余各位未发生预期的变化。本文将对未声明线网在引起的此种情况以具体示例进行分析说明。原创 2022-10-06 11:09:18 · 178 阅读 · 0 评论 -
硅芯思见:Timing Borrow深入浅出
Timing Borrow技术又称为cycle stealing技术,其原理主要是利用latch的电平敏感特性,通过有效电平获取数据再通过无效电平保持被锁存的数据,主要用于解决路径时序不满足电路要求的情况.本文通过示例说明了timing borrow原理原创 2022-10-05 11:07:07 · 1911 阅读 · 0 评论 -
硅芯思见:关于generate用法的总结
Verilog中generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复。这些语句可以包括模块实例引用的语句、连续赋值语句、always语句、initial语句和门级实例引用语句等。细化时间是指仿真开始前的一个阶段,此时所有的设计模块已经被链接到一起,并完成层次的引用。本文将对generate的几种机构进行示例说明.原创 2022-10-04 09:58:14 · 644 阅读 · 0 评论 -
硅芯思见:$test$plusargs和$value$plusargs用法小结
$test$plusargs和$value$plusargs作为进行Verilog和SystemVerilog仿真运行时调用的系统函数,可以在仿真命令中直接通过进行赋值的方式将参数传递进入到设计中,并且不局限于不同仿真器对于参数在仿真命令中定义格式不同的限制,也避免了调换参数带来的频繁编译等问题。使用这两条函数对于搭建测试平台有一定的便利,同时对于理解Factory中用例是如何传递进Proxy Class有一定的帮助。原创 2022-10-03 16:28:59 · 5302 阅读 · 2 评论 -
硅芯思见:SystemVerilog中的类型转换有哪些
本文通过示例说明了SystemVerilog中类型转换都有哪些以及相互之间的区别。原创 2022-10-01 15:46:27 · 1613 阅读 · 0 评论 -
硅芯思见:assert成功失败后的分号到底要不要
在SystemVerilog中,经常会在对数据进行随机化时用到断言,用以判断随机是否成功,在使用过程中经常会遇到断言后的语句有时候有分号分割,有时候没有,那么到底什么时候有什么时候没有呢?本文将以即时断言为例,说明断言的那些分号的存亡。原创 2022-09-12 23:27:25 · 374 阅读 · 0 评论 -
硅芯思见:SystemVerilog中的静态约束
在SystemVerilog中,经常会在对数据进行随机化时用到断言,用以判断随机是否成功,在使用过程中经常会遇到断言后的语句有时候有分号分割,有时候没有,那么到底什么时候有什么时候没有呢?本文将以即时断言为例,说明断言的那些分号的存亡。...原创 2022-08-30 23:36:02 · 271 阅读 · 0 评论 -
硅芯思见:“软约束”到底有多“软”
本文示例SystemVerilog中soft约束如何使用原创 2022-08-28 12:50:00 · 1496 阅读 · 0 评论 -
硅芯思见:SystemVerilog中枚举类型的一些“不正经”用法
示例说明SystemVerilog中enum用法原创 2022-08-20 10:52:38 · 349 阅读 · 0 评论 -
硅芯思见:关于SystemVerilog中枚举类型中枚举值列表的一些事儿
本文示例枚举类型中枚举值列表钟标签赋值一些注意事项原创 2022-08-14 19:54:25 · 814 阅读 · 0 评论 -
硅芯思见:【143】问芯吾跬(IC设计验证常见问题汇总二)
验证笔试面试常见题第二波原创 2022-07-30 12:53:20 · 355 阅读 · 1 评论 -
硅芯思见:【145】问芯吾跬(IC设计验证常见问题汇总三)
验证面试笔试常见问题第三波原创 2022-07-30 12:49:56 · 424 阅读 · 0 评论 -
硅芯思见:IC验证应读书推荐
这里有你我需要阅读的书籍原创 2022-07-18 22:57:08 · 2026 阅读 · 2 评论 -
硅芯思见:m_sequencer和p_sequencer到底谁大
本文通过示例介绍m_sequencer和p_sequencer之间的区别和联系原创 2022-07-03 19:31:05 · 1115 阅读 · 2 评论 -
硅芯思见:问芯吾跬(IC设计验证常见问题汇总一)
本文分享整理的一些IC设计验证的一些常见问题,希望对于需要的朋友有用,后续还会更新。当然更希望有识之士可以留言分享对于其中问题的见解,为其他入门阅读本文的朋友广开思路,教学相长,互相学习。...原创 2022-06-13 22:54:49 · 575 阅读 · 0 评论 -
硅芯思见:你知道get_coverage和get_inst_coverage得到的都是什么覆盖率吗
在SystemVerilog中提供了大量的用于获得coverage的方法,方便了用户进行功能覆盖率的收集,比较常见的主要有:$get_coverage、get_coverage和get_inst_coverage,那么这几种get coverage得到的到底是什么coverage彼此之间有什么差异呢?本文示例说明之间差异原创 2022-05-23 20:06:56 · 2277 阅读 · 2 评论 -
硅芯思见:SystemVerilog类中的静态方法和属性
在SystemVerilog中关于方法有两种“static”,一种是具有静态生命周期的方法(参见《SystemVerilog中的生命周期lifetime》),另一种则是静态的方法,这种方法常见于类中,先来看下两者的声明方式,如下:[task/function]staticmethod_name(arg_list); // static methodstatic[task/function] method_name(arg_list); // static lifetime可见两.........原创 2022-05-01 08:30:33 · 1597 阅读 · 7 评论 -
硅芯思见:SystemVerilog中的生命周期lifetime
在SystemVerilog中我们经常会用到static,用以表示一种“静态”,而这种“静态”经常用来表示变量在整个仿真过程中的“存活期”,即生命周期。关于这个所谓的生命周期我们先通过一个示例有个直观的了解。【示例】【仿真结果】示例中,任务add2x2在initial过程块中被调用了两次,两次调用的时间不同,传入的参数也不同,但是最终的仿真结果是相同的,并且从仿真波形上可以看到任务add2x2中的temp在3ns时,从1变成了2,并且正是因为这次temp的变化导致第一次调用add2x2.原创 2022-05-01 08:27:07 · 419 阅读 · 0 评论 -
硅芯思见:SystemVerilog中unpacked数组的assignment pattern
在SystemVerilog中根据数组中元素的存储方式,将数组细分为了packed数组和unpacked数组,packed数组一般使用拼接({})操作实现初始化赋值,unpacked数组则使用数值列表(‘{})的方式实现初始化赋值。根据大家熟知的绿皮书《SystemVerilog For Verification 2nd》中示例Sample 2.7中使用default等方式进行赋值,但是这个示例的仿真可能与我们期望的并不一样,仿真结果如下。示例的仿真结果如下:纳尼?为什么编译都不通过。主要.原创 2022-04-20 23:17:46 · 2925 阅读 · 0 评论 -
硅芯思见:SystemVerilog类中方法定义在类外的那些事儿
在SystemVerilog中所有类的方法都可以定义于类内,也可以定义于类外。一般将比较复杂的方法的实现放在类外,这样可以增加代码的可读性,而比较简单的方法在类内实现。如果什么方法的定义都放于类内部的话,那么查找一个方法将会比较麻烦。所以在实际使用时,经常将方法定义于类外,方法定义于类外一般分为两步实现:第一步:在类内完成方法原型的声明,此时在方法原型前要使用关键字extern;第二步:在类外实现方法,此时方法名前需要加上“类名::”,用于限定了该方法属于哪个类;在完成了上述两步后,就完成了类内原创 2022-04-11 06:37:01 · 762 阅读 · 0 评论 -
硅芯思见:SystemVerilog中相互“嵌套”的队列和动态数组
在SystemVerilog中为了实现对于数组的动态操作引入了队列和动态数组,两种数据结构都能够根据需要动态的控制数组的大小,可以存储的数据类型也十分丰富,那么如果想实现队列和动态数组之间的相互存储应该如何实现呢?本文将示例实现队列和数组之间的相互存储。1队列中的元素为动态数组【示例】【仿真结果】示例中,通过typedef定义了自定义string类型的动态数组CHINA,然后声明了一个队列qarr,其中元素类型为CHINA。因为CHINA是动态数组,所以可以通过’{}的方式对其进..原创 2022-03-20 23:22:02 · 1399 阅读 · 0 评论 -
硅芯思见:SystemVerilog中的packedarray和unpacked array
【注】因为在很多书籍资料中关于packed array和unpacked array有不同的翻译,有的称之为压缩数组和非压缩数组,有的称之为合并数组和非合并数组,为了避免混淆,本文不采用任何翻译名称,仅使用packed array和unpacked array。在SystemVerilog中一般认为数组维数声明位于数组名左侧的数组为packed array,并且在使用时经常也将一维的packed array作为vector;维数位于数组名右侧的数组称之为unpacked array,当维数同时出现在数组原创 2022-03-20 23:20:31 · 5457 阅读 · 0 评论 -
硅芯思见:SystemVerilog中格式化输出域宽(field width)如何设置
SystemVerilog和Verilog中格式化显示域宽设置示例原创 2022-03-02 23:30:29 · 1908 阅读 · 0 评论 -
硅芯思见:SystemVerilog中队列的越界访问
SystemVerilog中队列的当前大小可以通过size()函数获得,队列中元素的个数也可以通过队列中最大索引值和最小索引值获得,在使用队列时,我们经常用SystemVerilog提供的各种方法对队列进行访问,但队列同样也支持通过索引的方式进行访问,并且这种方式也会被经常用到,这个时候就有可能出现访问队列时,索引值大于队列的大小范围,产生队列越界访问的情况,从而可能获得不期望的结果。为此,本文通过示例说明通过索引访问队列产生的一些异常情况,队列正常访问操作可参见《SystemVerilog中有界无界的队列原创 2022-01-15 00:16:35 · 914 阅读 · 0 评论 -
硅芯思见:SystemVerilog中有界无界的队列
示例说明SystemVerilog中有界无界队列的使用,以及队列的常用操作方式和注意事项原创 2022-01-10 23:26:54 · 1233 阅读 · 0 评论 -
硅芯思见:动态数组的创建不一定非要new[]
本文示例动态数组的创建方法和动态数组常用方法的使用注意事项。原创 2022-01-02 15:39:48 · 965 阅读 · 0 评论 -
硅芯思见:semaphore原来还有这一面
本文示例SystemVerilog中的semaphore中方法的一些特殊用法。原创 2021-12-28 21:53:33 · 457 阅读 · 0 评论 -
硅芯思见:SystemVerilog中clocking block中的输入偏差和输出偏差
本文示例SystemVerilog中clocking block的输入偏差和输出偏差的使用原创 2021-12-18 23:36:57 · 4441 阅读 · 4 评论 -
【原创】SystemVerilog和Verilog中的表达式位宽
self-determined和context-determined示例用法和注意事项原创 2021-12-06 23:22:22 · 4166 阅读 · 0 评论 -
【原创】SystemVerilog中这个this到底怎么回事
本文示例SystemVerilog中的this指针使用方法和注意事项0原创 2021-11-18 22:11:34 · 5066 阅读 · 0 评论 -
【原创】SystemVerilog中超级英雄super
SystemVerilog的OOP编程中,经常需要使用super这个关键字,主要用于子类访问父类中的属性和方法。当然并不是在所有情况下都需要使用super,一般情况下如果子类对于父类中的属性或者方法进行overriden,那么此时如果要引用父类中被overriden的属性或者方法时,就需要明示super。下面通过示例说明super在SystemVerilog中非new方法(super.new的使用和执行可参考之前的一篇短文:【59】new的初始化顺序)中的使用。【示例】引用父类中未被override..原创 2021-11-13 23:31:40 · 2784 阅读 · 1 评论 -
【原创】SystemVerilog中传说的DPI
自SystemVerilog3.1a之后,SystemVerilog推出了一个与第三方语言进行交互的强大功能,称之为DPI,DPI的全称就是Direct Programming Interface,是SystemVerilog与其他编程语言的一种接口,目前经常被用到的是SystemVerilog与C(C++)之间的交互,本文示例也将以C语言和SystemVerilog示例。0 大鱼吃小鱼的DPI在上世纪的时候,开发SuperLog的Co-Design Automation公司实现了SuperLog与原创 2021-11-07 23:52:59 · 7381 阅读 · 0 评论 -
【原创】SystemVerilog中变质了的连续赋值语句
在Verilog中进行连续赋值时,位于表达式LHS(Left Hand Side)的信号一般都需要声明为net类型,不能是变量类型,如果将连续赋值语句位于LHS的信号声明为变量类型,然后对其进行赋值将会报错(注意:此时不要在编译命令中增加-sverilog使能SystemVerilog语法检查),如下例:【示例】【仿真结果】示例中从编译结果可以看到,编译不通过。但是如果对上例进行仿真时,在编译命令中加入使能SystemVerilog语法检查参数后,编译将会通过。纳尼?不是System..原创 2021-10-31 15:42:45 · 832 阅读 · 0 评论