補足 - parameter値のビット幅の求め方

[] [] []


ある値をparameter化したとき、それに伴って値のビット幅もparameter化しなければならないが、次のような定数関数clog2を定義して使えばよい。

parameter A = 640;

localparam WA = clog2(A);  // 10 = clog2(640)

/* clog2(val) - bit width of val */

function integer clog2(input[31:0] val);

    begin

    val = val - 1;

    for(clog2=0; val>0; clog2=clog2+1) val = val >>1;

    end

endfunction

ちなみSytemVerilogではシステム関数として用意されている。

parameter A = 640;

localparam WA = $clog2(A);


[] [] []