Используя оба края часов

10

Я программирую Altera Cyclone IV, используя Verilog и Quartus II. В моем проекте я хотел бы использовать оба края часов, чтобы можно было делить часы по нечетному коэффициенту с коэффициентом заполнения 50%. Вот фрагмент моего кода:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

Теперь, когда я компилирую это, Quartus II выдает следующую ошибку:

Verilog HDL Always Construct error at adc_clocking.v (83): контроль событий не может проверять как положительные, так и отрицательные края переменной "low_jitter_clock_i"

Как я могу использовать положительный и отрицательный край данных часов в моем дизайне?

Randomblue
источник

Ответы:

7

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

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

Например, один блок всегда может содержать ваш программируемый разделитель. Сделайте так, чтобы выходной коэффициент заполнения составлял менее 50%, если ему дано нечетное число. Используйте второй блок всегда (на другом фронте тактовой частоты), чтобы задержать выход первого блока на 1/2 такта, затем ИЛИ два выхода вместе. Отключить вывод второго блока для четных значений делителя.

Дэйв Твид
источник
Причина, по которой я хочу использовать как положительные, так и отрицательные границы часов, заключается в том, чтобы коэффициент заполнения составлял 50%.
Randomblue
Да, я понял это. Мой ответ прямо касается этого. Я предположил, что вы уже знаете, как получить рабочий цикл 50%, когда значение делителя является четным. Что не понятно?
Дэйв Твид
Нет двойных шлепанцев? Для этого нет внутренней причины. Просто получается, что никто их не делает (или, по крайней мере, никто, о котором мы знаем). Как указывает Мартин, существует CPLD, который поддерживает двухсторонние
Филипп
3

Если это для внутренней логики, вам, вероятно, придется писать гораздо ближе к доступным триггерам. За исключением Coolrunner-II, я не знаю какой-либо программируемой логики с двойными регистрами.

Поэтому вам придется создать два alwaysблока, один для нуждающегося и один для поставленного, и объединить их выводы с некоторой комбинаторной логикой.

Или используйте PLL, чтобы удвоить время, и тогда вы можете использовать обычную одностороннюю логику.

Мартин Томпсон
источник
2

В итоге я реализовал коэффициент заполнения 50% для нечетных коэффициентов деления, используя метод, описанный здесь .

Randomblue
источник
1

Как отмечает Дейв Твид, если FPGA не включает в себя аппаратные средства триггера, которые могут работать на обоих краях тактового генератора, необходимо будет написать собственную логику для реализации желаемого поведения с использованием обычных односторонних триггеров. Хотя существует ряд различных способов реализации схемы, которая во многом похожа на двухгранный триггер, такие схемы обычно добавляют некоторые временные ограничения, которые отличаются от тех, которые связаны с триггерами.

Например, простой подход состоит в том, чтобы иметь модуль, объединяющий два xors с двумя входами и пару триггеров «T» (где состояние входа, когда поступает тактовый импульс, указывает, должен ли этот фронт такта переключать выход), один срабатывает по нарастающему фронту, а другой - по спадающему фронту. Выход модуля будет равен xor выходов триггеров, а вход для обоих триггеров будет xor выхода модуля и его входа.

Схема, спроектированная таким образом, будет работать в основном как двухгранный триггер, хотя с более длительным временем установки и распространения, но с дополнительным ограничением по времени. Нормальный триггер, который не находится на пути обратной связи, не будет возражать, если начало фронта тактового импульса имеет кучу кратковременных импульсов при условии, что тактовые импульсы стабилизируются на допустимом уровне, и при условии, что ограничение времени установки, измеренное до первый импульс короткого замыкания и ограничения времени удержания и времени активности часов, измеренные со времени, когда импульс часов стабильно активен. Поведение вывода триггера будет неопределенным в течение нестабильного времени, но будет определено после стабилизации часов. Модуль double-xor-double-flop добавил бы дополнительное временное ограничение, согласно которому любой фронт тактовых импульсов, который мог бы изменить выходной сигнал, должен находиться на безопасном расстоянии от любого другого фронта тактовых импульсов, который мог бы это сделать. Несоблюдение этого ограничения, например, из-за того, что три тактовых фронта находятся в очень близкой последовательности, в то время как входные данные не совпадают с выходными, может оставить выходной сигнал в неопределенном или метастабильном состоянии (обратите внимание, что сценарии, включающие четное количество фронтов, не являются проблемой , поскольку такие сценарии будут включать только импульсы ускорения, случай с тремя фронтами (или другие случаи с нечетным числом, превышающим единицу) является проблемой, поскольку после импульсов ускорения будет действительный импульс.

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

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

Supercat
источник