文章目录数据类型1. 内建数据类型类型转换方式显式转换隐式转换数据类型操作注意点2. 软件常用类型定宽数组数组声明数组声明多维数组声明和使用初始化和赋值存储空间考量组合型 & 非组合型声明方式基本数组操作for和foreach循环复制/拷贝 & 比较动态数组队列关联数组结构体枚举类型字符串 数据类型1. 内建数据类型四值逻辑属于硬件的世界-硬件设计,二值逻辑属于软件的世界-验证环            
                
         
            
            
            
            Systemverilog 语法总结(中)上一个博客分享了SV基本的概念,这一博客继续分享,等下一个博客分享一个公司的验证的笔试题目。 l 事件背景:Verilog中当一个线程在一个事件上发生阻塞的同时,正好另一个线程触发了这个事件,则竞争就出现了。如果触发线程先于阻塞线程,则触发无效(触发是一个零宽度的脉冲)。解决方法:Systemverilog 引入了triggered()函数,用于            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-29 22:53:48
                            
                                51阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            参考文献:https://www.chipverify.com/systemverilog/systemverilog-eventevent和旗语semaphore以及mailbox都是用于线程间的通信(IPC),负责线程之间的数据交换和同步。EVENT事件是静态的同步对象句柄(可以像参数一样在子程序中传递),它用来同步多个并发的进程,比如某个进程等待着事件,而另一个进程则触发这个事件。几个特征:            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-16 19:03:14
                            
                                301阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、过程语句  可以在 begin 或 fork 语句中使用标识符,然后在相对应的 end 和 join 语句中放置相同的标号,这使得程序块的首尾匹配更加容易。也可以把标识符放在其他语句里,如 endmodule、endtask、endfunction 等。  SV为循环功能增加了两个新语句,第一个是 continue,用于再循环中跳出本轮循环剩下的语句而直接进入下一轮循环。第二个是 break,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-08 22:23:08
                            
                                80阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、功能覆盖率策略1.1 收集信息而非数据对于一些设计,你需要关心的是合法的寄存器地址和非法的寄存器地址,可写的寄存器域和非法的寄存器域,而不是具体的寄存器地址数值。一旦关注的地方着眼于感兴趣的状态,而不是具体数值,那么这对于你如何定义功能覆盖率,以及如何收集信息会减轻很大的负担。设计信号如果数量范围太大,应该拆分为多个小范围再加上边界情况。1.2 只测量需要的内容Verifier 需要懂得,在使            
                
         
            
            
            
            $dumpfile和$dumpvar是verilog语言中的两个系统任务,可以调用这两个系统任务来创建和将指定信息导入VCD文件。
什么是VCD文件?VCD文件是在对设计进行的仿真过程中,记录各种信号取值变化情况的信息记录文件。EDA工具通过读取
VCD格式的文件,显示图形化的仿真波形,所以,可以把VCD文件简单地视为波形记录文件.)下面分别描述它们的用法并
举            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-11 20:30:12
                            
                                116阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            System Verilog课程小结第一周问题1:设计人员和验证人员他们的协作关系体现在哪些地方?1.设计人员和验证人员都需要围绕功能描述文档开展工作 2.设计只有经过充分量化验证,才有信心去流片 3.验证人员需要懂设计才能很好地向设计人员反馈设计漏洞 4.设计初步实现后即需要验证工作的加入 5.在系统由低向高的集成过程中,验证与设计需在每一层展开工作,确保每一个阶段的充分性问题2:为什么芯片验证            
                
         
            
            
            
            System Verilog过程语句 (1)赋值语句 (2)条件选择语句 (3)循环语句 (4)跳转语句 (5)子程序调用 (6)事件控制 1、赋值语句四类 阻塞赋值:使用 = ; 非阻塞赋值:使用 <= ; 自加/自减赋值:使用 ++/-- ; 过程连续赋值语句:使用 assign/deassign、force/release; 例子:initial begin
 logic data;            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-07 16:15:50
                            
                                164阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            引言本文简单介绍 SystemVerilog 语言的 testbench 组件间通信和数据交互。进程间通信测试平台中的组件经常需要相互通信来交换数据并检查设计的输出值。下表显示了一些允许组件或线程影响数据流控制的机制。何为事件 ?事件(event)是同步两个或者多个不同进程的方式。一个进程等待事件产生,另一个进程会触发事件。当事件触发后 等待事件的进程 将继续执行。1、用 event 创建事件ev            
                
         
            
            
            
            关闭 fork join 某个子进程:fork…join:内部所有线程同时开始运行,直到内部所有线程运行完毕后才跳出fork…join块fork…join_any:内部所有线程同时开始运行,只要有一个线程运行结束就跳出 fork…join_any块。当跳 出fork…join_any块后,fork里没完的线程和块外的线程并行运行fork…join_none:运行开始后,里面的子线程和块外的线程并行            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-28 19:16:13
                            
                                95阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            逻辑在具体实现上是通过2个计数器来控制100ms的计时控制,具体如下:定义计数器A(取值范围在0~9),计数器B(取值范围0~38399),且计数器B的启动是在计数器A取值为9时才开始,而计数器A的计数条件为模块端口输入的10ms同步信号。在Netlist仿真中验证这个100ms能量统计时,如果基于Netlist仿真真实的100ms需要很长的时间(以周为时间单位了),为了达到测试的目的,直接将逻辑            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-04 13:53:06
                            
                                480阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            子类和父类的方法调用问题:(参考绿皮书P227)B extend A;A和B都有方法 fun,且fun前面都有virtual修饰:此时根据句柄指向的对象类型来决定调度谁的fun;如果fun前面没有virtual修饰:则会根据句柄类来决定调用谁的fun,而不是对象类型;多个具有继承关系的类的方法,共用同一个名字的现象即为:“多态”vcs 只支持   bit   [10:            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-19 20:33:28
                            
                                182阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            上一文 讨论了FIR滤波器的结构以及使用Python从两个方面(循环运算和矩阵运算)实现FIR,而文中提到的单片机,只需要按照循环运算的方法就可以实现FIR滤波器。所以,单片机实现FIR滤波器并不复杂;奈何我手痒了,想舍弃掉FIR IP核,用Verilog自己写一个FIR。不知道大家有没有这样手痒的感觉,如果有,跟随这篇文章一起来,看完记得点赞。本文内容涉及Verilog的语法:function,            
                
         
            
            
            
             一、产生原子激励和场景1、和历史相关的原子发生器2、随机序列3、随机对象数组4、组合序列二、随机控制1、用randcase建立决策树三、随机数发生器1、伪随机数发生器2、随机稳定性——多个随机发生器3、随机稳定性和层次化种子4、随机器件配置四、结论 一、产生原子激励和场景1、和历史相关的原子发生器产生相关的事务流的最简单的办法是采用基于以前事务的随机值的原子发生器。这个类可以约束总线事务在80%            
                
         
            
            
            
            Verilog实现VGA字符显示  实现目标    在显示器中以640*480的分辨率显示0-9、A-Z、‘:’、‘*’的任意字符,字符大小为7*8的像素规模。  实现原理    1、基本的VGA显示        所有VGA显示            
                
         
            
            
            
            SystemVerilogSystemVerilog是一種在現代積體電路(尤其是超大型積體電路)的设计及验证流程中,由Verilog发展而来的硬體描述、硬件验证统一语言,前一部分基本上是2005年版Verilog的扩展,而后一部分功能验证特性则是一门面向对象程序设计语言。面向对象特性很好地弥补了传统Verilog在芯片验证领域的缺陷,改善了代码可重用性,同时可以让验证工程师在比寄存器传输级更高的抽            
                
         
            
            
            
            1 背景介绍1.1 保留足够的setup time下图中在10ns时,没有建立(setup)时间,很容引起不确定情况发生,因此需要将write信号前移,留出足够长的setup time。1.2 保留足够的hold time下图中,正确情况:TB产生req信号,req信号拉高,DUT的grant信号拉高;当grant信号经过一个周期后,grant信号会被拉低,然后req信号也会拉低;若是hold t            
                
         
            
            
            
            一:基本 
     
    Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器。 
     
    二:verilog语句结构到门级的映射 
     
    1、连续性赋值:assign 
     
    连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因些连续性赋值的目标结点总是综合成由组合逻辑驱动            
                
         
            
            
            
            本文对Verilog 的几种赋值语句进行归纳总结,辅以示例代码作为说明。1、连续赋值语句(Continuous Assignments)连续赋值语句是Verilog 数据流建模的基本语句,用于对线网进行赋值,等价于门级描述,是从更高的抽象角度来对电路进行描述。连续赋值语句必须以关键词assign开始。连续赋值语句的特点:数据类型是以下几种类型之一: ① 标量线网,如 wire a; assign            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-01 09:07:43
                            
                                229阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            四、验证4.1,找bugMUX2module top_module (
    input sel,
    input [7:0] a,
    input [7:0] b,
    output [7:0]out  );
    assign out = sel?a:b;
endmoduleMUX4module top_module (
    input [1:0] sel,
    i