Цитата(Golikov A. @ Sep 17 2015, 11:22)

как они из памяти читаются.
Приведите кусок кода.
если правильно угадали почему не работает, то нужно описать констрейны и доделать междоменный переход
Ниже привожу полный текст модуля. Критикуйте. А лучше исправляйте. Подсказывайте.
entity MemSV_vhdl is
generic (Nbit : integer := 16;
N : integer := 65536;
BitSignal : integer := 16
);
Port ( I : in STD_LOGIC_VECTOR (BitSignal-1 downto 0);
clk : in STD_LOGIC;
reset : in STD_LOGIC;
rd : in STD_LOGIC;
DO : out STD_LOGIC_VECTOR (31 downto 0);
full : out STD_LOGIC);
end MemSV_vhdl;
architecture Behavioral of MemSV_vhdl is
type TMemory is array (0 to N-1) of std_logic_vector(BitSignal-1 downto 0);
signal Mem : TMemory;
signal Ard, Awr: std_logic_vector(Nbit-1 downto 0);
signal ce, q_thres : std_logic;
signal bufDO : std_logic_vector(2*BitSignal-1 downto 0);
signal bufI : std_logic_vector(BitSignal-1 downto 0);
begin
process (clk, Reset, rd)
begin
if clk'event and clk='1' then
bufI <= I; --просто регистр на входе
end if;
if Reset='1' then
Awr <= Conv_Std_Logic_Vector(0, Nbit); --если сброс то обнуляет счетчик адреса записи
q_thres <= '0';
else
if clk'event and clk='1' and ce='1' then
Awr <= Awr + 1;
if Awr=Conv_Std_Logic_Vector(N-1, Nbit) then
q_thres <='1';
end if;
end if;
end if;
ce <= not q_thres; --останавливаем запись когда заполниться память
full <= q_thres; --тут все и так понятно
if clk'event and clk='1' and q_thres='0' then
Mem(conv_integer(Awr))(BitSignal-1 downto 0) <= bufI; --собственно заполняем память
end if;
if Reset='1' then
Ard <= Conv_Std_Logic_Vector(0, Nbit); --при сбросе обнуляет счетчик адреса чтения
else
if rd'event and rd='1' then
Ard <= Ard + 2; --адреса преребираем через два т.к. шина PCI 32 разряда
end if;
end if;
if rd'event and rd='1' then
bufDO(15 downto 0) <= Mem(conv_integer(Ard)); --вынимаем из памяти два отсчета данных
bufDO(31 downto 16) <= Mem(conv_integer(Ard+1));
end if;
DO <= bufDO;
end process;
end Behavioral;