Я пытаюсь читать и писать из созданного 2D-массива: М. Кажется, он работает, но первые операции чтения всегда терпят неудачу. Я всегда заполняю массив перед чтением.Чтение и запись из 2D-массива в VHDL
Иногда, когда я читаю, там будет ценность, которая никогда не вводилась. Я довольно новичок в программировании VHDL, но мой 2D-массив правильный? Правильно ли я обращаюсь к нему и пишу вам?
Когда EN и WEN 1, я хочу написать. Когда EN равно 1, а WEN равно 0, я хочу прочитать.
Значения от data_in идут в массив. И когда я «читаю» их, они выводятся в data_out.
TIA, и если я не предоставил достаточную информацию, пожалуйста, дайте мне знать.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY data_mem IS
PORT(
clk : IN STD_LOGIC;
addr : IN UNSIGNED(7 DOWNTO 0);
data_in : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
wen : IN STD_LOGIC;
en : IN STD_LOGIC;
data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END data_mem;
ARCHITECTURE Description OF data_mem IS
signal tOUT : STD_LOGIC_VECTOR(31 DOWNTO 0);
type array2D is array (7 downto 0,31 downto 0) of std_logic;
signal M : array2D;
BEGIN
PROCESS(clk)
Begin
if (falling_edge(clk)) then
if (en = '1') then
if (wen = '0') then
--Read. data_out = M[addr]
for i in 0 to 31 loop
tOUT(i) <= M(to_integer(addr),i);
end loop;
else
--Write M[addr] <= data_in && data_out = 0
for i in 0 to 31 loop
M(to_integer(addr),i) <= data_in(i);
end loop;
tOUT <= (tOUT'range => '0');
end if;
else
--Function: N/A data_out = 0
tOUT <= (tOUT'range => '0');
end if;
end if;
END PROCESS;
data_out <= tOUT;
END Description;
Поскольку вы только когда-либо доступ целые слов, ваш код будет значительно проще, если вы сделаете вашу декларацию типа 'типа array2D является массив (7 Downto 0) из std_logic_vector (31 до 0). Вам не придется делать это для циклов, чтобы вытащить каждое 32-битное слово таким образом. Тот же эффект, хотя, возможно, и не технически «2D-массив». – fru1tbat
Это, как говорится, я не вижу ничего плохого в коде, который вы отправили. Это может быть какой-либо код более высокого уровня, который вы не разместили. – fru1tbat