Jump to content
kt368

Задержка На Заранее Неизвестное Колличество Периодов Тактовой

Recommended Posts

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

Нужно реализовать подсчёт длительности нахождения входного сигнала в '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 (CLK'event and CLK='0') then
   if RESET='1' then
    ..............
   else
    if sample_length = 1 then
	    sample_length := 0;
	    state <= idle;
    else
	    sample_length := sample_length - 1;
    end if;
   end if;
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 уровне всё было супер. Мне нужно чтоб счётчик тактов успевал обработать как короткие входные импульсы на входе CONVERT, так и длинные, до 10000000 тактов.

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

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

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

Share this post


Link to post
Share on other sites

Можно уточнить?

Есть входные данные (от АЦП?) и ещё одни бит RDY. После снятия ресета, пока RDY стоит в единице входные данные идут в линию задержки, на выход идёт 0. Как только RDY сбрасывается в 0, на выход начинают идти данные с линии задержки.

Это требуется реализовать?

Share this post


Link to post
Share on other sites

Такой вариант. Организуется несколько счетчиков, например считающих до сотни (длинные нельзя - большая задержка)

Далее делается детектор фронтов сигнала RDY- всего три триггера. При значении 001 - обнуляются все счетчики. Далее счет. При значении 110 конец счета. Тогда синтез будет не много занимать логики и в то же время сможет отрабатывать RDY длительностью от двух периодов тактовой частоты.

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...