реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Некорректная работа схемы после смены источника входного сигнала, Quartus 2, verilog, EPM240T100C5
R2R
сообщение Sep 28 2017, 19:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-08-16
Пользователь №: 92 913



Приветствую!
Написал на верилоге модуль, осуществляющий задержку входного сигнала. Для его проверки в той же ПЛИС (EPM240T100C5) сделал модуль генератора меандра, посмотрел сигналы - все работало правильно и стабильно. Потом взял сигнал от внешнего генератора - появились баги. После нескольких попыток оптимизации кода добиться корректной работы схемы так и не удалось.

CODE
module delay
(
input wire clk,
input wire sgn,

output reg out
);

localparam phase = 10;

reg[7:0] pos_cnt = 0,
neg_cnt = 0;

always @ (posedge clk)
begin
if (sgn)
begin
pos_cnt <= pos_cnt + 1;
if (neg_cnt > phase) neg_cnt <= neg_cnt - 1;
else
begin
neg_cnt <= 0;
out <= 1;
end
end
else
begin
neg_cnt <= neg_cnt + 1;
if (pos_cnt > phase) pos_cnt <= pos_cnt - 1;
else
begin
pos_cnt <= 0;
out <= 0;
end
end
end

endmodule


Прикрепленное изображение


Сообщение отредактировал R2R - Sep 28 2017, 19:39
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 28 2017, 20:27
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 715
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(R2R @ Sep 28 2017, 22:38) *
. Потом взял сигнал от внешнего генератора - появились баги.


Два вопроса.
1. У внешнего генератора может быть дребезг на фронтах? Скажем внешний сигнал 1 Мгц, а клок - 100 Мгц. Тогда пологий фронт внешнего сигнала для внутреннего будет как "пила"..
2. Внешний сигнал подается синхронно с внутренним или возможна метастабильность?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
R2R
сообщение Sep 28 2017, 20:54
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-08-16
Пользователь №: 92 913



1. Сигнал достаточно чистый - фронты около 5 нс с минимальным звоном.
Прикрепленное изображение

2. Внешний сигнал не сихронен с тактовым генератором ПЛИС.

Действительно, проблема была в метастабильности и оказалась решена двумя триггерами на входе. Благодарю.

Сообщение отредактировал R2R - Sep 28 2017, 21:12
Go to the top of the page
 
+Quote Post
R2R
сообщение Sep 29 2017, 18:31
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-08-16
Пользователь №: 92 913



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

Выходной сигнал без синхронизатора

Прикрепленное изображение

С одним триггером

Прикрепленное изображение

С двумя триггерами

Прикрепленное изображение


Как видно, между синхронизаторами с одним и двумя триггерами нет разницы - дребезг ощутимо большой и составляет около 60 нс (3 такта клока).
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 29 2017, 18:48
Сообщение #5


я только учусь...
******

Группа: Модераторы
Сообщений: 3 396
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(R2R @ Sep 29 2017, 21:31) *
Поспешил с выводами - дребезг сигнала уменьшился, но не исчез (логический анализатор не позволяет это оценить в полной мере в отличие от осциллографа).

Выходной сигнал без синхронизатора

Прикрепленное изображение

С одним триггером

Прикрепленное изображение

С двумя триггерами

Прикрепленное изображение


Как видно, между синхронизаторами с одним и двумя триггерами нет разницы - дребезг ощутимо большой и составляет около 60 нс (3 такта клока).

Какой фронт нарастания внешнего сигнала?
Можно осциллограмму этого сигнала на осциллографе?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
R2R
сообщение Sep 29 2017, 18:51
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-08-16
Пользователь №: 92 913



Осциллограмма внешнего сигнала в сообщении #3.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 29 2017, 19:18
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 3 715
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(R2R @ Sep 28 2017, 22:38) *
Написал на верилоге модуль, осуществляющий задержку входного сигнала. Для его проверки в той же ПЛИС (EPM240T100C5) сделал модуль генератора меандра,

И что будет если
neg_cnt == phase и pos_cnt == phase

А вот чисто по жизни...
Зачем Вам в модуле два счетчика? Для меандра вполне и одного хватит... загружаем счетчик, потом его декрементируем. При 0 переключаем выходной триггер... Все...
А если промежутки требуются неравные, то в зависимости от состояния выходного триггера загружаем в таймер требуемую константу...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
R2R
сообщение Sep 29 2017, 19:31
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-08-16
Пользователь №: 92 913



Вариант с == проверял - то же самое. Насчет логики работы модуля - он измеряет полупериод и по фронту сигнала загружает измеренное значение, уменьшенное на phase, в счетчик нового полупериода. Увеличивая phase, можно сдвигать сигнал влево, т.е. модуль формирует сдвиг T - phi. Как мне казалось, это самая очевидная реализация такой функции.

Сообщение отредактировал R2R - Sep 29 2017, 19:33
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 29 2017, 19:46
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 823
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Подайте входной сигнал после триггеров сразу на выход, минуя схему задержки. Для проверки.
Go to the top of the page
 
+Quote Post
R2R
сообщение Sep 29 2017, 20:00
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-08-16
Пользователь №: 92 913



Сигнал с выхода синхронизатора имеет дребезг 20 нс вне зависимости от количества триггеров.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 29 2017, 20:04
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 3 715
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(R2R @ Sep 29 2017, 23:00) *
Сигнал с выхода синхронизатора имеет дребезг 20 нс вне зависимости от количества триггеров.

И это говорит о том, что у Вас тактовая имеет период в 20 нс... И входной сигнал плавает относительно тактовой...
А если нужна подстройка без "дребезга", то нужно делать PLL...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
R2R
сообщение Sep 29 2017, 20:08
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-08-16
Пользователь №: 92 913



А откуда берется еще 40 нс дребезга, когда сигнал проходит основную часть схемы?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 29 2017, 20:25
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 3 715
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(R2R @ Sep 29 2017, 23:08) *
А откуда берется еще 40 нс дребезга, когда сигнал проходит основную часть схемы?

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 30 2017, 00:45
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 182
Регистрация: 3-03-06
Пользователь №: 14 942



Представьте, что полупериод меандра sgn равен примерно 100 тактов системной частоты.
Реальное же количество тактов будет колебаться, например, между 100 и 101.
Теперь, если изобразить циклограмму работы ваших счетчиков, то видно следующее.
Когда количество тактов в полупериоде составит 101 такт, то счетчик добавит 2 такта до сброса или установки сигнала out. Потому как ему предстоит досчитать «вверх» до 101, добавив 1 лишний такт, а потом еще 1 лишний такт при счете «вниз».
Далее, если вы рассмотрите все комбинации полупериодов (100 и 101), то обнаружите разброс значений полупериодов между 99, 100 и 101. Отсюда ваши 60 нс плясок при периоде тактовой 20 нс. Тут не нужен тестбенч, карандашом это выясняется за 5 минут.

Прикрепленное изображение

P.S. Отличная задачка для собеседований.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 30 2017, 08:32
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 3 715
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(x736C @ Sep 30 2017, 03:45) *
Тут не нужен тестбенч, карандашом это выясняется за 5 минут.

Отвык я от карандаша... Скриншот удобнее был бы.

К ТС. А вообще, если не секрет, то зачем такой модуль вообще нужен?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th December 2017 - 12:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016