25

RAM DEPTH がパラメーターである構成可能な DPRAM を実装しています。

RAM DEPTH から ADDRESS WIDTH を決定する方法は?

私は関係 RAM DEPTH = 2 ^ (ADDRESS WIDTH) を知っています

つまり、アドレス幅 = log (基数 2) RAM の深さ。

Verilog でログ (基数 2) 関数を実装する方法は?

4

2 に答える 2

38

システム タスクは、$clog2Verilog (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は、合成可能なコードの価値よりも問題が多いということです。これにより、デザイン フローの他のツール (リンター、同等性チェッカーなど) で問題が発生しました。

于 2011-03-11T18:01:19.187 に答える