|
|
  |
Как ГРАМОТНО обработать входной тактовый сигнал?, среда ISE, железяка Spartan3e |
|
|
|
Feb 17 2015, 11:44
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 17 2015, 12:17
|
Местный
  
Группа: Свой
Сообщений: 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 МГц. То что вам необходимо.
|
|
|
|
|
Feb 17 2015, 13:40
|
Участник

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

|
farbius, а почему бы не поделить сам клок? В Вашем примере, для сигнала clk нужно использовать буфер или можно напрямую?
|
|
|
|
|
Feb 17 2015, 13:52
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Sobol' @ Feb 17 2015, 16:40)  а почему бы не поделить сам клок? Может объясню неточно, знающие меня поправят. Тактируемым элементом CLB ячейки ПЛИС является D триггер. Именно он используется синтезатором при интерпретации любых тактируемых алгоритмов. Триггер имеет вход CE разрешающий клок. Когда описываете алгоритм способом, который я привел, то по идее синтезатор распознает именно D триггер. Делить сам клок чревато приобретением джиттеров и как следствие ошибок в работе Вашей схемы. Вообще для клоков лучше использовать ядра типа DCM, PLL. Цитата В Вашем примере, для сигнала clk нужно использовать буфер или можно напрямую? Напрямую подавать на клок счетчика.
|
|
|
|
|
Feb 17 2015, 14:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

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

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

|
Уважаемые, ткните пожалуйста меня носом - где почитать про DCM на русском?
|
|
|
|
|
Feb 18 2015, 08:15
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Sobol' @ Feb 18 2015, 11:05)  Уважаемые, ткните пожалуйста меня носом - где почитать про DCM на русском? Если хотите использовать DCM ядро, то coregenerator в помощь. Как настроить понятно интуитивно. Но для spartan 3e данного ядра нет.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|