Я пытался создать микросхему SRAM в vhdl с произвольным количеством регистров и размером регистров, используя дженерики, и я почти заставил его работать, за исключением части адресации.
Чтобы создать чип SRAM произвольного размера, я начал с создания ячейки SRAM (которую я протестировал, чтобы убедиться, что она работает) со следующей картой портов.
component SRAM_Cell_vhdl
port (
IN : in std_ulogic;
Select_Chip : in std_ulogic;
Write_Enable : in std_ulogic;
Out1 : out std_ulogic
);
Универсальный чип SRAM имеет следующую карту портов:
port (
Datain : in std_logic_vector(m-1 downto 0);
address: in std_logic_vector(n-1 downto 0);
Chip_Select: in std_logic;
Output_Enable: in std_logic;
Write_Enable: in std_logic;
Out2: out std_logic_vector(m-1 downto 0)
);
Способ, которым я пытаюсь выполнить адресацию, заключается в том, что когда он генерирует SRAM, он проверяет, равен ли счетчик цикла адресу. Если это так, он запишет бит в ячейку SRAM, если нет, то не будет.
loop1: for I in 0 to n-1 generate
loop2: for J in 0 to m-1 generate
SRAM_Cell_vhdl1 : SRAM_Cell_vhdl port map
(Datain(J), Chip_Select and (I = to_integer(unsigned(address))), Write_Enable and Chip_Select, intermediate_out(I, J));
end generate loop2;
end generate loop1;
Однако при I = to_integer(unsigned(address)))
я получаю сообщение о том, что не может определить определение операции "="
. Я думал, что счетчик цикла - это целое число, и при преобразовании адреса в целое число следует сравнивать два целых числа. Другой способ, которым я думал об этом, - использовать оператор if, сравнивающий I и адрес, но я боюсь, что он не сгенерирует все необходимые ячейки SRAM.
Есть ли способ решить эту проблему?