《systemverilog验证》阅读笔记 -- 过程语句和子程序

来源:互联网 发布:yy音效软件下载 编辑:程序博客网 时间:2024/06/03 02:27

  • 过程语句
    • 条件
      • if
      • case
    • 循环
      • for
      • while
        • continue
        • break
  • 子程序
    • 参数
    • return
    • 带返回值的子程序
    • 自动存储automatic

过程语句

条件

if

case

循环

for

while

continue

break

子程序

function和task的使用,与verilog语法不太一样。主要区别:
- function可以不带返回值
- function里可以调用task;线程章节会介绍。
- function/task不需要begin…end包含了。
- task的参数,更灵活;比module的参数设置还灵活。

基于此特点,
可以定义用于debug的function了。

function void print_state(...);    $display("@%0t,state=%s",$time,current_state.name());endfunction

参数

function void print_checksum(const ref bit[31:0] a[]);    bit[31:0] checksum=0;    for(int i=0;i<a.size();i++)        checksum ^= a[i];    $display("The array checksum is %0d",checksum);endfunction

其中const,是指参数变量不能改变,否则编译报错;
ref代表数组参数的传递,注意整个子程序需要是automatic属性,即自动存储。后文再讨论。
ref还有个好处,是用于线程的。后文再讨论。

return

出现错误的时候,跳出子程序。

带返回值的子程序

function void init(ref int f[5],                    input int start);    foreach(f[i])        f[i]=i+start;endfunctionint fa[5];initial begin    int(fa,5);    foreach(fa[i])        $display("fa[%0d]=%0d",i,fa[i]);end

自动存储automatic

多线程的时候用到。
比如某个task,被多次调用,为了不让变量互相干扰。从verilog的默认静态共享,变为自动存储类型。后文再说吧。

0 0
原创粉丝点击