仲間のSOユーザー、
ADC(Spartan-3 FPGAボードに接続されたブレッドボードにマウントされているADC0804)をプログラミングしています。現在、このADCを使用して、湿度センサーにデジタル出力を提供しています。ADCは、FPGAボードのLEDに表示している8ビット値を出力します。
現在、湿度レベルを変更してもADCが常に値を出力し続けるようにステートマシンを作成しています。しかし、現在の実装に関しては、最初の状態にループバックしていますが、値の連続ストリームを取得していません。一度に取得できる8ビット値は1つだけです(つまり、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」では、最初にループバックしていることに気付くでしょう(状態が遷移するときに値を継続的に読み取り続けることができるように)が、どういうわけかこれは機能していないと思います。誰かがこれを解決する方法についていくつかの支援を提供できますか?