Доброго времени суток!
Делаю проект в Quartus для EPM3256-10. Синхронная система. Главный клок - 768Fs (33.8688 МГц). Есть четыре сигнала: Wordclock (8Fs), Bitclock (192Fs) и два сигнала данных - DataL и DataR. На первом приложенном изображении соответствуют диаграмме 20 Bit. Потребовалось обеспечить внутри фрейма сдвиг влево/вправо пачки BCLK и регулировку скважности/длительности WCLK. Хорошо, это сделал из основного такта 768Fs. Затем последовала необходимость привязать данные к новым сигналам. После некоторых раздумий, пришел к следующему алгоритму. Для упрощения изложения, исходные сигналы называю WCLK и BCLK, созданные – NWCK и NBCK. Используется 8-и разрядный регистр, входы которого соединены с линией данных, а тактовые входы - с линией BCLK. После отрицательного перепада WCLK, запускается 3-х разрядный счетчик, тактируемый спадом BCLK. Значения счетчика обеспечивают переключение входов разрешения регистра. После того, как в первый разряд регистра произведена запись и счетчик разрешил запись во второй разряд, запускается другой 3-х разрядный счетчик, тактируемый спадом NBCK. Этот счетчик производит мультиплексирование выходов регистра на непосредственно выход данных. Все бы хорошо, алгоритм (теоретически) рабочий, частоты в схеме не очень высокие. Но Quartus этого алгоритма не понимает. Я бы мог закрыть глаза на его предупреждения, но сначала насторожило следующее сообщение:
"Warning: Found 11 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew"
А в последствие, при симуляции увидел "иголки" - второе изображение в приложении. Посмотрел повнимательнее, "иголки" длиной 0.1 нс и не привязываются ни к одному сигналу. Дело, конечно, поправимое - пересинхронизацией от 768Fs, но мне не нравится такое поведение. Более того, если в проект добавляю дополнительные модули, количество "иголок" увеличивается, а поведение при симуляции вообще не поддается анализу. Алгоритм перестает работать.
Существует ли какой-то нормальный алгоритм перепривязки данных, который компилятор воспринимает рабочим?
Нажмите для просмотра прикрепленного файла Нажмите для просмотра прикрепленного файла