Перейти к содержанию
    

Возникли проблемы при работе ПЛИС. Сам проект компилится, шьется, все нормально. Используется Циклон 2. Используется один глобальный клок(на него заведена тактовая) и от него делителями сделаны другие клоки. Если подсоединять другую логику на глобальный клок ну например (схемка на и, или, или-не, искл. или в сочетании с глобальным клоком), то где то сбиваются счетчики или что то не понятное происходит. Все шьется, только работает непонятно как. В проекте сделано фифо и идет анализ данных на выходе. На вход идут нормальные сигналы, с выхода снимаем сигналы, которые не поддаются логическому объяснению. Убираешь добавленную логику все работает, как часы.

Есть ли какие тонкости при работе с глобальными клоками, с D-тригерами или еще что? Все неиспользуемые ножки сделаны как выходы и подтянуты к земле. Кто поможет разобраться с проблемой? :bb-offtopic: Что может влиять на тактовую?

 

Я понимаю, что все зависит от добавленной логики. Но в симуляторе отдельно все работает. Вместе вот не получается пока! :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стандартный в таких случаях вопрос: констрейны прописаны? Как минимум -- частоты основного и порождённых клоков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для тех кто в танке, что такое констрейны? :(

 

 

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

Ну да логично. Я так и делаю. Только сбой то происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну да логично. Я так и делаю. Только сбой то происходит.

Тогда поясните этот пункт:

 

Если подсоединять другую логику на глобальный клок ну например (схемка на и, или, или-не, искл. или в сочетании с глобальным клоком), то где то сбиваются счетчики или что то не понятное происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

**

Если подсоединять другую логику на глобальный клок ну например (схемка на и, или, или-не, искл. или в сочетании с глобальным клоком), то где то сбиваются счетчики или что то не понятное происходит.

**

 

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

 

всё остальное управление надо делать только через CE триггеров - в этом случае никакие констрейны не нужны.

 

это касается и получения других частот из глобального клока

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

всё остальное управление надо делать только через CE триггеров - в этом случае никакие констрейны не нужны.

 

это касается и получения других частот из глобального клока

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В точку!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Используется один глобальный клок(на него заведена тактовая) и от него делителями сделаны другие клоки.

 

Скоре всего проблема не в глобальных клоках, а в этих других после делителей. Такие клоки по возможности надо избегать. На вход clk тригеров подовать глобальный клок, а деление делать за счет enable.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скоре всего проблема не в глобальных клоках, а в этих других после делителей. Такие клоки по возможности надо избегать. На вход clk тригеров подовать глобальный клок, а деление делать за счет enable.

Предположим мы сделали несколько разных делителей на разные частоты на D тригерах. На вход clk подали глобальный клок. Т. е . получается с выхода делителей мы не имеем право использовать эти частоты. Тогда вообще смысл всей плис пропадает.

Непонятно как сделать делитель на enable?

 

В точку!

Не понятно тогда зачем вообще глобальный клок? Т.е связывать глобальный клок с логикой нельзя. Тогда часть схемы работает от глобального клока, а другая от той же частоты, но не глобального, а как тогда синхронизировать выходы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делитель на Enable... я тоже не понял что это.

 

Не понятно тогда зачем вообще глобальный клок? Т.е связывать глобальный клок с логикой нельзя. Тогда часть схемы работает от глобального клока, а другая от той же частоты, но не глобального, а как тогда синхронизировать выходы.

Глобальный клок - эсть глобальный клок. Внутри кристалла у него своя разводка и задержка распространения сигнала по кристалу - минимальная, так что все счетчики и триггеры будут срабатывать "одновременно". Клоки после счетчиков можете использовать как душе угодно! У управлять этими синхронными элементами надо через enable. Поищите документацию на Altera.com/ru и в даташите есть информация как раз о синхронных и асинхронных схемах.

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

Либо синхронная схема, либо нет.

Изменено пользователем I.S.A.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Предположим мы сделали несколько разных делителей на разные частоты на D тригерах. На вход clk подали глобальный клок. Т. е . получается с выхода делителей мы не имеем право использовать эти частоты.

Сигналы с выхода D триггеров можно использовать в качестве тактовых, только об этом нужно сказать сапру и указать на сколько вы поделили.

 

Не понятно тогда зачем вообще глобальный клок? Т.е связывать глобальный клок с логикой нельзя. Тогда часть схемы работает от глобального клока, а другая от той же частоты, но не глобального, а как тогда синхронизировать выходы.

Если вы вспомните, что у триггеров есть сигнал clock enable, то сможете реализовать нужную логику без использования асинхронных схем. Для этого у вас есть целых 2 входа триггера D и CE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делитель на Enable... я тоже не понял что это.

Я не писал на enable, а за счет enable. Подаете на clk глобальный клок а на вход разрешения(enable) сформираваный импульс нужной частоты. Допустим если нужно разделить на 4 то на каждые 4 клока формируете один импульс на вход разрешения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не писал на enable, а за счет enable. Подаете на clk глобальный клок а на вход разрешения(enable) сформираваный импульс нужной частоты. Допустим если нужно разделить на 4 то на каждые 4 клока формируете один импульс на вход разрешения.

Только логика формирования импульсов зависит от глобального клока. Тактовую то все равно берем и от нее пляшем. :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только логика формирования импульсов зависит от глобального клока. Тактовую то все равно берем и от нее пляшем. :crying:

Если я правильно понял, о чем речь, то:

Это счетчик:

reg [1:0] Counter;
wire Counter_Output;
always @(posedge clk) begin
    Counter=Counter+2'b01;
    if (Counter==2'b11) 
        Counter_Output=1'b1;
    else
        Counter_Output=1'b1;        
end

Далее два варианта:

Вариант 1

always @(posedge Counter_Output) begin
    //Do something 
end

Вариант 2

always @(posedge clk) begin
    if (Counter_Output) begin
        //Do something 
    end
end

 

Вариант 1 использует выход счетчика как клок - плохо. Вариант 2 использует общий глобальный клок, а выход счетчика как сигнал разрешения Enable - хорошо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...