Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как спастись от "тычков"
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
georgy31
Пока схема делителя была собрана на рассыпухе всё было нормально. Но ПЛИСка за счёт высокого быстродействия успевает обработать тычёк. Подскажите как заставить её не реагировать на корткие всплески.
Микросхема МАХ3000.
ViKo
Цитата(georgy31 @ Apr 26 2011, 09:41) *
Подскажите как заставить её не реагировать на корткие всплески.
Микросхема МАХ3000.

Синхронный дизайн вам в помощь. Тут об этом говорено сто раз.
Mikhalych
Приведите схему, возможно регистры (DFF) на выходе делителя спасут положение
Maverick
Цитата(georgy31 @ Apr 26 2011, 09:41) *
Пока схема делителя была собрана на рассыпухе всё было нормально. Но ПЛИСка за счёт высокого быстродействия успевает обработать тычёк. Подскажите как заставить её не реагировать на корткие всплески.
Микросхема МАХ3000.

Возможные ответы Вы найдете тут или тут
Читаем все, что касается HDL описания/кодирования для синтеза.

Чем открывать Ваш файл?
Схему или HDL описанию/код в студию sm.gif
georgy31
Схема - обычный делител на три фазы.
Mikhalych
Ну у вас же сигналы 1qg0, 2qg0 и 3qg0 формируются логикой и выводятся напрямую без регистров на выходе - отсюда и "тычки"
bav
все нормально работает. "иголки" возникают между клоками - так и забейте на них. выходные же сигналы чистые!
georgy31
Цитата(bav @ Apr 26 2011, 13:51) *
все нормально работает. "иголки" возникают между клоками - так и забейте на них. выходные же сигналы чистые!

Да где же нормально? Во втором импульсе 1qg1, иголки дают два ложных срабатывания и дальше всё наперекосяк. Объясните на пальцах, как с ними боротоься. К сожалению кроме графического редактора ничего не умею. Что надо вставить, что бы проглотило эти иглы? Если последовательно воткнуть штуки четыре инвертора, сведут на нет иглы, за счёт своего собственного времени срабатывания?
iosifk
Цитата(georgy31 @ Apr 26 2011, 15:31) *
Если последовательно воткнуть штуки четыре инвертора, сведут на нет иглы, за счёт своего собственного времени срабатывания?

Нет! Компилятор их просто выкинет... И вообще так не принято в ПЛИС...
Mikhalych
Поставьте регистры после элементов XOR на выходе которых формируются сигналы 1qg0, 2qg0 и 3qg0 и снимайте эти сигналы уже с выходов этих регистров - тычков не будет
bav
Цитата(georgy31 @ Apr 26 2011, 15:31) *
Да где же нормально? Во втором импульсе 1qg1, иголки дают два ложных срабатывания и дальше всё наперекосяк. Объясните на пальцах, как с ними боротоься. К сожалению кроме графического редактора ничего не умею. Что надо вставить, что бы проглотило эти иглы? Если последовательно воткнуть штуки четыре инвертора, сведут на нет иглы, за счёт своего собственного времени срабатывания?


попробуйте на частоте в 10 раз меньше и покажите картинку того что получилось.
Mikhalych
И с какой целью инвертировался тактовый сигал CLK для первых трех триггеров DFF ?
bav
и еще вопрос - что является выходом?
georgy31
Цитата(Mikhalych @ Apr 26 2011, 15:39) *
Поставьте регистры после элементов XOR на выходе которых формируются сигналы 1qg0, 2qg0 и 3qg0 и снимайте эти сигналы уже с выходов этих регистров - тычков не будет

Как выглядят эти регистры? Я уже всю библиотеку там пробовал, лучше не становится.

Цитата(Mikhalych @ Apr 26 2011, 15:51) *
И с какой целью инвертировался тактовый сигал CLK для первых трех триггеров DFF ?

Тактовый сигнал должен разделиться на три симметричные фазы сдвинутые на 120 градусов. На выходе должен получиться трёхфазный меандр частотой 33 кгц.
Mikhalych
например сигнал 3qg7 снимается у вас с выхода DFF - поставьте такойже DFF перед 3qg0
georgy31
Цитата(Mikhalych @ Apr 26 2011, 16:01) *
например сигнал 3qg7 снимается у вас с выхода DFF - поставьте такойже DFF перед 3qg0

Это первое что я сделал, но результат нулевой

Может можно как то поумнее разбить сигнал на три фазы? Я как дилетант только так смог.
bav
Код
module div_3
  (
  clk,
  q1,
  q2,
  q3
  )
  input    clk;
  output  q1;
  output  q2;
  output  q3;
  
  reg   q1;
  reg   q2;
  reg   q3;
  
  reg [1:0] count;
  
  always @(posedge clk)
  begin
   if(count == 2)
      count <= 0;
   else
       count <= count + 1;

   case(count)
   0: {q1, q2, q3} <= 3'b001;
    1: {q1, q2, q3} <= 3'b010;
    2: {q1, q2, q3} <= 3'b100;

  end
endmodule


как-то так?
iosifk
Цитата(bav @ Apr 26 2011, 16:30) *
как-то так?


"Только трошечки не так"...
Делаем счетчик. С его выходов подаем сигналы на дешифратор. Делаем 6 импульсов. Далее каждую пару подаем на синхронный R-S триггер... По S входу триггер устанавливается, по R - сбрасывается... Гарантированно никаких иголок...

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


Либо статический автомат на 3 состояния...
Либо делаем в ПЛИС микропроцессор и на его порте, программно...
Либо...
Ну и так далее...
georgy31
Большое, человеческое СПАСИБО! Буду пробовать.
bav
Цитата(iosifk @ Apr 26 2011, 16:43) *
"Только трошечки не так"...
Делаем счетчик. С его выходов подаем сигналы на дешифратор. Делаем 6 импульсов. Далее каждую пару подаем на синхронный R-S триггер... По S входу триггер устанавливается, по R - сбрасывается... Гарантированно никаких иголок...

тогда возникает вопрос: откуда (в приведенной реализации) возникнут на выходе иголки?

Цитата(georgy31 @ Apr 26 2011, 16:44) *
Большое, человеческое СПАСИБО! Буду пробовать.

Вы писали, что должен получиться меандр с частотой 33 кГц. посмотрите, в какой частотной области симулируете...
iosifk
Цитата(bav @ Apr 26 2011, 17:11) *
тогда возникает вопрос: откуда (в приведенной реализации) возникнут на выходе иголки?

Виноват, не увидел, что там на выходе регистры...
Но по жизни, если разряды счетчика перекидываются не одновременно, то "case" отработает это в лучшем виде. И временную диаграмму иногда будет трясти... Так что так, как у Вас приведено, лучше все же не делать...
Mikhalych
Там комбинационная логика в always @(posedge clk) блоке... и выходы q объявлены как регистры - так что "тычков" не будет sm.gif единственое что там не так - это коэф. заполнения - он будет 1/3 , а не 1/2 как требовалось sm.gif
bav
Цитата(iosifk @ Apr 26 2011, 17:22) *
Виноват, не увидел, что там на выходе регистры...
Но по жизни, если разряды счетчика перекидываются не одновременно, то "case" отработает это в лучшем виде. И временную диаграмму иногда будет трясти... Так что так, как у Вас приведено, лучше все же не делать...

на счет case - это уже будет зависеть от синтезатора - как раскидает, так и будет sm.gif
а на счет трясти... не очень уверен. здесь не требуется частота 100 МГц!?

Цитата(Mikhalych @ Apr 26 2011, 17:26) *
единственое что там не так - это коэф. заполнения - он будет 1/3 , а не 1/2 как требовалось sm.gif


не увидел
Код
.....
reg [2:0] count;
  
  always @(posedge clk)
  begin
   if(count == 5)
      count <= 0;
   else
       count <= count + 1;

   case(count)
    0: {q1, q2, q3} <= 3'b001;
     1: {q1, q2, q3} <= 3'b011;
     2: {q1, q2, q3} <= 3'b010;
     3: {q1, q2, q3} <= 3'b110;
     4: {q1, q2, q3} <= 3'b100;
      5: {q1, q2, q3} <= 3'b101;
  ...
georgy31
Частота входного клока 12 мгц. Но почему то из 10 раз, где то один-два, на выходе получается вместо 36кгц, 18 кгц. Это глюк частотомера, или где то ошибка?
Mikhalych
Цитата(georgy31 @ Apr 26 2011, 18:44) *
Частота входного клока 12 мгц. Но почему то из 10 раз, где то один-два, на выходе получается вместо 36кгц, 18 кгц. Это глюк частотомера, или где то ошибка?


Чтобы получить 36кГц при использовании предложенной bav реализации - входная частота должна быть 36кГц*6 = 216кГц.... вопрос: откуда 12 МГц?
georgy31
Уважаемые спецы. Вот написал как советовали. Выдаёт при компиляции сразу 7 ошибок. Подскажите что не так, поскольку сам я всё время творил в графичеком редакторе, а здеь не в зуб ногой.
gutzzz
процессы забыли - always @()
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.