Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

Проблема с адаптивной линией задержки на EPM240

Вс авг 06, 2017 17:51:09

Приветствую.
Есть два идентичных (за исключением первого периода) сигнала fb_l и fb_r, но второй имеет частотозависимую задержку d2 относительно первого. Требуется сформировать сигнал ctrl, который отстает от fb_l на время d3 = d2 - d1, где d1 некоторая постоянная величина (d1 < d2).
Моя программа работает некорректно - часть периодов ctrl формируется правильно, но остальные "слипаются" или пропускаются. Причем количество и положение испорченных периодов меняется рандомно.

Фрагмент сигнала (d1 = 0 для наглядности)

Код

Re: Проблема с адаптивной линией задержки на EPM240

Пн авг 07, 2017 23:31:02

Как-то так нужно.
Plazmoid писал(а):Моя программа работает некорректно
Это не совсем программа, это описание цифрового устройства со всякими триггерами и комбинационными устройствами. Поэтому сначала нужно продумать схему до уровня отдельных счетчиков, регистров и комбинационных устройств, и только потом писать код. По этой же причине, чтобы однозначно отделить комбинационные части устройства от последовательностных, в блоках always не стоит использовать блокирующие присваивания.

Re: Проблема с адаптивной линией задержки на EPM240

Вт авг 08, 2017 20:08:22

Это не совсем программа, это описание цифрового устройства со всякими триггерами и комбинационными устройствами. Поэтому сначала нужно продумать схему до уровня отдельных счетчиков, регистров и комбинационных устройств, и только потом писать код.

То, что из кода синтезируется схема, это понятно :) . Вот только сообразить, что получится на выходе, не всегда удается. Один из предыдущих проектов был на XC9572XL - написал рабочий код, но при малейшей его модификации схема переставала синтезироваться, хотя был запас по макроячейкам, термам и регистрам. Причем происходило это совершенно непредсказуемо - "Если увеличить разрядность регистра cnt с 15 до 17 бит, будет задействовано на 2 регистра больше и на 6 термов меньше, а если поднять до 19 бит, то для синтеза внезапно не будет хватать 234 термов!". А на XC6SLX9 все работало без проблем, и, вроде, ячеек меньше занимало. CPLD очень требовательны к качеству кода.
По этой же причине, чтобы однозначно отделить комбинационные части устройства от последовательностных, в блоках always не стоит использовать блокирующие присваивания.

С этим есть проблемы. Во многих случаях важна последовательность команд, поэтому использую блокирующие присваивания. Но Квартус ругается на смешивание разных типов присваиваний, поэтому в итоге приходиться выдерживать все в одном стиле. :(

Ваш код пока не пробовал - сложновато для меня, нужно время, чтобы разобраться.
Ответить