1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,            
                
         
            
            
            
            前言参考书籍:《Verilog HDL 数字设计与综合》第二版,本文档为第10章的学习笔记。本章将探讨Verilog中如何控制和定义时序学习目标了解分布延迟、集总延迟和路径延迟specify关键字设置路径延迟输入输出引脚间的并行连接和全连接specify块中用specparam语句定义参数条件路径延迟(状态依赖路径延迟)rise、fall和turn-off延迟,理解如何设置min、max            
                
         
            
            
            
            1:阻塞式左延时赋值语句 举例说明如下       module adder_t1 (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
always @(a or b or ci)
#12 {co, sum} = a + b + ci; // 在15            
                
         
            
            
            
            Verilog/System Verilog 硬件设计语法说明SV通常语法说明声明相关语法包文本值和数据类型枚举数据类型用户自定义类型结构体联合体数组SV过程块改进的case语句改进的if...else判断语句SV状态机模型特殊语法说明 SV通常语法说明声明相关语法`include `include指令用于在代码行中包含任何其他文件的内容,被包含的文件即可以使用相对路径定义,也可以使用绝对路径定            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-25 09:36:04
                            
                                690阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            几个简单的系统任务,$readmemb,$readmemh,$fopen,$fdisplay;基本上就可以完成对文件的读写操作。一、读任务在verilog语言中有两个系统任务$readmemb,$readmemh可以用来从文件中读取数据到存储器中。这两个任务可以在仿真的任何时刻被执行使用,其使用方法如下:$readmemb1,$readmemb("<数据文件名(路径地址和文件名)>",            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-28 16:01:52
                            
                                1479阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一个电路能跑到多少M的时钟呢?这和电路的设计有密切联系(组合逻辑的延时),我们知道电路器件都是由一定延迟的,所以信号的仿真很重要。如果延迟时间大于时钟,就会导致时序违例,出现逻辑错误。项目要求300M怎么实现呢?学习涉及如下: 建立时间保持时间;电路延时时钟频率关键路径流水线设计来提高CLK 首先来看下D触发器一、D触发器时序分析 上升沿前后对D有一定要求,称为上升时            
                
         
            
            
            
            首先在FPGA中要产生延时,信号必须经过一定的物理资源。在硬件描述语言中有关键词Wait for xx ns,需要说明的是该语法是仅仅用于仿真而不能用于综合的。 
可综合的延时方法有: 
1、使信号经过逻辑门得到延时(如非门); 
2、使用器件提供的延时单元(如Altera公司的LCELL);注意:当使用多级非门的时候综合器往往会将其优化掉,因为综合器会认为一个信号非两次还 是它。虽然不同的厂家的            
                
         
            
            
            
             1、Verilog命名规则1.1、顶层文件 对象+功能+top比如:video_oneline_top1.2、逻辑控制文件 介于顶层和驱动层文件之间 对象+ctr比如:ddr_ctr.v1.3、驱动程序命名 对象+功能+dri比如:lcd_dri.v、uart_rxd_dri.v1.4、参数文件命名 对象+para比如:lcd_para.v1.5、模块接口命名:文件名+u 比如 :lc            
                
         
            
            
            
            foreach结构指定在数组元素上的迭代。它的自变量是一个指明任意类型数组(固定尺寸的、动态的、及联合数组)的标识符,然后紧跟着一个包围在方括号内的循环变量的列表。每一个循环变量对应于数组的某一维。foreach结构类似于一个使用数组范围替代一个表达式来指定重复次数的repeat循环。 例子:     
     string words[2] = {"hello", "world"};            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-29 15:37:19
                            
                                982阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             SystemVerilog学习——数据类型1. 内建数据类型1.1 逻辑数值类型1.2 符号类型 
                                    
                             
         
            
            
            
            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、function和task简介Systemverilog和Verilog中的 function 和 task有一些区别。1.1 verilog中task可以消耗时间,而function不能消耗时间。function不能包含一些消耗时间的语句,例如:#100n; @ ; wait()等fucntion不能调用taskverilog中的function必须要有返回值,并且返回值必须被使用,例如用到            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-27 17:12:00
                            
                                117阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            system verilog for verification:类中的方法默认使用自动存储;程序中的任务的局部变量会使用共享的静态存储区,若在程序的多个地方调用同一任务,不同线程之间会窜用这些局部变量;全局变量($root)-程序变量-类变量-方法变量;类应当在program或者module外的定义;模块和程序块中的子程序缺省情况下仍然使用静态存储;局部变量在仿真开始前就被赋了初值,当试图在声明中            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-22 13:22:56
                            
                                126阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1、合并数组和非合并数组1)合并数组:存储方式是连续的,中间没有闲置空间。例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。表示方法:数组大小和位,必须在变量名前指定,数组大小必须是【msb:lsb】Bit[3:0] [7:0] bytes   ;2)非合并数组:Bit [7:0] bytes [0:3]             
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-09 14:52:43
                            
                                615阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            2.1选择存储类型灵活性:如果数组的索引是连续的非负整数0、1、2、3等等,则应该使用定宽或者动态数组,长度可变的数据包使用动态数组。存储用量:使用双状态类型可以减少仿真的存储器用量,尽量使用32比特的整数倍最为数据带宽速度:应该根据每个时钟周期内的存取次数来选择数组类型排序:如果元素是一次性加入的话,则应该选择定宽或者动态数组,逐个加入的话则应该选择队列,队列的首尾加入元素的效率很高选择最优的数            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-30 11:30:31
                            
                                116阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
             Verilog 早期版本仅有静态生命周期的概念,同一个function或者task无论你调用多少次内部的变量都是分配的同一个地址。没有调用堆栈的操作。 在Verilog-2001 标准中引入了动态生命周期的概念,任务或者函数中的变量可以定义为动态变量。动态变量主要用来描述在测试程序、抽象系统级、transaction级或总线功能模型中的验证程序动态变量也可以用来编写可重入的任            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-30 08:02:56
                            
                                127阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            数字硬件建模SystemVerilog-结构体(二)  结构体结构体用于将多个变量组合在一个通用名称下。设计通常具有逻辑信号组,例如总线协议的控制信号,或状态控制器内使用的信号。结构体提供了将这些相关变量捆绑在一起的方法。结构体中的所有变量都可以单个赋值,或者每个变量都可以单独赋值。结构体包可以复制到具有相同定义的另一个结构体,并通过模块端口、任务或函数进出。结构体复制一个自定义结构体可以复制到另            
                
         
            
            
            
            SystemVerilog基本语法总结(上)在总结SV的语法之前,先分享一些关于SV的笔试题目,这样更显得具有针对性的总结。a. 验证中,代码覆盖率是指(衡量哪些设计代码在激活触发,而哪一些则一直处于非激活状态的统计数据)。b. SystemVerilog中,从一个类派生一个新类的关键字是(extends)c. SystemVerilog中,仿真器运行一个用例需要建立多个子线程,这些子线程结束时间            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-23 14:39:46
                            
                                673阅读