system verilog学习笔记2

进程:

  1. 在定义fork...join块的时候,将整个分叉封装在一个begin..end块中会引起整个块作为单个进程执行,其中每条语句顺序地执行;
  2. sv为下列进程产生一个执行线程:每一个initial块,每一个always块,fork...join(join_any,join_none)语句的每一个并行语句,每一个动态进程;每一个连续赋值也可以认为是它自己的线程;
  3. 在一个fork...join语句的关联文中使用return语句是非法的,会导致错误,原因是与return语句匹配的进程与fork_join的进程属于不同的进程;
  4. 在并发进程中务必使用自动变量来保存数值;

任务与函数;

  1. Verilog-2001具有静态和自动的任务和函数。在一个模块实例中,会为一个任务或函数的所有调用分配相同的存储空间。自动的任务和函数则为每一个实例分配唯一的、栈式存储空间;
  2. SV中无需一个begin...end块或fork...join块就可以在一个任务或函数中使用多条语句,默认顺序执行;
  3. SV中任务或函数的形参声明,缺省方向为input,缺省数据类型为logic;
  4. SV中的任务允许一个静态任务中将特定的形式参数和本地变量声明成自动的,或者,也允许在一个自动任务内将特定的形参和本地变量声明成静态的,若任务声明成自动的,所有的形参和本地变量都被存储在堆栈中;
  5. 在一个事件表达式中,一个过程连续赋值语句内的表达式中或者不在一个过程语句中的表达式中调用具有output、inout、ref形参的函数是非法的;在这些关联文中将const ref作为函数参数是合法的;
  6. 过程语句通过以下语句引入:initial,final,always,always_comb,always_latch,always_ff,task,function;
  7. 在一个进程内部,SV具有以下控制流:选择 循环及跳转;任务与函数调用;顺序和并行块;时序控制;

类:

  1. 每一个类的实例的每一个变量都有它自己的拷贝,有时要求所有的实例共享变量的一个属性,这此属性使用关键字static产生;
  2. 一个静态方法像一个常规的子例程一样可以在类的外部被调用。一个静态方法不能访问非静态成员(类属性或方法),但它可以直接访问静态类属性或调用同一个类的静态方法。在一个静态方法体内访问非静态成员或访问特殊的this句柄是非法的;静态方法不能是虚拟的;对于一个静态类属性,无需产生一个该类型的对象就可以直接使用;
  3. this关键字用来明确地引用当前实例的类属性或类方法;super关键字在继承类的内部使用,可以用来引用其父类的成员。
  4. 所有的类属性和类方法都在类外可见,与SV变量一样,类属性可通过const声明成只读的,由于类属性是动态的对象,类属性允许两种形式的只读变量:全局变量和实例常量;
  5. 全局常量类属性是那些在声明中包含了初始值的常量类属性,与const变量类似,也就是它们不能在除声明之外的其它地方赋值;实例常量在声明中不包含初始值,仅包含const限定符,这种类型的常量可以在运行时赋一个值,但赋值只能在对应的类构造器中完成一次;典型情况下,全局常量还被声明成static,因为它们对于类的所有实例都是相同的,但一个实例常量不能声明成static,因为它们在构造器中不接受所有的赋值;
  6. 类是一种数据类型,包含了数据以及对数据进行操作的子程序;
  7. 除线网类型外的任何数据都可以声明成一个类属性;
  8. 每一个类都有一个缺省的new方法,缺省构造器首先调用它的父类构造器(super.new()),然后继续将对象的每一个成员初始化成它的初始值;
  9. 一个静态方法不同于一个具有静态生命周期的方法,前者指的是类内部的方法的生命周期,而后者指的是任务内部的参数和变量的生命周期。在类中有以下两任务:static task foo();...endtask //具有自动变量生命周期的静态类方法;task static bar();...endtask//具有静态变量生命周期的非静态方法;
  10. 缺省情况下,类方法的参数和变量具有自动的生命周期;
  11. 将一个子类变量赋值给层次树中较高的类变量是合法的,将一个超类变量直接赋值给一个子类变量则是非法的,但如果超类句柄引用了指定子类的句柄,那将一个超类句柄赋值给一个子类变量则是合法的;
  12. 一个子类在实例化的时候会调用类方法new(),在函数中定义的任何代码执行之前,new()执行的一个动作是调用其超类的new()方法,并且会沿着继承树按这咱方式一直向上调用,如果超类的初始化方法需要参数,比较通用的方法是使用super关键字调用超类构造器,即在子类的new函数的第一行将超类的new函数声明全部照抄在第一行;
时间: 2024-10-12 08:46:35

system verilog学习笔记2的相关文章

System Verilog学习笔记(一)

1.var/reg与bit/logic 异: reg——>在verilog hdl中用来声明寄存器: var——>在SV中所有暂存的资源视为变量,即variable:同: reg和var都会消耗FPGA资源.注: a.SV中保留了reg关键字,reg与var有等价左右. b.SV在声明RAM的时候,也会使用var关键字.例子:reg [3:0] rLED; //verilogvar [3:0] rLED; //sysverilog 2.物理特性寄存器一般有4态,即0,1,x,z verilog

Linux System Programming 学习笔记(八) 文件和目录管理

1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据 ls -i 命令获取文件的inode number /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.h>

Linux System Programming 学习笔记(十) 信号

1. 信号是软中断,提供处理异步事件的机制 异步事件可以是来源于系统外部(例如用户输入Ctrl-C)也可以来源于系统内(例如除0) 内核使用以下三种方法之一来处理信号: (1) 忽略该信号.SIGKILL和SIGSTOP不能被忽略. (2) 捕捉并且处理该信号.The kernel will suspend execution of the process's current code path and jump to a previously registered function. SIGK

Linux System Programming 学习笔记(五) 进程管理

1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件) A process is a running program A thread is the unit of activity inside of a process the virtualization of memory is associated with the process, the threads all share the same memory address space 2. pid The idle pro

Linux System Programming 学习笔记(九) 内存管理

1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系结构决定了内存页大小,32位系统通常是 4KB, 64位系统通常是 8KB 内存页分为 valid or invalid: A valid page is associated with an actual page of data,例如RAM或者磁盘上的文件 An invalid page is

Linux System Programming 学习笔记(七) 线程

1. Threading is the creation and management of multiple units of execution within a single process 二进制文件是驻留在存储介质上,已被编译成操作系统可以使用,准备执行但没有正运行的休眠程序 进程是操作系统对 正在执行中的二进制文件的抽象:已加载的二进制.虚拟内存.内核资源 线程是进程内的执行单元 processes are running binaries, threads are the smal

Linux System Programming 学习笔记(十一) 时间

1. 内核提供三种不同的方式来记录时间: Wall time (or real time):actual time and date in the real world Process time:the time that a process spends executing on a processor 包括用户时间user time 和 系统时间system time Monotonic time:use the system's uptime (time since boot) for t

Linux System Programming 学习笔记(六) 进程调度

1. 进程调度 the process scheduler is the component of a kernel that selects which process to run next. 进程调度器需要使 处理器使用率最大化,并且提供 使多个进程并发执行的虚拟 Deciding which processes run, when, and for how long is the process scheduler's fundamental responsibility. 时间片:th

Linux System Programming 学习笔记(四) 高级I/O

1. Scatter/Gather I/O a single system call  to  read or write data between single data stream and multiple buffers This type of I/O is so named because the data is scattered into or gathered from the given vector of buffers Scatter/Gather I/O 相比于 C标准