0

array のダイナミックレンジを使用したいので、「N」を使用して入力ベクトル信号を整数に変換します。特定の受信ポート「サイズ」を使用するとエラーが発生しますが、固定ベクトルは完全な出力を生成します。

architecture EXAMPLE of Computation is

signal size :std_logic_vector (7 downto 0);

process (ACLK, SLAVE_ARESETN) is

variable N: integer:=conv_integer  ("00000111") ;  ---WORKING

--variable N: integer:=conv_integer  (size) ; -- Not working
type memory is array (N downto 0 ) of std_logic_vector (31 downto 0 ); 

variable RAM :memory; 

このタイプのコーディングを行う唯一の理由は、できるだけ多くのデータを FPGA に送信することです。vivado で DMA 経由で DDR からカスタム IP にデータを送信する必要があるため、100 MB を超える場合があります。上記のように間違った方法で実装しようとしている場合は、親切に案内してください。

4

2 に答える 2

2

VHDL ではできません。あなたのコードによってどのようなハードウェアが生成されますか? あなたが知らなければ、シンセサイザーもそうしません。

この種のことを行う方法はN、サポートしたい最大値に設定し、ロジックで使用sizeしてロジックを適切に制御することです。より多くの情報なしでより多くのポインターを与えることは困難ですが、例として、カウンターを使用して RAM をアドレス指定し、それが より大きい場合にリセットすることができますsize

アップデート

これが反例です。操作中に変化しないようにする必要がありますsize。そうしないと、不明な状態に陥ります。実際のデザインでは、正しい動作を確保するためにリセット状態が必要です。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity example is
port (
    clk : std_logic;
    rst : in std_logic;
    size : in unsigned(7 downto 0);
    wr : in std_logic;
    din : in std_logic_vector(31 downto 0)
);
end entity;

architecture rtl of example is
    signal counter : unsigned(7 downto 0);

    type ram_t is array(0 to 255) of std_logic_vector(31 downto 0);
    signal ram : ram_t;
begin

    RAM_WR: process(clk)
    begin
        if rising_edge(clk) then
            if rst = '1' then
                counter <= (others => '0');
            else
                if wr = '1' then
                    ram(to_integer(counter)) <= din;

                    if counter = size then
                        counter <= (others => '0');
                    else
                        counter <= counter + 1;
                    end if;
                end if;
            end if;
        end if;
    end process RAM_WR;

end architecture rtl;
于 2015-05-25T05:25:03.230 に答える
0

プロセスではジェネリックな配列制約しか持てないと思います。そうしないと、コンパイラは詳細化できません。

関数またはプロシージャでは、真に可変の配列境界を持つことができます。

于 2015-05-25T04:53:52.890 に答える