У меня есть одна программа verilog, которую я не могу изменить, и ей нужно 16 входов и 1 выход. Мне удалось создать оболочку в VHDL, и все работает, как ожидалось, если я предоставлю входные данные извне.
Я хочу иметь возможность изменить последний ввод оболочки (pi16
) внутри, и у меня есть следующий код для оболочки:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity DD_Wrapper is
port(
pi00 : in STD_LOGIC;
pi01 : in STD_LOGIC;
pi02 : in STD_LOGIC;
pi03 : in STD_LOGIC;
pi04 : in STD_LOGIC;
pi05 : in STD_LOGIC;
pi06 : in STD_LOGIC;
pi07 : in STD_LOGIC;
pi08 : in STD_LOGIC;
pi09 : in STD_LOGIC;
pi10 : in STD_LOGIC;
pi11 : in STD_LOGIC;
pi12 : in STD_LOGIC;
pi13 : in STD_LOGIC;
pi14 : in STD_LOGIC;
pi15 : in STD_LOGIC;
--pi16 : in STD_LOGIC;
po0 : out STD_LOGIC
);
end DD_Wrapper;
architecture Behavioral of DD_Wrapper is
component DD
port (
pi00 : in STD_LOGIC;
pi01 : in STD_LOGIC;
pi02 : in STD_LOGIC;
pi03 : in STD_LOGIC;
pi04 : in STD_LOGIC;
pi05 : in STD_LOGIC;
pi06 : in STD_LOGIC;
pi07 : in STD_LOGIC;
pi08 : in STD_LOGIC;
pi09 : in STD_LOGIC;
pi10 : in STD_LOGIC;
pi11 : in STD_LOGIC;
pi12 : in STD_LOGIC;
pi13 : in STD_LOGIC;
pi14 : in STD_LOGIC;
pi15 : in STD_LOGIC;
pi16 : in STD_LOGIC;
po0 : out STD_LOGIC
);
end component;
-- Trying to modify input pi16
signal pi16_new : std_logic := '1';
begin
DD_x : DD
port map (
pi00 => pi00,
pi01 => pi01,
pi02 => pi02,
pi03 => pi03,
pi04 => pi04,
pi05 => pi05,
pi06 => pi06,
pi07 => pi07,
pi08 => pi08,
pi09 => pi09,
pi10 => pi10,
pi11 => pi11,
pi12 => pi12,
pi13 => pi13,
pi14 => pi14,
pi15 => pi15,
pi16 => pi16_new,
po0 => po0
);
-- Trying to modify input pi16
process is
begin
pi16_new <= pi16_new xor '1';
wait for 500 ms;
end process;
end Behavioral;
Я использую Vivado для имитации программы, и Behavioral Simulation
дает мне правильные результаты, но если я запускаю Post-Synthesis Functional Simulation
, вывод po0
всегда остается неизвестным (X
). Я также попытался прошить код в ПЛИС, и вывод кажется случайным.
Почему это происходит? Я не могу найти ошибку.