转载请标明出处

第一章 System Verilog过程块、任务和函数

1.1.    verilog通用目的always过程块(procedural block)(可综合)

always过程块的综合指导方针:

  • 组合逻辑

1.关键词always后必须跟一个边沿敏感的事件控制(@符号)

2.事件控制的敏感表中不能包含posedge和negedge限定词

3.敏感表必须列出过程块的所有输入,所谓输入是指在该块读入并且在块外赋值的信号

4.过程块中不能包括其他的事件控制

5.所有在过程块中赋值的变量必须随所有可能的输入组合变化而更新

6.所有在此过程块赋值的变量不能在其他任何过程块再次赋值

  • 锁存逻辑

1.关键词always后必须跟一个边沿敏感的事件控制(@符号)

2.事件控制的敏感表中不能包含posedge和negedge限定词

3.敏感表必须列出过程块的所有输入,所谓输入是指在该块读入并且在块外赋值的信号

4.过程块中不能包括其他的事件控制

5.*过程块中赋值的变量至少有一个不能被某些输入条件更新

6.所有在此过程块赋值的变量不能在其他任何过程块再次赋值

  • 时序逻辑

1.关键词always后必须跟一个边沿敏感的事件控制(@符号)

2.事件控制的敏感表中必须包含posedge和negedge限定词

3.该过程块不能包含其他的事件控制

4.所有在过程块中赋值的变量不能在其他任何过程块再次赋值

1.2.    system verilog特有的过程块(可综合)

通过always_comb,always_latch,always_ff过程块相对于always可以更明确的反映设计意图

1.2.1.      组合逻辑过程块(always_comb)

Eg. always_comb

If(!mode)          //mode在敏感list中

Y=a+b;  //a,b在敏感list中

Else

Y=a-b;

可以看出,always_comb块的后面不需要指明敏感列表。因为敏感表默认为所有被过程块读取(读取:出现在表达式右边或者作为条件语句的条件表达式中)并在块外赋值的信号。

Always_comb过程块在所有initial和always过程块启动时,无论敏感变量是否发生变化,均会在仿真的0时刻自动触发

Always_comb与always@*的区别:

always@*对过程块调用的函数中读取的信号不能推断为敏感变量

而always_comb的敏感列表包含函数读取的信号

1.2.2.      锁存逻辑过程块(always_latch)

Always_latch过程块表示过程块描述的是基于锁存器的逻辑

Always_latch.的推断敏感list的规则与Always_comb相同,且在仿真0时刻也会执行一次

1.2.3.      时序逻辑过程块(always_ff)

Always_ff的敏感列表必须明确列出,一般为posedge或negedge

1.3.    SV对任务和函数的改进

l  SV中task和function中若有多条语句,可以不用像verilog一样使用begin...end打包

l  verilog中函数通过赋值与函数名相同的变量来提供返回值。SV可以使用return关键词

l  SV可以通过return提前结束任务或函数

l  SV提供了显示声明void空函数的功能

l  SV中函数的形式参数增加了output和inout,可以传送调用函数产生的变化

有output或inout参数的函数不能在以下情况中调用:

1.事件表达式。 2.使用过程持续赋值的表达式。  3.不在过程语句中的表达式

l  在可综合模块中可用空函数代替任务,除了不能包含事件控制,啥都能干

l  SV使用参数名传递参数值eg.result <= devide(.denomibator(b),.numerator(a)) //显示传递

l  verilog中函数必须至少有一个输入参数,SV中可以没有形式参数(input/output/inout)

l  SV中缺省方向的形式参数默认为input,且类型为logic,且可定义形参的缺省值

l  形参可以是数组、结构体或联合体

l  自动任务和函数可以通过使用ref取代input/output来达到引用参数的目的(共用存储区)

使用ref的好处是,任务中该参数对变化敏感(因为不是只是复制单时刻的值)且可以立即传播变化

有output/inout/ref参数的函数不能被以下情况中调用:

1.事件表达式。 2.使用过程持续赋值的表达式。  3.不在过程语句中的表达式

4.持续赋值中的表达式

l  当使用const ref声明形参时,任务和函数只能对参数进行只读操作

l  SV中使用endtask endfunction指明任务或函数结尾名称

第二章 过程语句(procedural statements)

2.1.    新操作符

l  递增/递减操作符(++/—) (属于阻塞赋值) (作为独立语句时可综合)

后加:j=i++;//j=i,然后i+1. 先加:j=++i;//i+1然后赋给j

l  赋值操作符(+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,<<<=,>>>=)

(属于阻塞赋值,独立语句可综合,都是=左边作为主操作数,最后赋值给=左边)

l  有无关通配符的相等操作符(==,===,==?)       (右边操作数为常数时可综合)

(==?中右边操作数中x/z看作通配符,与任意数值匹配)

l  设置成员操作符(inside)eg.if(a inside {3’b001,3’b010}); //即if((a==3’b001)||(a==3’b010));

2.2.    操作数改进

l  增加类型强制转换符(<type>’(expression))

l  增加尺寸强制转换符(<size>’(expression))

l  增加符号强制转换符(<signed>’(expression).   <unsigned>’(expression))

2.3.    改进的for循环(可综合)

l  for循环内部声明(循环内定义的变量)的变量是自动变量

(每个循环的内部循环变量互不影响)

l  如果要在循环外饮用一个变量,该变量需在循环外声明。

l  循环内的局部变量不能层次化引用,但是外部声明的变量可以层次化引用

2.4.    底部检测的do...while循环(静态确定循环次数时可综合)

l  while语句在循环开始检测循环控制;do...while在在循环结尾检测,保证至少执行一次

l  语法:     do<语句或语句块>

While(<条件>);

2.5.    foreach数组循环结构

见4.4

2.6.    新的跳转语句——break、continue、return(可综合)

l  verilog:task中使用disable语句使语句序列执行流跳转或作为返回语句

l  SV中跳转语句(break、continue、return)只对当前执行流有效

  • continue语句

跳转到循环的结尾然后重新回到开头执行循环控制

  • break语句

中止循环的执行(整个循环结束,彻底,完全,结束)

  • return语句

从非空函数返回或者从空函数或任务重跳出。

2.7.    改进的块名

Begin:<block_name>

...

End:<block_name>

2.8.    语句标号(statement label)

<label>:<statement >可用来识别单条语句

begin:block1          //named block                                             block2:begin//带label的块

...                                                                                                                      ...

End:block1.                                                                                                  end

一个语句块不能同时有label和block name

2.9.    改进的case语句

l  verilog中case语句默认带有优先级(由前至后)

l  SV为case,casez,casex的判定提供了修饰符unique和priority,均需指明所有条件

n  unique case               等效于同时使用verilog中的full_case及parallel_case附注

该语句指定:必须有且只有一个条件选项与条件表达式匹配

unique case(<case_expression>)

...//条件选项

endcase

n  priority case              等效于verilog中的full_case附注

该语句指定:

至少有一个条件选项与条件表达式相符

若存在多个条件选项的值与条件表达式匹配,则必须执行第一个匹配分支

priority case(<case_expression>)

...//条件选项

endcase

2.10.        改进的if...else判断语句(可综合)

unique if...else

取消判断顺序优先级

Priority if...else

表示分支的次序时重要的,需按照原有次序进行优先级编码

Systemverilog for design 笔记(五)的更多相关文章

  1. Systemverilog for design 笔记(七)

    转载请标明出处 第一章 接口(interface) 1.1.    接口的概念 接口允许许多信号合成一组由一个端口表示. 1.2.    接口声明 //接口定义 Interface main_bus ...

  2. Systemverilog for design 笔记(六)

    转载请标明出处 第一章 有限状态机建模(FSM,finite state machine) 1.1.    使用枚举类型建立状态机模型 l  三过程块建模风格:三个过程块分别实现: a.状态转换(al ...

  3. Systemverilog for design 笔记(四)

    转载请标明出处 数组.结构体和联合体 1. 结构体(struct) 1.1. 结构体声明 结构体默认是变量,也可以声明为线网 var struct { // 通过var进行结构体变量声明 logic ...

  4. Systemverilog for design 笔记(三)

    转载请标明出处 用户自定义和枚举数据类型 1. 用户自定义类型(typedef) 局部typedef定义:只用于设计的特定部分时,typedef的定义可在module或interface中 共享typ ...

  5. SystemVerilog for design 笔记(二)

    转载请标明出处 1. System Verilog文本值和数据类型 1.1. 增强的文本值赋值 相对于verilog,SV在文本值赋值时可以1.无需指定进制    2.赋值可以是逻辑1 用法: reg ...

  6. Systemverilog for design 笔记(一)

    转载请标明出处 一.     System Verilog 声明的位置 1.       包(packages) Verilog要求局部声明: variables, nets, tasks and f ...

  7. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  8. 《MFC游戏开发》笔记五 定时器和简单动画

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...

  9. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

随机推荐

  1. 负环--spfa

    洛谷板子题 负环?是有负权边的环还是一个边权之和为负的环? 还没有准确的定义(那就先忽略吧qwq 判断负环的方法: 暴力枚举/spfa/mellman—ford/奇怪的贪心/超神的搜索 可惜我只会sp ...

  2. Etcd Learning Notes

    官网:https://etcd.io 官方项目地址:https://github.com/etcd-io/etcd 参考资料: https://www.hi-linux.com/posts/40915 ...

  3. 【C语言】将输入的10个数排序

    代码: #include <stdio.h> int main() { ], t; int i, j, max; printf("请输入10个数:\n"); ; i & ...

  4. php 基础 判断类型

    八.PHP中判断类型 is_bool():判断是否是布尔型 is_int().is_integer()和 is_long():判断是否为整型. is_float().is_double()和 is_r ...

  5. Plastic Bottle Manufacturer - Different Cosmetic Plastic Bottle Materials, Different Characteristics

    Plastic bottles are usually made of PP, PE, K, AS, abs, acrylic, PET, and the like. Dust caps for th ...

  6. 「题解」「JOISC 2014 Day1」历史研究

    目录 题目 考场思考 思路分析及标程 题目 点这里 考场思考 大概是标准的莫队吧,离散之后来一个线段树加莫队就可以了. 时间复杂度 \(\mathcal O(n\sqrt n\log n)\) . 然 ...

  7. 创业学习---今日头条创业过程分析---HHR计划

    本文搜集和整理了今日头条创业的一些关键点的资料------by 春跃(本文的主要观点都是搜集整理,所以不得本人同意不得转载) 一,18年之前的今日头条创业时间表: 1,张一鸣参与创业的履历:酷讯,饭否 ...

  8. Python NumPy中数组array.min(0)返回数组

    如果没有参数min()返回一个标量,如果有参数0表示沿着列,1表示沿着行.

  9. ConcurrentHashMap 结构 1.7 与1.8

    1.结构 1.7 segment+HashEntity+Unsafe 1.8 移除Segment,使锁的粒度更小,Synchronized+CAS+Node+Unsafe 2. put() 1.7 先 ...

  10. Update(Stage5):Kudu入门_项目介绍_ CDH搭建

    Kudu 导读 什么是 Kudu 操作 Kudu 如何设计 Kudu 的表 Table of Contents 1. 什么是 Kudu 1.1. Kudu 的应用场景 1.2. Kudu 和其它存储工 ...