Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: глюк в автомате
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
_Anatoliy
Прямо первый раз у меня такое...
Код
    
    case state is
                 .........    
                 when 3 =>
            if (iData = x"ff") then
                cmp_adr2 <= cmp_adr2+1;
            else
                cmp_adr2 <= cmp_adr2+16;
            end if;
            state <= state+1;
        when 4 =>
            if (iData = x"ff") then
                cmp_adr2 <= cmp_adr2+1;
            else
                cmp_adr2 <= cmp_adr2+16;
            end if;
            state <= state+1;
        when 5 =>
                ...........


Есть компаратор MAC-адреса протокола ARP, ведёт себя неадекватно(см.картинку).Счётчик должен увеличивать значение на единичку,но почему-то первый раз прибавляется 16. Естественно есть констрейны, слэк сетапа +1,2нс, слэк холда +0,8нс... Есть ли какие мысли,коллеги?
des00
я бы расковырял Technology mapper и посмотрел что он нагенерировал. Потом бы уже разбирался почему.
FakeDevice
а целиком весь процесс можете показать? можно и в ПМ, я никому больше не покажу, честное слово.
_Anatoliy
Цитата(des00 @ May 5 2016, 18:28) *
я бы расковырял Technology mapper и посмотрел что он нагенерировал. Потом бы уже разбирался почему.

Спасибо,завтра гляну. Хотя что бы он там не нагенерировал, STA обязан был отследить все пакости. Если STA не верить то как жить?
novartis
А "when others =>" для "case state " у вас имеется? Даже если перебрали все значения, его нужно добавить.
И state <=state + 1; я бы заменил на константные значения, как то ловил на этом перескоки.
Inanity
Здравствуйте.

Не знаю систему в целом, буду исходить из того, что вижу. Если iData - внешняя шина, т.е. заходит в ПЛИС по какому-то синхронному интерфейсу и обрабатывается вашим автоматом по тому же тактовому сигналу, то в этому случае возможно не все биты iData успевают дойти до компаратора. По сути нарушается OFFSET IN. Необходимо дополнительно защёлкивать шину iData, прежде, чем отправлять на компаратор. Желательно защёлки запаковать в IOB (буферы вход\выход), чтобы не заботиться об OFFSET IN/OUT.

Есть ещё вариант, что iData приходит из другого домена. В этом случае синхронизацию нужно делать тоже очень аккуратно, поскольку простой синхронизатор из триггеров опять не может гарантировать, что все биты шины защёлкнутся одновременно. Нужен некий строб разрешения, валидности.
_Anatoliy
Цитата(novartis @ May 5 2016, 20:09) *
А "when others =>" для "case state " у вас имеется? Даже если перебрали все значения, его нужно добавить.
И state <=state + 1; я бы заменил на константные значения, как то ловил на этом перескоки.

Имеется. Перескоков нет,видно на картинке.
des00
Цитата(Inanity @ May 6 2016, 00:23) *
Если iData - внешняя шина, т.е. заходит в ПЛИС по какому-то синхронному интерфейсу и обрабатывается вашим автоматом по тому же тактовому сигналу, то в этому случае возможно не все биты iData успевают дойти до компаратора.

ИМХО регистры ТС перетактировал. воробей стрелянный sm.gif

Цитата(_Anatoliy @ May 5 2016, 23:34) *
Спасибо,завтра гляну. Хотя что бы он там не нагенерировал, STA обязан был отследить все пакости. Если STA не верить то как жить?

Не факт что STA тут причем. Мне порой квартус проекты разваливает, причем совершенно не объяснимым образом (удаляются задержки, регистры скачут по слоям логики, хотя ретайминг запрещен и т.д.) . Лечиться удалением increment_db/db и пересборкой. Правда это занимает до пары часов sad.gif
_Anatoliy
Цитата(Inanity @ May 5 2016, 20:23) *

Защёлка на входе есть,input delay здесь ни причём. И домен всего один. Я пока не могу придумать логичного объяснения этого феномена.
FakeDevice
Гадать можно долго и безрезультатно. Нужно как минимум процесс целиком видеть. Достаточно ведь ниже по тексту еще раз переприсвоить сигналу другое значение (в vhdl только последнее присвоение имеет силу). Но это первое, что на уме.
Опять же, iData -- это переменная или сигнал? Тоже зависит, запросто можно "додумать" ситуацию, если не видно, что по краям отрезка кода находится. Список чувствительности. Много чего можно навыдумывать в одном только синтаксисе языка.
_Anatoliy
Цитата(des00 @ May 5 2016, 20:35) *
ИМХО регистры ТС перетактировал. воробей стрелянный sm.gif

Это таки да. Свой первый триггер я собирал на тиратронах - транзисторов ещё не было. И тем не менее это не помешало мне оказаться в лыжах на асфальте. Угадал Inanity, я ему отвечал из дома по памяти. Вывод : больше двух проектов одновременно в моей старой голове уже не помещается laughing.gif

Цитата(FakeDevice @ May 5 2016, 19:14) *
а целиком весь процесс можете показать?

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