SO用户,
我正在对我的 ADC 进行编程(ADC0804 安装在连接到 Spartan-3 FPGA 板的面包板上)。现在,我正在使用这个 ADC 为我的湿度传感器提供数字输出。ADC 输出一个 8 位值,我显示在 FPGA 板上的 LED 上。
现在,我正在以这样一种方式编写状态机,即使我改变湿度水平,ADC 也将始终继续保持输出值。但就我目前的实现而言,即使我循环回到第一个状态,我也没有得到连续的值流。我一次只能得到一个 8 位的值(IE;我必须不断按下重置按钮来更新 LED 上显示的值)。以下是我的代码。
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”中,我循环回到开头(这样我可以在状态转换时不断读取值),但不知何故,我认为这不起作用。任何人都可以就如何解决这个问题提供一些帮助吗?