вернее она работает( в Квартусе ), а на железке работает раза с десятого сброса, а когда и первого
[code]
PROCESS ( clk, reset )
VARIABLE delay : STD_LOGIC_VECTOR(1 downto 0);
BEGIN
IF reset = '0' THEN
adc_start <= '1';
adc_cs <= '1';
adc_read <= '1';
adc_state <= STATE_ADC_IDLE;
delay := "00";
ELSIF clk'EVENT AND clk = '1' THEN
CASE adc_state IS
WHEN STATE_ADC_IDLE =>
IF adc_busy = '0' THEN
adc_start <= '0';
adc_cs <= '1';
adc_read <= '1';
adc_state <= STATE_ADC_START;
END IF;
WHEN STATE_ADC_START =>
IF adc_busy = '1' THEN
adc_start <= '1';
adc_cs <= '1';
adc_read <= '1';
adc_state <= STATE_ADC_RUN;
END IF;
WHEN STATE_ADC_RUN =>
IF adc_busy = '0' THEN
adc_start <= '1';
adc_cs <= '0';
adc_read <= '0';
adc_state <= STATE_ADC_READY;
END IF;
WHEN STATE_ADC_READY =>
display_2 <= ShowHex( adc_data( 7 downto 4 ) );
display_3 <= not ShowHex( adc_data( 3 downto 0 ) );
adc_start <= '1';
adc_read <= '1';
adc_cs <= '1';
adc_state <= STATE_ADC_PAUSE;
WHEN STATE_ADC_PAUSE =>
delay := delay + 1;
IF delay = 3 THEN
adc_state <= STATE_ADC_IDLE;
delay := "00";
END IF;
WHEN OTHERS =>
adc_start <= '1';
adc_read <= '1';
adc_cs <= '1';
adc_state <= STATE_ADC_IDLE;
delay := "00";
END CASE;
END IF;
END PROCESS;
[/code]
сброс жмешь - все как написано, а отпускаю adc_start падает в нуль и ...
это интерфейс AD7819