RAM DEPTH がパラメーターである構成可能な DPRAM を実装しています。
RAM DEPTH から ADDRESS WIDTH を決定する方法は?
私は関係 RAM DEPTH = 2 ^ (ADDRESS WIDTH) を知っています
つまり、アドレス幅 = log (基数 2) RAM の深さ。
Verilog でログ (基数 2) 関数を実装する方法は?
RAM DEPTH がパラメーターである構成可能な DPRAM を実装しています。
RAM DEPTH から ADDRESS WIDTH を決定する方法は?
私は関係 RAM DEPTH = 2 ^ (ADDRESS WIDTH) を知っています
つまり、アドレス幅 = log (基数 2) RAM の深さ。
Verilog でログ (基数 2) 関数を実装する方法は?
システム タスクは、$clog2
Verilog (IEEE Std 1800-2005) の SystemVerilog 拡張機能に追加されました。これは、底が 2 の対数の上限の値を持つ整数を返します。DEPTH は 2 の累乗である必要はありません。
module tb;
parameter DEPTH = 5;
parameter WIDTH = $clog2(DEPTH);
initial begin
$display("d=%0d, w=%0d", DEPTH, WIDTH);
#5 $finish;
end
endmodule
シミュレーションを実行すると、次のように表示されます。
d=5, w=3
しかし、私は をサポートする合成ツールを知りません$clog2
。コードを合成する必要がある場合は、function
. これは IEEE 1364-2001 Std からコピーされたものですが、他のバージョンが Web に出回っています。
function integer clogb2;
input [31:0] value;
begin
value = value - 1;
for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) begin
value = value >> 1;
end
end
endfunction
私の経験では、 を使用することfunction
は、合成可能なコードの価値よりも問題が多いということです。これにより、デザイン フローの他のツール (リンター、同等性チェッカーなど) で問題が発生しました。