Товарищи пользователи SO,
Я программирую свой АЦП (ADC0804, который установлен на макетной плате, подключенной к плате Spartan-3 FPGA). Теперь я использую этот АЦП для обеспечения цифрового выхода для моего датчика влажности. АЦП выводит 8-битное значение, которое я показываю на светодиодах на плате FPGA.
Теперь я пишу конечный автомат таким образом, чтобы АЦП всегда продолжал выводить значения, даже когда я меняю уровень влажности. Но что касается текущей реализации, у меня есть, хотя я возвращаюсь к первому состоянию, я не получаю непрерывный поток значений. Я получаю только одно 8-битное значение за раз (т.е. мне нужно постоянно нажимать кнопку сброса, чтобы обновить значение, отображаемое на светодиодах). Ниже приведен мой код.
FSM_NEXT_STATE_INIT : PROCESS (CLK, RST)
BEGIN
IF (RST = '1') THEN
CURR_STATE <= STARTUP;
ELSIF (CLK'EVENT AND CLK = '1') THEN
CURR_STATE <= NEXT_STATE;
END IF;
END PROCESS;
START_FSM : PROCESS (CURR_STATE, INTR)
BEGIN
CASE CURR_STATE IS
WHEN STARTUP =>
NEXT_STATE <= CONVERT;
WR <= '0';
READ_DATA <= '0';
WHEN CONVERT =>
IF (INTR = '0') THEN
NEXT_STATE <= READ1;
ELSE
NEXT_STATE <= CONVERT;
END IF;
WR <= '1';
READ_DATA <= '0';
WHEN READ1 =>
NEXT_STATE <= READ2;
WR <= '1';
READ_DATA <= '1';
WHEN READ2 =>
NEXT_STATE <= STARTUP;
WR <= '1';
READ_DATA <= '0';
WHEN OTHERS =>
NEXT_STATE <= STARTUP;
END CASE;
END PROCESS;
PROCESS (CLK, RST)
BEGIN
IF (RST = '1') THEN
Y <= (OTHERS => '0');
ELSIF (CLK'EVENT AND CLK = '1') THEN
IF (READ_DATA = '1') THEN
Y <= D7&D6&D5&D4&D3&D2&D1&D0; --Concatenate the 8-bit ADC output
END IF;
END IF;
END PROCESS;
Вы заметите, что в состоянии «READ2» я возвращаюсь к началу (чтобы я мог непрерывно читать значения по мере перехода состояний), но почему-то я не думаю, что это работает. Может ли кто-нибудь помочь в решении этой проблемы?