реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как ГРАМОТНО обработать входной тактовый сигнал?, среда ISE, железяка Spartan3e
Sobol'
сообщение Feb 17 2015, 11:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 31-07-14
Пользователь №: 82 421



Приветствую заглянувших.

Ситуация следующая. Автомат, который я хочу реализовать на ПЛИС должен работать на частоте порядка 1 MHz (плюс-минус 200 KHz роли не играют). Есть тактовый вход с частотой 50 MHz. На этапе моделирования пользовался наспех написанным делителем:

reg [5:0] clk_cnt = 0;
always @(posedge clk_50MHz) clk_cnt <= clk_cnt +1;
wire clk_1MHz = clk_cnt[5];

Выходная частота - порядка 1250 KHz - меня устраивает.
Теперь, когда нужно залить мою модель в ПЛИС задумался над тем, что наверно нужно использовать буферы.. Правильно ли я понимаю, что на сигнал clk_50MHz нужно повесить IBUFG а на сигнал clk_1MHz - BUFG? или что-то еще нужно менять? или вообще все прах и тлен и нужен другой подход?

ЗЫ среда ISE 14.7, плата Spartan 3E XC3S1600E
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Feb 17 2015, 12:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(Sobol' @ Feb 17 2015, 14:44) *
Приветствую заглянувших.

Ситуация следующая. Автомат, который я хочу реализовать на ПЛИС должен работать на частоте порядка 1 MHz (плюс-минус 200 KHz роли не играют). Есть тактовый вход с частотой 50 MHz. На этапе моделирования пользовался наспех написанным делителем:

reg [5:0] clk_cnt = 0;
always @(posedge clk_50MHz) clk_cnt <= clk_cnt +1;
wire clk_1MHz = clk_cnt[5];

Выходная частота - порядка 1250 KHz - меня устраивает.
Теперь, когда нужно залить мою модель в ПЛИС задумался над тем, что наверно нужно использовать буферы.. Правильно ли я понимаю, что на сигнал clk_50MHz нужно повесить IBUFG а на сигнал clk_1MHz - BUFG? или что-то еще нужно менять? или вообще все прах и тлен и нужен другой подход?

ЗЫ среда ISE 14.7, плата Spartan 3E XC3S1600E


Я использую вход CE триггера. Например получить частоту 1 MHz из 50 MHz след образом. Отрывок кода для автомата работающего на 1 МГц
Код
process(clk)
begin

    if (rising_edge(clk)) then     -- Rising clock edge
      if Rst = '1' then                
        state        <= WaitPushBut;    
          INC <= '0';
          leds_reg <= x"00";
          
      elsif(CEn = '1')then -----------------------------
        
            
        
        
          case state is
          
              when Idle =>
                    if (timer = 1) then
.................................................

clk здесь 50 МГц и есть сигнал CEn, по которому происходит работа автомата. Сигнал срабатывает с частотой 1 МГц. Получить его просто. Берете ядро для счетчика. Там есть опция порог и сигнал срабатывания порога. Этот сигнал и завожу на CEn. Например счетчик от 0 до 49. Порог 49. тогда частота срабатывания порога при частоте работы счетчика в 50 МГц / 50 = 1 МГц. То что вам необходимо.

Go to the top of the page
 
+Quote Post
Sobol'
сообщение Feb 17 2015, 13:40
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 31-07-14
Пользователь №: 82 421



farbius, а почему бы не поделить сам клок? В Вашем примере, для сигнала clk нужно использовать буфер или можно напрямую?
Go to the top of the page
 
+Quote Post
serjj
сообщение Feb 17 2015, 13:48
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



1 МГц клок можно конечно как угодно получать, но вообще лучше внутренние клоки через DCM получать. Почитайте на него доку, там расписано как клок с входного пина заходит, как получить выходной клок
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Feb 17 2015, 13:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(Sobol' @ Feb 17 2015, 16:40) *
а почему бы не поделить сам клок?


Может объясню неточно, знающие меня поправят. Тактируемым элементом CLB ячейки ПЛИС является D триггер. Именно он используется синтезатором при интерпретации любых тактируемых алгоритмов. Триггер имеет вход CE разрешающий клок. Когда описываете алгоритм способом, который я привел, то по идее синтезатор распознает именно D триггер.

Делить сам клок чревато приобретением джиттеров и как следствие ошибок в работе Вашей схемы. Вообще для клоков лучше использовать ядра типа DCM, PLL.

Цитата
В Вашем примере, для сигнала clk нужно использовать буфер или можно напрямую?


Напрямую подавать на клок счетчика.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 17 2015, 14:11
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Sobol' @ Feb 17 2015, 14:44) *
Теперь, когда нужно залить мою модель в ПЛИС задумался над тем, что наверно нужно использовать буферы..
Специально ничего делать не надо. Синтезатор сам распознаёт клок и вставляет тактовый буфер. Обычно что-то надо делать, чтобы синтезатор буфер не вставлял.

Как уже сказали, нужно использовать не делённый клок, а сформировать сигнал CE, котоый будет идти с нужной частотой, и прописать в констрейнах мультицикл на него, чтобы PAR не считал, что нужно успевать за период клока.
Go to the top of the page
 
+Quote Post
Sobol'
сообщение Feb 18 2015, 08:05
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 31-07-14
Пользователь №: 82 421



Уважаемые, ткните пожалуйста меня носом - где почитать про DCM на русском?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 18 2015, 08:15
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Sobol' @ Feb 18 2015, 11:05) *
где почитать про DCM на русском?
Про русский сразу забудьте. Читайте application note в оригинале.
http://www.xilinx.com/support/documentatio...tes/xapp462.pdf
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Feb 18 2015, 08:15
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(Sobol' @ Feb 18 2015, 11:05) *
Уважаемые, ткните пожалуйста меня носом - где почитать про DCM на русском?


Если хотите использовать DCM ядро, то coregenerator в помощь. Как настроить понятно интуитивно. Но для spartan 3e данного ядра нет.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016