Доброго времени суток, форумчане!
Совсем недавно столкнулся с проблемой диагностики причин возникновения ошибок в устойстве. Интересуе как именно должны выявляться причины этих самых ошибок?
Попытаюсь описать ситуацию:
Например, имеем устройство на ПЛИС фирмы Xilinx на котором реализована такая схема компаратора =>
Код
entity Compar_ea is
port(
CLK_INP : IN STD_LOGIC;
SRST_INP : IN STD_LOGIC;
DATA_INP : IN STD_LOGIC_VECTOR (3 downto 0) := X"0";
COMPAR_OUTP : OUT STD_LOGIC := '0';
ERROR_OUTP : OUT STD_LOGIC := '0'
);
end entity Compar_ea;
architecture Compar_arch of Compar_ea is
signal state_s : std_logic := '0';
signal data_s : std_logic_vector (3 downto 0) := X"0";
begin
compar_proc : process (CLK_INP)
begin
if (rising_edge (CLK_INP)) then
if ( SRST_INP = '1' ) then
COMPAR_OUTP <= '0';
ERROR_OUTP <= '0';
state_s <= '0';
else
data_s <= DATA_INP;
case (state_s) is
when ('0') =>
case (data_s) is
when (X"0") => COMPAR_OUTP <= '0';
when (X"F") => COMPAR_OUTP <= '1';
when others => COMPAR_OUTP <= '0'; state_s <= '1';
end case;
when ('1') => ERROR_OUTP <= '1';
end case;
end if;
end if;
end process compar_proc;
end architecture Compar_arch;
Т.е. в результате подачи на входы схемы нибла данных на выходах будет соответствующая реакция....причем их 16-и возможных вариантов ошибку (ERROR_OUTP) будут вызывать 14.
Суть состоит в том, чтобы определить причину возникновения ошибки....т.е. какая именно комбинация на входе схемы вызвала установку регистра ERROR_OUTP?
В этой ситуации, казалось бы, нужно банально считать содержимое регистра data_s в состоянии state_s = '1'. Вопрос только в том
КАК?
Чтобы иметь возможность считывать данные с регистра можно подключить к ниму ноги ПЛИС, но все замечательно когда этот регистр один единственный. А что делать когда таких регистров в проекта сотня-другая. Все ведь на ноги не выведешь...или даже если выводить последовательно - эта вся борода отжерает ресурсы ПЛИС используя матрицу соединений и др.
Может как-то можно вытянуть состояние регистра через конфигурационную память и JTAG???
Или у конфигурационной памяти и CLB односторонняя связь в сторону CLB?
Эта проблема актуальна для скрытых багов программного обеспечения. Т.е. работало наше устройство...и через год возникла комбинация которая примвела к тому, что это устройство начало работать некорректно (ведь идеального кода не бывает

). Вот его изъяли и принесли Вам для выяснения причин. Как кто предусматривает сбор диагностической информации в своих устройствах на ПЛИС?
Насколько информативными они должны быть, чтобы определить причины ошибки?