systemverilog學習(5)procedural statement ,task ,function&automatic


本節內容是sv里的剩余語法,task,function,automatic

一:procedural statement

1:新操作符

  1)     i++,++i,i--,--i     同c語言,但易出現race現象。

  2)     ==?,!=?    如:a==?b  ,x與z只能出現在右側,即b的值有x或者z

  3)    inside  用於值的范圍

      

2:強制轉換

  1)數據類型強制轉換

    通過賦值的方式,例如

    longint a,y;

    real r;

    y=a+longint(r);

  2)位寬強制轉換

    

  在要處理的數據前面加上要擴展位寬值,如16‘

  3)符號位強制轉換

  將無符號數轉化為有符號數,將有符號數轉化為無符號數

  signed'(expression)   unsigned'(expression)

3: 循環

  1)for 

    verilog中,循環體內的變量需要在循環體外聲明,sv里,可在循環體內聲明變量,這種變量是local的,在循環體外看不見。若在循環體內外同時聲明同一變量,則互不干擾。

  2)do while   sv里增加的循環,verilog里沒有。

  3)case

    增加unique,priority(優先級)選項;

二:function

1:主要概念

  不消耗時間;不帶時序,function里不能包含延時信息,@,wait等時間信息關鍵字;

  由於task可以帶時序,所以規定function不能調用task;

2:格式

  function [range] function_name; //[range] 指返回值function_name的類型

    parameters

    input declaration

    reg declaration

    --code body --

  endfunction

3: void function

  不返回值;在verilog里,function一定返回值,且返回的值是function的名字。

三:task

1:基本概念

  消耗時間,含有輸入輸出雙向端口;可含delay,timing,event;

2:格式

  task task_name

    parameter

    input dedclarations

    output declarations

    reg declaration

    --code body--

  endtask

3: task與function內部變量是靜態變量,在不同地方對同一個變量賦值會產生race,需要注意

四:sv里task與function增加點

1:不需要加begin...end

2:添加return,直接退出函數

3:  function增加了void function

  function void fill_packet(input logic[63:0] data_in,output packet_t data_out);

    data_out.data = data_in

  endfunction

  沒有輸出,通過輸出變量data_out輸出

4:在verilog里function只有input,沒有output,返回值就是函數值;但在sv里,function增加了output,inout變量

5:參數方向類型缺省時,類型默認為logic,方向默認為input

6:引用ref

  所謂引用傳遞,就如c++里面的指針,也就是變量的入口地址;只有automatic型task,function可以使用ref;

  傳值方式來傳遞參數,那么參數會被整體復制到其他地址,這樣消耗一定的內存和操作時間;而用ref傳值方式來傳遞參數,只是獲得參數的入口地址,操作速度快,減少內存使用

  可在ref數組前加const,使數組不變。

 五:automatic

  一般硬件里的所有對象都是靜態的;在verilog-1995,如果在多個地方調用同一個任務,本地變量是共同而且靜態分配的,為此,不同的進程相互訪問同一個值。在verilog-2001中,可以通過使用automatic關鍵字,將任務,函數和模塊聲明為自動存儲模式,這樣,仿真器就能夠對所有形式的參數和內部變量使用堆棧的形式來存儲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM