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

Неопределенное состояние детектора фронтов, как победить?

7 минут назад, zombi сказал:

Вот, вообще не понимаю.

Схема выделения фронтов, на плис, при постоянной тактовой и постоянном входном сигнале, и при этом 12 фронтов выделяет а 13-й нет!!!

Как такое может быть.

Сам не знаю как так. 

edge_detector : process(clk)   
begin
 if(rising_edge(clk)) then
    shift_reg(0) <=  signal_in;
    shift_reg(1) <=  shift_reg(0); 
    shift_reg(2) <=  shift_reg(1);	
	shift_reg(3) <=  shift_reg(2); 
 end if;
end process edge_detector;
    all_edge <=  shift_reg(3) xor shift_reg(2);        
end Behavioral;

Уже даже так попробовал, все равно то же самое получается, ерунда какая то.

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

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


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

32 минуты назад, Nikolas72_91 сказал:

Скинь пожалуйста где про это можно почитать? Я просто про это вообще не в курсе.

Поиск по форумам по слову метастабильность:

 

Длину сдвигового регистра измените так:

signal shift_reg    : std_logic_vector(3 downto 0):=(others=>'0');

begin

  edge_detector : process(clk)   
  begin
    if(rising_edge(clk)) then
      shift_reg <= shift_reg(shift_reg'high-1 downto 0) & signal_in;            
    end if;
  end process edge_detector;

  all_edge <=  shift_reg(shift_reg'high-1) xor shift_reg(shift_reg'high);        

end Behavioral;

 

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


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

10 минут назад, Nikolas72_91 сказал:

зачем еще синхронизировать

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

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


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

Так. Давайте по-порядку.

1. Где симулируете ?

2. Какая ПЛИС применяется ?

3.Как обнаружили проблему ?

4. Какие констрейны заданы.

5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? (из-за большого пути между двумя триггерами может между ними расходиться времянка)

 

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


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

44 minutes ago, Nikolas72_91 said:

У меня входной сигнал синхронизируется с клоком

Вы уверены в этом.

Не судите строго, мне тоже интересен Ваш вопрос.

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


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

1 минуту назад, Flip-fl0p сказал:

Так. Давайте по-порядку.

1. Где симулируете ?

2. Какая ПЛИС применяется ?

3.Как обнаружили проблему ?

4. Какие констрейны заданы.

5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? (из-за большого пути между двумя триггерами может между ними расходиться времянка)

 

1) Симулирую в University Program VWF в quartus, который использует  modelsim, симулирую тут потому, что сигналы удобнее мне рисовать, чем разбираться с тест бенчами, так как постоянно приходится менять тестовые сигналы.

2)EPM240T100

3) Обнаружил проблему в реальной плис, потом начал смотреть в симуляторе сдвигая сигнал входной относительно клока, по несколько нс и вот вылезла это эта неопределенность.

4) Констейнеры не задавал, так как про них не слышал, сейчас читаю.

5) 5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? Я вообще чистый проект сделал, чтобы отладить в нем чисто детектор фронтов. Тут больше ничего нет.

2 минуты назад, zombi сказал:

Вы уверены в этом.

Не судите строго, мне тоже интересен Ваш вопрос.

Ну я код скинул на первой страничке, уже цепочку тригеров пробовал, и все равно та же проблема.

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


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

35 minutes ago, Plain said:

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

Т.е. десяток раз сумма более чем двух сигналов однозначна, а один разок нет? )

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


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

3 минуты назад, zombi сказал:

Т.е. десяток раз сумма более чем двух сигналов однозначна, а один разок нет? )

Ну так я попробовал синхронизировать выход all_edge по clk, толку то, от проблемы то это не избавило, другое дело как он там гуляет по кристалу. Пока чистый код просто детектора не работает как надо если.

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


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

13 minutes ago, Nikolas72_91 said:

Ну так я попробовал синхронизировать выход all_edge по clk, толку то, от проблемы то это не избавило,

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

Триггер шмитта разрешите по входу "Signal In" - чисто ради эксперимента

 

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


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

1 час назад, Flip-fl0p сказал:

Так. Давайте по-порядку.

1. Где симулируете ?

2. Какая ПЛИС применяется ?

3.Как обнаружили проблему ?

4. Какие констрейны заданы.

5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? (из-за большого пути между двумя триггерами может между ними расходиться времянка)

 

Добавил описание частоты в констайнерах create_clock -period 48MHz -name {clk} [get_ports {clk}]  но пока ничего не изменилось

 

53 минуты назад, zombi сказал:

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

Триггер шмитта разрешите по входу "Signal In" - чисто ради эксперимента

 

У меня и так используется триггер шмитта, это тоже не решает проблему.

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


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

Шибко большого опыта работы с плис не имею.

Я зыков не знаю, всё квадратиками на блок-схеме рисую (мне так проще).

Вот совсем недавно понадобилось SPI на MAXII реализовать внизу схемы именно выделение фронта сигнала записи.

Все процессы полностью асинхронны.

В симуляторе особо не тестировал, сразу в железе EPM570F256

Работает без нареканий.

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


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

4 часа назад, Nikolas72_91 сказал:

Добавил описание частоты в констайнерах create_clock -period 48MHz -name {clk} [get_ports {clk}]  но пока ничего не изменилось

Этого мало. Как минимум надо все асинхронные пути пометить как false_path в вашем случае - это входной сигнал.

Ещё неплохо было бы подумать над возможным дребезгом входного сигнала, нужна ли его фильтрация ?

И забудьте про временную симуляцию. Проводите функциональную. Затем правильные констрейны. И в 99% случаях заработает сразу, без всяких хитрых атрибутов и констрейнов. Вот когда не заработает стандартный вариант - тогда надо доставать бубен и шаманить, путем задавания хитрых констрейнов и атрибутов.

 

 

 

 

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


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

Я бы ещё атрибутом на сигналах синхронизатора запретил бы упаковку в SRL, только триггеры. Просто не знаю, MAXII может LUT в SRL превращать?

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


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

On 4/14/2019 at 2:56 PM, Nikolas72_91 said:

. . . . это тоже не решает проблему.

Судя по решениям, Вам главное - выделять фронт. Попробуйте на делителях понизить для этой схемы тактовую частоту.

 

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


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

58 минут назад, Serhiy_UA сказал:

Судя по решениям, Вам главное - выделять фронт. Попробуйте на делителях понизить для этой схемы тактовую частоту.

 

Все проблема решена, симулятор глючит походу при симуляции с задержками, а в коде оказалась немного другая, вычислил с осцилом и в сравнении со старым рабочим кодом. Ошибка в формуле была и из за нее все глючило. А то уже грешил на эти фронтдетекторы, а с осцилом посмотрел они нормально работают.

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


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

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

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

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

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

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

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

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

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

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