SV processses
SV中的structured procedure:
1)intial procedure,keyword只有initial;最开始被调用一次;
2)always procedure,keyword包括always,always_comb,always_latch,always_ff;
整个仿真时间一直被调用;
3)final procedure,keyword 只有final;最后被调用一次;
4)Task;
5)function;
其他的procedure contexts,包括:coverage point expression,assertion sequence items,action blocks;
always_comb,在time 0一定会被执行,这是与always (*)比较大的一个区别;
always_latch,always_ff,需要用户做额外的检查,保证procedure中的是相应的logic;
final procedure,最好只定义一个,多个之间的顺序是随机的,而且必须是不消耗仿真时间的,只是做一些display信息最好;
SV中的block 声明:1)sequenetial block,begin,,,,end block;
2)parallel block,fork,,,join/any/none block;
block中的name声明,可以加在begin或fork之后,并且相应的在end或者join/join_none/join_any之后也添加,组成一组。
name声明可以对内部的local var创建新的一层hier,也方便disable调用;
block中的label声明,加在begin或fork之前,end之后,组成一组;
label并不创建新的hier,只是方便指定disable等。
block的start和finish time可以指定为某个延时,或event;
fork
@a begin,,,,end;
@b begin,,,,end;
join
procedure中的timing control,
1)delay control,加#表示,specify block中制定的delay,可以被sdf override掉;
组合逻辑,#在表达式之前,建模;
时序逻辑,#在等号右侧,建模;
tb中的输入激励,可以直接加#;
2)event control,加@来进行表示;
implicit event,等待某个signal的value change;clock signal的pose/nege最为常用;
explicit event,显式声明某个event,然后做wait和trigger;
posedge,从0-x/z也算;negedge,从x/z-0也算;
@之后也可以添加class中的内容或,handle。主要相应的handle或者var变化,就是一个event的触发;

不同的event之间,也可以进行or运算,或者用","来表示;
always @(a,b,c) = always @(a or b or c);
implicit类型的event_expression list 用 always @(*) always @*来表示;
conditional event表示,加入iff关键字;
always @( a iff enable == 1) 在enable为1的情况下的a的edge跳变;
sequence event表示某个sequence运行到end的时候,的结果时候改变;
sequence abc;
@ (posedge clk) a ##1 b ##1 c;
endsequence;
intial begin
@ abc $display(“”);
end
level_sensitive event,使用wait关键字,
wait expression;
wait fork;等待所有的child-process都执行结束;
wait_order (identifier1, identifier2, identifier3) action_block(else等); 等event按顺序进行trigger;
必须是显式声明的event 类型;
level_sensitive sequence event,使用内部function triggered;

3)intra_assignment timing control;将delay不能写在assign中。可以是delay,也可以是event;

thread的创建:1)每个initial procedure;
2)每个final procedure;
3)每个always,always_comb,always_latch,always_ff procedure;
4)每个fork---join的statement;
5)dynamic process;
process ctrl:wait,wait_order,wait fork;
wait fork,会等待当前进程的所有子进程结束,包括之前block块,未结束的进程。
disable task/block identifier,disable fork;
wait fork和disable fork,等待或者disable该进程下的所以子进程;
disable后不能加function的identifier;
disable block_name的格式,类似与verilog格式的static形式的disable,显示kill指定的process。
process的指定,只通过hier来确定。(automatic task或者function中的object,不能通过hier来引用,只能通过block内部的hier name来确定)
(使用disable block_name的时候,需要注意block_name在多线程中情况)
disable fork,更加切合sv dynamic的形式,查找当前begin end或者task, function中的进程,进行disable。
program test;
task automatic t(input int b);
fork:ONE
begin
#b $display('%0b', b);
end
begin
#b $display('%0b', b);
end
join_any
//str1 disable ONE; //使用这种disable,sim output 5 (因为hier是一样的,所以两个ONE的进程都被杀了)
//str2 disable fork; //使用这种disable,sim output 5 ; 10
endtask
endprogram
initial begin
fork
t(10);
t(5);
join
end
SV中定义了process的class,来对每个process做具体的控制;

应用,await,kil,resume等function;

SV processses的更多相关文章
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划 ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见
挣值管理(PV.EV.AC.SV.CV.SPI.CPI)记忆之我见 挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三 ...
- 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)
[等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) 1 BLOG文档结 ...
- 挣值管理不是搞数字游戏(3)——进阶指标:CV、SV、CPI、SPI、EAC
摘要: 要考PMP(Project Management Professional ),挣值管理是必考的知识.软件项目有很大的特殊性,不少人认为挣值管理不太适用于软件项目.挣值管理相关资料也比较超多, ...
- 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
挣值常用名词: AC [Actual Cost] 实际成本:完成工作的实际成本是多少? [96版的ACWP] PV [Planned Value] 计划值: 应该完成多少工作? [96版的BCWS] ...
- SV randomize
randomize中的变量只支持2-state的values,不支持4-states. randc类型的变量不能被约束在solve------before的语句中. constraint可以被定义在c ...
- SV class
SV中的class通过new来创建实例,new函数可以传递多个参数: packet P1: P1 = new:创建一个P1的对象: P2 = P1:P2也指向同一个对象: P2 = new P1:P ...
- sv命令空间 packge
SV中的module,interface,program,checker,都提供declaration空间,内部定义都local当前的那个scope,相互之间的building block不影响,不识 ...
随机推荐
- 20个有趣的Linux命令
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)
1. 前言 Block:带有自动变量(局部变量)的匿名函数.它是C语言的扩充功能.之所以是拓展,是因为C语言不允许存在这样匿名函数. 1.1 匿名函数 匿名函数是指不带函数名称函数.C语言中,函数是怎 ...
- LeetCode 884 Uncommon Words from Two Sentences 解题报告
题目要求 We are given two sentences A and B. (A sentence is a string of space separated words. Each wo ...
- springboot的filter使用
package com.filter; import org.springframework.core.annotation.Order; import javax.servlet.*; import ...
- MIPS 指令集开源了
去年年底我们报导过 MIPS 指令集将于今年第一季度开源的消息,现在 MIPS 官方已经正式将其释出. MIPS 是一种精简指令集(Reduced Instruction Set Computer,R ...
- Python+Flash+NodeJS 接口自动化平台
一.前端安装步骤# manager-web(1)下载项目 git clone https://github.com/t880216t/manager-web.git (2) 安装依赖 cnpm ins ...
- CF997C Sky Full of Stars 数论
正解:容斥 解题报告: 传送门! 两个方法,分别港下QAQ 先说第一种 首先要推出式子,就∑2*C(i,n)*(-1)i+1*3i*3n*n-n+3*∑∑(-1)i+j+1*C(i,n)*C(j,n) ...
- 如何在win+r 或者是win10的应用搜索输入subl就能打开sublime
这虽然不是什么技术贴,我实在不想开启sublime还要动鼠标,或者输入subl长长的全称,这里有两种做法: 第一种 在环境变量添加sublime安装目录的变量,一般sublime的安装目录会有subl ...
- python基于django编写api+前端后端分离
有用 https://segmentfault.com/a/1190000016049962#articleHeader2 python的前后端分离(一):django+原生js实现get请求 htt ...
- 011-ThreadFactory线程工厂
一.源码分析 ThreadFactory是一个线程工厂.用来创建线程.这里为什么要使用线程工厂呢?其实就是为了统一在创建线程时设置一些参数,如是否守护线程.线程一些特性等,如优先级.通过这个Tread ...