研究员SO用户,VHDL状态机不循环
我编程我的ADC(其被安装在连接到的Spartan-3 FPGA板面包板ADC0804)。现在,我正在使用此ADC为我的湿度传感器提供数字输出。 ADC输出一个8位数值,我在FPGA板上的LED上显示。
现在,我正在写这样的状态机器,即使在改变湿度级别时,ADC始终会继续保持输出值。但就目前的实现而言,尽管我正在循环回到第一个状态,但我并没有获得连续的值。我一次只能得到一个8位值(I.E .;我必须一直按住重置按钮来更新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”,我循环回到开始(这样我就可以继续保持读数值的状态转移),但不知何故,我不认为这是工作。任何人都可以提供一些关于如何解决这个问题的帮助?
快速修辞问题:1)你是否陷入了CONVERT,因为INTR从未被断言过? 2)你的密歇根大学是否会因为你的重置没有被消除而掉进杂草? (你提到了一个复位*按钮*) – wjl
嗨,INTR是一个信号,一旦转换完成,由ADC自己声明。 至于重置按钮,我只是用它来手动更新从ADC输出8位值的LED。因此,每次按下重置按钮并改变传感器上的湿度时,LED上的值都会改变。 – Triple777er