У меня есть этот кодКак инициализировать std_logic_vector?
--RAM module
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.numeric_std.all;
entity RAM is
generic(
address_length, data_length : integer);
port(
addr : in std_logic_vector(address_length-1 downto 0);
dat : inout std_logic_vector(data_length-1 downto 0);
rd, wr, en : in bit);
end entity RAM;
architecture RAM_impl of RAM is
type mem is array(2**address_length-1 downto 0) of std_logic_vector(data_length-1 downto 0);
begin
process(rd, wr, en)is
variable cont : mem;
begin
if(en = '1')then
if(wr = '1' and rd = '0')then
cont(to_integer(unsigned(addr))) := dat;
end if;
if(rd = '1' and wr = '0')then
dat <= cont(to_integer(unsigned(addr)));
end if;
end if;
end process;
end architecture RAM_impl;
--Test module
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.numeric_std.all;
entity Example4RAM is
end entity Example4RAM;
architecture Tester of Example4RAM is
signal rd, wr, en : bit;
signal str : std_logic_vector(15 downto 0);
signal ext : std_logic_vector(7 downto 0);
begin
module : entity work.RAM(RAM_impl)
generic map(
address_length => 16,
data_length => 8)
port map(str, ext, rd, wr, en);
tt : process is
begin
str <= X"0001";
ext <= "00000000";
rd <= '0'; wr <= '1';
wait for 5 ns;
en <= '1';
wait for 5 ns;
rd <= '0'; wr <= '0';
wait for 10 ns;
rd <= '1'; wr <= '0';
end process;
end architecture Tester;
Когда я запускаю моделирования на этом RAM модуль вектора ул инициализирует хорошо, но внутр вектор остается инициализирован. В RAM-модуле str находится в векторе, а ext - вне вектора. Это как-то проблема, и кто-нибудь знает решение? (Я изменил источник со вчерашнего дня, но он не работает)
Не видя сущности RAM (и, возможно, архитектуры), мы можем только догадываться в темноте. Если второй параметр (почему бы не использовать именованную ассоциацию?) - это «выход» или «inout», ответ, вероятно, прямо там. –
Брайан намекает, что если ext является подключением к данным в ОЗУ и имеет связанный с ним драйвер (например, режим inout), для ext (RAM, process tt) есть два драйвера. Эффективное значение ext - это разрешение двух драйверов. Все разрешения «U и все» 0 для всех «U», std_logic_vector - это разрешенный тип или подтип (-2008). Без описания дизайна ОЗУ трудно предсказать, как добиться успеха, если вы не будете приводить ext во все «Z» в процессе tt до чтения ОЗУ и, возможно, также не в ОЗУ, когда rd не соответствует действительности. – user1155120
Отредактированный код выше, проверьте ОЗУ. Я новичок в VHDL, поэтому любое предложение будет полезно. – Dejan