AR# 44586

|

13.2 Verilog $clog2 関数が正しくインプリメントされていない

説明

$clog2 関数が底を 2 とする対数の上限ではなく、底を e とする対数 (自然対数) の上限を返します。

$clog2 関数を使用する Verilog コード例は次のとおりです。

module tb;
parameter A = $clog2(325);
endmodule

13.2 XST で上記の Verilog が合成されると、 log2(325) の上限である 9 ではなく、A の 6 が生成されます。

ソリューション


ISE 13.2 の XST パーサーは Verilog-2001 をサポートしており、$clog2 関数の正しい出力を生成することができません。数学関数 $clog2 は Verilog-2005 (IEEE 1364-2005) から統合されていました。それ以前は clog2 は Verilog 2001 では定数関数としてインプリメントできます。正しい出力を得るために、$clog2 関数の代わりに使用できるサンプル ファンクションのサンプルは次のとおりです。

function integer clog2;
input integer value;
begin
value = value-1;
for (clog2=0; value>0; clog2=clog2+1)
value = value>>1;
end
endfunction

上記のサンプル Verilog コードでこの関数を使用する場合は次のようになります。

module tb;
parameter A = clog2(325);

function integer clog2;
input integer value;
begin
value = value-1;
for (clog2=0; value>0; clog2=clog2+1)
value = value>>1;
end
endfunction
endmodule

この問題は 14.1 XST パーサーで修正されています。また、ザイリンクス ツールで Verilog-2005 系列の System Verilog がサポートされ、LRM にある高度関数はすべて含まれる予定です。
AR# 44586
日付 12/15/2012
ステータス アクティブ
種類 一般
ツール
People Also Viewed