Последние два дня я боролся с этой проблемой. Я хочу, чтобы data_out отправил «111» в этом случае, увидев, как вся память заполнена «1». Я покажу код, а затем сделать вопрос более точно:VHDL: преобразование std_logic_vector в целое число (работает в симуляции, а не на практике)
entity tile_library is
Port (
data_out : out std_logic_vector(2 downto 0);
data_in : in std_logic_vector(5 downto 0);
clk : in std_logic);
end tile_library;
architecture Behavioral of tile_library is
type memory_type is array (0 to 63) of std_logic_vector(255 downto 0);
signal memory : memory_type := (others=> (others=>'1'));
signal something_to_convert : std_logic_vector(5 downto 0) := "000000";
begin
process(clk) begin
if rising_edge(clk) then
if memory(to_integer(unsigned(data_in)))(5) = '1' then
data_out <= "111";
else
data_out <= "000";
end if;
end if;
end process;
end Behavioral;
Если я заменяю
if memory(to_integer(unsigned(data_in)))(5) = '1' then
с
if memory(to_integer(unsigned(something_to_convert)))(5) = '1' then
я получаю "111" в качестве выходного сигнала на моей NEXYS 3 карты ,
Это заставляет меня думать, что data_in не то, что должно быть.
Поэтому я покажу вам код, дающий data_in к tile_library в моих тестах:
entity tile_memory is
Port (
data_out : out std_logic_vector(5 downto 0);
clk : in std_logic);
end tile_memory;
architecture Behavioral of tile_memory is
begin
process(clk)
begin
if rising_edge(clk) then
data_out <= "000000";
end if;
end process;
end Behavioral;
Для дальнейшей путаницы, я мог бы добавить, что в соответствии с моделирования, я точно так же и из сигналы (которые также являются правильными, «111») с обоими if memory(to_integer(unsigned(data_in)))(5) = '1' then
и if memory(to_integer(unsigned(something_to_convert)))(5) = '1' then
. Когда я запускаю его на своей карте Nexys 3; однако они дают разные результаты.
Что я здесь делаю неправильно?
Эта строка: 'память сигнала: memory_type: = (другие => (другие => '1'));' содержит предварительную инициализацию памяти, которая может не поддерживаться в синтезе. Для диагностических целей, почему бы не передать 'data_in' напрямую, а не беспокоиться о том, что это может * быть? –
Вы не указали, какой результат был, если вы не замените. Еще хуже, что указывает @BrianDrummond. Тип памяти memory_type инициализируется всеми 256 элементами std_logic_vector, которые являются типом элемента всех 64 позиций. Его можно оптимизировать, если у вас нет способа записать в память разные значения. Это буквально неважно, был ли data_in, и это, вероятно, может быть оптимизировано и в синтезе, это всегда все «0». – user1155120