Використання обох країв годинника


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"

Як я можу використовувати як позитивний, так і негативний край даного годинника у своїй конструкції?

Відповіді:


7

Коли ви присвоюєте реєстр в блоці, який завжди чутливий до краю, ви визначаєте фліп-флоп. У FPGA немає тригерів, які можуть спрацьовувати на обох краях годинника.

Для того, щоб робити те, що ви хочете, вам знадобиться мати два окремих завжди блоки, по одному для кожного краю годинника, а потім з'ясувати спосіб поєднати виходи двох блоків, не створюючи глюків.

Наприклад, один блок завжди може містити ваш програмований роздільник. Сконструюйте його так, щоб вихідний робочий цикл був меншим за 50%, коли дано непарне число. Використовуйте другий блок завжди (на іншому краю годинника), щоб затримати вихід першого блоку на 1/2 тактової частоти, потім АБО два виходи разом. Вимкніть вихід другого блоку для рівних значень дільника.


Причина, за якою я хочу використовувати як позитивні, так і негативні краї годин - це робочий цикл 50%.
Randomblue

Так, я це зрозумів. Моя відповідь безпосередньо стосується цього. Я припускав, що ви вже знаєте, як отримати 50% робочий цикл, коли значення дільника є парним. Що не зрозуміло?
Дейв Твід

Немає подвійних шльопанок? Причин для цього немає. Просто виявляється, що їх ніхто не робить (або принаймні нікого, про кого ми знаємо). Як зазначає Мартін, існує CPLD, який підтримує двійкові краєчки
Філіп

3

Якщо це стосується внутрішньої логіки, вам, ймовірно, доведеться писати набагато ближче до наявних тригерів. За винятком Coolrunner-II, я не знаю жодної програмованої логіки з притаманними їй регістрами подвійного краю.

Тому вам доведеться створити два alwaysблоки, один для негеджування та один для представлення та поєднати їх результати з деякою комбінаторною логікою.

Або скористайтеся PLL для подвоєння годинника, і тоді ви можете використовувати звичайну логічну одногранну логіку.



1

Як зазначає Дейв Твід, якщо FPGA не включає апаратне забезпечення для тригера, яке може працювати на обох краях годинника, потрібно буде написати власну логіку, щоб реалізувати бажану поведінку, використовуючи звичайні фліп-флопи. Незважаючи на те, що існує декілька різних способів, що можна реалізувати схему, яка веде себе так само, як подвійний фліп-флоп, такі схеми, як правило, додають деякі обмеження в часі, які відрізняються від обмежених тригерів.

Наприклад, простий підхід полягає в тому, щоб модуль, що поєднує два 2-вхідних xors і пару тригерів "T" (де стан входу при надходженні імпульсу годинника вказує, чи повинен цей край годинника перемикати вихід), один ініційований піднімаючим краєм і один, який запускається падаючим краєм. Вихід модуля буде xor виходів тригерів, а вхід до обох тригерів буде xor виходу модуля та його входу.

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

Альтернативною схемою схеми було б мати два фліп-флопа, як зазначено вище, але подати їхні виходи в мультиплексор. Цей ланцюг не був би переведений у невдалий стан імпульсами рута, і його обмеження на тактику було б таким самим, як і базові засувки, але це буде недоліком, що вихід, який був високим і повинен залишатися (або низьким і повинен залишатися низьким ), щоб могло коротко пролетіти на краю годинника. У деяких схемах це не мало значення, а в інших -.

Можливо, інструменти синтезу логіки могли б автоматично реалізовувати двійкові фліп-флопи, аналізуючи, які обмеження в часі були визначені як важливі, але зробити це було б дещо складно. Це також збільшило б ризик того, що невелика зміна дизайну може призвести до серйозних змін у реалізації та, таким чином, призведе до значних і несподіваних змін у поведінці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.