function文,task文

# このページは,学生実験用資料として筑波大学リコンフィギュラブルコンピューティングシステム研究室のwebページで公開されていたものを,許可を得て転載したものです.


function文

function文を使うと、処理を分割することができます。

 
  function [戻り値の最上位桁: 戻り値の最小位桁] ファンクション名;
  入力ポートの宣言
  内部信号の宣言
  処理
  endfunction

または

 
  function [戻り値の最上位桁: 戻り値の最下位桁] ファンクション名(入力ポート,...,入力ポート);
  処理
  endfunction
    

functionを接続するためには、以下のように記述します。

 
  信号 = ファンクション名(信号,信号,...,信号);
    

以下に例を示します。

 
  wire [3: 0] conter;
  wire [1: 0] msb = getMSB(counter);

  // 最上位桁を取得
  function [1: 0] getMSB(input [3:0] in);
  begin
    case(in)
    4'b1xxx: getMSB = 2'd4;
    4'b01xx: getMSB = 2'd3;
    4'b001x: getMSB = 2'd2;
    4'b0001: getMSB = 2'd1;
    default: getMSB = 2'd0;
    endcase
  end
  endfunction
    

task文

task文を使うと、処理を分割することができます。上位モジュールの信号にアクセスすることができます。

 
  task タスク名;
  入出力ポートの宣言
  信号の宣言
  処理
  endtask

または

 
  task タスク名 (入出力ポート,...,入出力ポート);
  信号の宣言
  処理
  endtask

taskを接続するためには、以下のように記述します。

 
  タスク名(信号,信号,...,信号);
    

以下に例を示します。


  reg [1: 0] signal, delayed_signal;

  ...
  always @(posedge clock) begin
    delay();
  end

  ...
  // signalを遅延させて、delay_signalへ代入
  task delay;
  reg [1: 0] queue[1: 0];
  begin
    delayed_signal <= queue[0];
    queue[0] <= queue[1];
    quepe[1] <= signal;
  end
  endtask

function文とtask文の違い


戻る