Перейти к содержанию
    

Задержка на заранее неизвестное колличество периодов тактовой

Здравствуйте!

Нужно реализовать подсчёт длительности нахождения входного сигнала в '1' (в периодах тактовой частоты), а затем в этом же процессе реализовать задержку на такое же количество периодов тактовой частоты.

Пробовал сделать подсчёт сделать так:

if (CLK'event and CLK='0') then
    if RESET='1' then
        ..............
    else
        if CONVERT = '1' then
            sample_length := sample_length +1;
        end if;
    end if;
end if;

А задержку так:

if sample_length = 1 then
    sample_length := 0;
    state <= idle;
else
    sample_length := sample_length - 1;
end if;

Весь процесс выглядит так:

MAIN: process (CLK)
variable clk_count : clk_count_type := 0;
variable sample_length : natural := 0;
  begin
	if (CLK'event and CLK='0') then
		if RESET='1' then
			state <= idle;
			DATA_RDY <= '0';
			DATA_OUT <= "0000000000";
		else
			if CONVERT = '1' then
				state <= wiat_coorect_ADC_data;
				sample_length := sample_length +1;
			end if;
			case (state) is
				when idle =>
						DATA_RDY <= '0';
						DATA_OUT <= "0000000000";
				when wiat_coorect_ADC_data =>
					if clk_count < (adc_propagation - 2) then
						clk_count := clk_count+1;
					else
						clk_count := 0;
						state <= coorect_ADC_data;
					end if;
				when coorect_ADC_data =>
					DATA_RDY <= '1';
					DATA_OUT <= DATA_IN;

					if sample_length = 1 then
						sample_length := 0;
						state <= idle;
					else
						sample_length := sample_length - 1;
					end if;
			end case;
		end if;
	end if;
  end process;

Но при этом схема приобретает устрашающе большие размеры, и при симуляции на Post-Translate уровне работа схемы неудовлетворительная, хотя на Behavioral уровне всё было супер.

Как правильно сделать такую задержку?

Если нужно, могу выложить весь проект или нужные скриншоты.

Заранее спасибо.

Изменено пользователем kt368

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем отличается описание обычного счётчика от того, что я описываю? И ещё, какой тип использовать для сигнала sample_length? integer или лучше std_logic_vector? И можно ли её сделать не сигналом, а переменной? И FIFO тут зачем?

Изменено пользователем kt368

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вдогонку: Как на VHDL в ISE объяснить что я хочу создать, допустим, асинхронный счётчик. Или синхронный.

P.S. Не пинайте сильно, только начинаю осваивать ПЛИС. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вдогонку: Как на VHDL в ISE объяснить что я хочу создать, допустим, асинхронный счётчик. Или синхронный.
Синхронный вариант вы уже описали. А асинхронный нужно описывать на структурном уровне, удобней всего с помощью generate описать последовательное соединение линейки триггеров. Например так:

  CountBit(0) <= clk;
  CountBitN   <= not CountBit;
  gCountBit : for i in 1 to CountBit'high generate
  begin
    tCountBitI : process (CountBitN, rst)
    begin
      if rst = '0' then
        CountBit(i) <= '0';
      elsif CountBitN(i-1)'event and CountBitN(i-1) = '1' then
        CountBit(i) <= not CountBit(i);
      end if;
    end process tCountBitI;
  end generate;
  count_bit(7 downto 0) <= unsigned(CountBit(8 downto 1));

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...