2010年8月20日金曜日

Verilog-HDL function記述

・Verilog HDLで組み合わせ回路を記述するのにifやcase文を使用する場合、ファンクションとして別に定義する必要がある。
・C言語でいう関数に相当する。
・always記述も可能。
・ファンクション内で一時的に使用するローカル信号はreg宣言したものを使用する。

・ファンクションの入力信号を省略すると大変!
・入力信号と返却値のビット幅には要注意!
・引数の記述順はfunction内での入力信号定義順!

//呼び出し側
assign out = mux(sel,in0,in1,in2,in3);//入力信号全て記述のコト!!

//マルチプレクサ(case文記述)
function [3:0] mux;
 input [1:0] sl;
 input [3:0] d0,d1,d2,d3;
  begin
  case(sel)
   0         : mux=d0;
   1         : mux=d1;
   2         : mux=d2;
   3         : mux=d3;
   default : mux=4'bxxxx;
  endcase
 end
endfunction

//マルチプレクサ(if文記述)
function [3:0] mux;
 input [1:0] sl;
 input [3:0] d0,d1,d2,d3;
 begin
  if(sel==0)       mux=d0;
  else if(sel==1) mux=d1;
  else if(sel==2) mux=d2;
  else if(sel==3) mux=d3;
  else                 mux=4'bxxxx;
 end
endfunction

0 件のコメント:

コメントを投稿