Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как избавиться от ступеньки?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Shaienn
Добрый день.

Не могу избавиться от ступеньки:
Нажмите для просмотра прикрепленного файла

В приложении модуль и тесбенч к нему. Используются неблокирующие операторы, но почему результат появляется только на следующем фронте тактовой частоты? Где я неправ?

Спасибо.

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
iosifk
Цитата(Shaienn @ Aug 4 2010, 12:15) *
В приложении модуль и тесбенч к нему. Используются неблокирующие операторы, но почему результат появляется только на следующем фронте тактовой частоты? Где я неправ?

Тестбенч еще не смотрел, но рекомендую посмотреть разницу между блокирующими и неблокирующими...
У меня на сайте "Краткий Курс HDL"... Там я этот раздел расписал особенно подробно...
sazh
Цитата(iosifk @ Aug 4 2010, 11:37) *
У меня на сайте "Краткий Курс HDL"... Там я этот раздел расписал особенно подробно...


Искал, но не нашел. Может, прямую ссылку укажите?
des333
Цитата(Shaienn @ Aug 4 2010, 12:15) *
В приложении модуль и тесбенч к нему. Используются неблокирующие операторы, но почему результат появляется только на следующем фронте тактовой частоты?  

У меня в ответ вопрос - а какого результата Вы ждете?


iosifk
Цитата(sazh @ Aug 4 2010, 13:16) *
Искал, но не нашел. Может, прямую ссылку укажите?


http://iosifk.narod.ru/articles.html
Начиная вот с этого:
"Краткий курс HDL-кодирования" Часть 1. "КиТ" №3 2008г."

В Части 2, раздел 2.19. Назначения уровня RTL (RTL Assignments)
2.19.1. Блокирующие процедурные назначения (Blocking Procedural Assignments)
2.19.2. Неблокирующее процедурное назначение (The Non-Blocking Procedural Assignment)
2.19.3. Как симулятор обрабатывает и выполняет неблокирующие процедурные назначения

Ну и так далее...
Удачи!









sazh
Цитата(iosifk @ Aug 4 2010, 12:44) *
http://iosifk.narod.ru/articles.html
Начиная вот с этого:
"Краткий курс HDL-кодирования" Часть 1. "КиТ" №3 2008г."

В Части 2, раздел 2.19. Назначения уровня RTL (RTL Assignments)
2.19.1. Блокирующие процедурные назначения (Blocking Procedural Assignments)
2.19.2. Неблокирующее процедурное назначение (The Non-Blocking Procedural Assignment)
2.19.3. Как симулятор обрабатывает и выполняет неблокирующие процедурные назначения

Ну и так далее...
Удачи!


Спасибо.
Shaienn
Цитата(des333 @ Aug 4 2010, 13:32) *
У меня в ответ вопрос - а какого результата Вы ждете?


я хочу, чтобы по первому фронту с1 после выставления locked начинался прием данных data_gen и по этим данным формировались остальные сигналы. Я так понимаю, что неблокирующее присваивание работает сразу при применении, но не могу понять, почему при одном событии:
Код
always @(posedge c1 or posedge Reset)
begin
     if (Reset)
     begin
     rSseq = 1'b0;
     rCseq = 1'b0;
     rSmod_seq = 1'b0;
     rCmod_seq = 1'b0;
     Qseq = 7'b1111110;
     Iseq = 7'b1110011;
     end
     else if (locked)
     begin
     Qseq = {Qseq[5:0], Qseq[6]};
     Iseq = {Iseq[5:0], Iseq[6]};
    
     rSseq = (oddOne && Qseq[0]) || (oddZero && Qseq[0]) || (evenOne && (~Qseq[0])) || (evenZero && (~Qseq[0]));
     rCseq = (oddOne && Iseq[0]) || (oddZero && Iseq[0]) || (evenOne && (~Iseq[0])) || (evenZero && (~Iseq[0]));    
    
     rSmod_seq = (rSseq && oddClock) || (~oddClock && rCseq);
     rCmod_seq = (rSseq && ~oddClock) || (oddClock && rCseq);
     end
end


регистры Qseq и Iseq формируются как мне нужно (по первому фронту), а регистры rSseq, rCseq, rSmod_seq и rCmod_seq формируются на второй фронт с1. Хочу, чтобы они тоже формировались по первому фронту. Я не гуру, подскажите, где я заблуждаюсь?

Спасибо.
sazh
Цитата(Shaienn @ Aug 4 2010, 17:04) *
Я так понимаю, что неблокирующее присваивание работает сразу при применении


У Вас используется блокируещее присваивание, но не суть.
У Вас по описанию две тактовые, да еще по фронтам. Поиграйте ими, посмотрите, что получиться.
А лучше - один клок использовать.
Shaienn
Цитата(sazh @ Aug 4 2010, 18:18) *
У Вас используется блокируещее присваивание, но не суть.
У Вас по описанию две тактовые, да еще по фронтам. Поиграйте ими, посмотрите, что получиться.
А лучше - один клок использовать.



Да, я уже вычитал, что с термином ошибся. По тактовой с2 принимается информационный бит. А в информационном бите есть семь бит последовательности Баркера (частота с1).... Так что мне только попробовать с2 сделать из с1, но я мыслил, что эти частоты получу из PLL модуля.
sazh
Цитата(Shaienn @ Aug 4 2010, 17:26) *
Да, я уже вычитал, что с термином ошибся. По тактовой с2 принимается информационный бит. А в информационном бите есть семь бит последовательности Баркера (частота с1).... Так что мне только попробовать с2 сделать из с1, но я мыслил, что эти частоты получу из PLL модуля.


Вы получили триггерную структуру, реакция которой зависит от фронтов этих двух клоков. Вы нарисовали c2, c1 Без учета задержек их формирования, получили реакцию. Вот и все.
Что мешает работать на частоте с1 и перезаписывать ваш код по каждому 7 отсчету.
Смотрите RTL просмотрщик в квартусе.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.