电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA/CPLD » SystemVerilog语言简介(四)


共2条 1/1 1 跳转至

SystemVerilog语言简介(四)

菜鸟
2007-03-29 20:34:00    评分

23. 动态过程

Verilog通过使用fork-jion提供了一种静态的并发过程。每一个分支都是一个分离的、并行的过程。fork-jion中任何语句的执行必须在组内的每一个过程完成后才会执行。例如:

initial begin

fork

send_packet_task (1, 255, 0);

send_packet_task (7, 128, 5);

watch_result_task (1, 255, 0);

watch_result_task (7, 128, 5);

jion // 所有的任务必须完成后才会到达这里

end

SystemVerilog通过process关键字加入了一个新的、动态的过程。它为一个过程产生分支,然后继续执行而无需等待其他过程完成。过程不会阻塞过程或任务内的语句执行。这种方式能够建模多线程的过程。例如:

initial begin

process send_packet_task (1, 255, 0);

process send_packet_task (7, 128, 5);

process watch_result_task (1, 255, 0);

process watch_result_task (7, 128, 5);

end // 所有的过程并行运行

24. 任务和函数增强

SystemVerilog为Verilog的任务和函数作了几个增强。

l 静态和自动的存储

缺省情况下,在Verilog任务或函数内的所有存储都是静态的。Verilog-2001允许将任务和函数声明成自动的。在SystemVerilog中:(1). 在一个静态任务和函数内的特定数据可以显式地声明成自动的。声明成自动的数据在块中具有完整的生命周期,并且在任务和函数调用的入口处初始化;(2). 在一个自动的任务或函数中的特定数据可以显式地声明成静态的。自动的任务或函数中声明成静态的数据在一个块的本地范围内具有静态的生命周期。

l 从任何点返回

Verilog在一个任务或函数中执行到endtask或endfunction关键字的时候返回。函数的返回值是给函数名赋的最后一个值。SystemVerilog加入了一个return关键字,使用这个关键字,一个任务或函数可以在任何点上返回。

l 多语句

Verilog要求一个任务或函数只具有一个语句或语句块。多条语句必须组合到一个单一的begin-end或fork-jion块中。SystemVerilog去除了这种限制。因此,多条语句可以在一个任务或函数中列出而无需使用的begin-end或fork-jion。每有分组的语句就像在begin-end中一样顺序执行。我们还可以产生一个没有语句的任务或函数定义。

l void函数

Verilog要求一个函数具有一个返回值,函数的调用接收这个返回值。SystemVerilog加入了一个void数据类型,这个数据类型可以作为一个函数的返回值类型。void函数可以像Verilog任务一样进行调用,而无需接收一个返回值。void函数和任务的差别在于函数存在几个限制,例如没有时间控制等。

l 函数的输入和输出

Verilog标准要求一个函数至少具有一个输入并且函数只能具有输入。SystemVerilog去除了这些限制。函数可以具有任意数目的输入、输出以及输入输出,也可以什么也没有。

25. 连续赋值的增强

在Verilog中,连续赋值语句的左侧只能是线网类型,例如wire。连续赋值语句被认为是线网的驱动源,而线网可以拥有任意数据的驱动源。SystemVerilog允许除reg类型以外的任何数据类型用于连续赋值语句的左侧。与线网不同,所有其它数据类型被限制为只能有一个连续赋值语句驱动。为相同的变量混合使用连续赋值语句和过程赋值语句是不被允许的。

26. $bit系统函数

在Verilog中没有类似于C语言中sizeof的函数。SystemVerilog加入一个新的$bit内建函数。这个函数返回保存一个值所需的硬件位的数目(一个四态值要求一个硬件位),这个函数还可以用来确定一个结构体所代表的硬件位的数目。

27. `define的增强

SystemVerilog增强了`define编译器指令的能力以便支持将字符串作为宏的参数。宏的文本字符串中可以包含一个隔离的引号,它的前面必须具有一个反勾号(`”),这就允许字符串中包含宏参数。宏文本可以在行的尾部包含一个反斜杠(’’)来表示在下一行继续。如果宏文本字符串中包含反斜杠,则反斜杠应该被放在两个反勾号之间,这样它就不会被认为是Verilog转义标识符的开始。宏文本字符串还可以包含双反勾号(``),它允许标识符能够从参数中构建。这些增强使得`define指令更加灵活。例如:`include指令后可以紧跟一个宏名字来替代一个字符串。

`define f1 “../project_top/opcode_defines”

`include `f1

28. 状态机建模

SystemVerilog允许在更高的抽象层次上对状态机建模。这些结构包括:

l 枚举类型

l 一个特殊的state数据类型;

l 一个迁移语句

l 一个迁移操作符

29. 断言

SystemVerilog中加入了断言的功能来改善系统的验证过程。

30. 结论

SystemVerilog为Verilog-2001标准提供了一系列的扩展。这些扩展使得大型设计的建模和验证更加容易。




关键词: SystemVerilog     语言     简介     过程     Ve    

菜鸟
2007-03-29 20:35:00    评分
2楼


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]