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

счетчик по типу ИЕ6

Не подскажите как сделать счетчик, чтобы считал по переднему фронту на входе данных.

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


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

А что за "вход данных" у простого счетчика? Синхронные схемы для выделения фронта импульса делаются примерно так.

post-3882-1192130094_thumb.jpg

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


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

А что за "вход данных" у простого счетчика?

 

Ну не данных, а просто тогда вход.

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


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

А что за "вход данных" у простого счетчика? Синхронные схемы для выделения фронта импульса делаются примерно так.

Оп-па. А откуда рисунок? Мне казалось, что для синхронизации со схемой нужно два триггера, а у уж с помощью третего выделяется фронт. Это что же, я постоянно лишние триггера лепил? :)

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


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

Оп-па. А откуда рисунок? Мне казалось, что для синхронизации со схемой нужно два триггера, а у уж с помощью третего выделяется фронт. Это что же, я постоянно лишние триггера лепил? :)

Код или схему можно.

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


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

Мне казалось, что для синхронизации со схемой нужно два триггера, а у уж с помощью третего выделяется фронт. Это что же, я постоянно лишние триггера лепил? :)

Если схема полностью синхронная, то DPOUT на вход разрешения счета подается.

Оп-па. А откуда рисунок?

Если вы подразумеваете вопрос в какой среде рисовалось, то отвечаю - Xilinx Foundation 4.2i. Синхронный 4-х разрядный счетчик внешнего сигнала я бы реализовывал так.

 

А вот так выглядит примитив двухразрядного счетчика с асинхронным сбросом.

post-3882-1192133043_thumb.jpg

post-3882-1192133276_thumb.jpg

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


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

Код или схему можно.

 

А задний фронт как выделить?

 

 

 input Data;
input clk;

reg Data_Sync0, Data_Sync1, Data_EdgeDetect;
wire Data_PosEdge, Data_NegEdge;

always @(posedge clk) begin
   {Data_EdgeDetect, Data_Sync1, Data_Sync0}={Data_Sync1, Data_Sync0, Data};
end

assign Data_PosEdge = (Data_Sync1 && !Data_EdgeDetect);
assign Data_PosEdge = (!Data_Sync1 && Data_EdgeDetect);

 

Только тут сигнал проходит через два триггера, а уже потом из него фронт выделяется. Если делать через один триггер, то, соответственно, Data_Sync0 надо убрать.

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


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

Оп-па. А откуда рисунок? Мне казалось, что для синхронизации со схемой нужно два триггера, а у уж с помощью третего выделяется фронт. Это что же, я постоянно лишние триггера лепил? :)

 

Да нет тут лишних триггеров. Чтобы длительность DOUT была всегда кратна периоду клока, они нужны.

Иначе эта длительность будет меняться от периода к периоду.

А пички при функциональном моделировании можно и не увидеть.

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


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

А вот так выглядит примитив двухразрядного счетчика с асинхронным сбросом.

 

Блин, ведь сто раз обсуждалось.

 

Если входной сигнал синхронный по отношению к клоку - то первый триггер лишний.

Если входной сигнал, фронт которого выделяется, асинхронный, и схема работает вблизи максимальной рабочей частоты (на что полезно закладываться всегда) - то на вход нужно добавить еще один промежуточный обконстрейненный триггер. Потому что без него метастабильность первого триггера + возможно большая задержка в цепях возможно глубокой логики вплоть до разрешения счета и, возможно, перенесенная при оптимизации между дальнейшими триггерами логика, могут привести к нарушению sample time у триггеров в схеме и ее редким глюкам.

 

P.S. Вот опять задумался, как теоретически правильнее всего констрейнить синхронизирующие триггеры в FPGA. Задать в лоб большую задержку у выхода синхронизирующего триггера относительно клока, и пусть тулзы сами понимают, что не нужно на выход пихать много логики и делать тяжелые пути? Я делал по-другому, но какой вариант "самый идеальный"?

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


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

А задний фронт как выделить?

Поменять местами подключение инвертирующего и неинвертирующего входов у элемента AND2B1.

2 Oldring. Примитив счетчика не мной разрабатывался, а взят из библиотеки Xilinx Foundation, о чем, как мне казалось, не трудно догадаться по подписи справа внизу.

P.S. Насчет третьего (точнее первого в цепи) триггера я соглашусь. Просто я никогда не работал с сигналами длительностью близкой к тактовой частоте. Соответственно и не закладывал эту возможность.

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


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

Просто я никогда не работал с сигналами длительностью близкой к тактовой частоте. Соответственно и не закладывал эту возможность.

 

Речь идет не про сигналы, близкие к тактовой частоте, а о тактовой частоте, близкой к предельной для данной схемы.

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


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

Приветсвую!

 

В случае когда длительность входного сигнала меньше чем период clk (а также при переходе между разными clk) удобно использовать и такую схему

 

Успехов! Rob.ris.bmp

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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