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

Клок с регистра с разрешением

Есть проект на плис MAX10. На PLL формируются несколько частот от 40 до 200 MHz.

Все выходы PLL подключены только на тактовые входа триггеров.

Проект полностью синхронный. Работает замечательно.

И вдруг возникла необходимость разрешать/запрещать один из выходов PLL.

Использовать ALTCLKCTRL почему-то не получилось, то ли библиотек не хватает то ли еще чего.

Решил вопрос по другому.

Нужную частоту сделал вдвое больше и подал на такую схему.

module CLK( input clkin200, clkenb, output reg clkout100);

reg eclk;

always @(posedge clkin200) eclk <= clkenb;

always @(posedge clkin200) clkout100 <= !clkout100 & eclk;

endmodule

В RTL :

1.thumb.jpg.23023844f34394b9244ff42e5954628a.jpg

Проверил в реальном изделии - вроде всё работает как надо.

 

В чём минусы такого подхода к формированию клока с разрешением?

Как на verilog указать квартусу чтобы он выход триггера clkout100 назначил на global clock?

Если автоматически назначил, то как это проверить?

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


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

10 minutes ago, Freibier said:

Проект полностью синхронный.

Вместо управления клоком "clk", можно управлять сигналом разрешения клока "en":

always@(posedge clk) if(en) begin … end

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


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

Не пойдёт.

У меня clkout100 не только в плис используется, но и выходит на пин и тактирует внешнюю мс.

Именно из-за неё и нужно этот клок иногда останавливать.

Т.е. нужно запретить работу всего что в плис от этой частоты работает и мс извне.

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


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

Добавить перед выходным пином коммутатор, управляемый сигналом enable. Например,

clk_out = enable ? clk : 0'b0;

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


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

Ставите DDR регистр и управляете его входом ena

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


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

1 час назад, Yuri124 сказал:

Добавить перед выходным пином коммутатор, управляемый сигналом enable. Например,

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

1 час назад, Yuri124 сказал:

clk_out = enable ? clk : 0'b0;

Мне кажется что в этом случае на clk_out возможны иголки.

Или я ошибаюсь?

32 минуты назад, Flip-fl0p сказал:

Ставите DDR регистр и управляете его входом ena

Никогда DDR не использовал сложно понять как их использовать, да и нет их в моей плис

3 часа назад, Freibier сказал:

Как на verilog указать квартусу чтобы он выход триггера clkout100 назначил на global clock?

Если автоматически назначил, то как это проверить?

На этот мой вопрос может кто чего подсказать?

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


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

12 minutes ago, Freibier said:

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

я подразумевал - на выход клокового пина поставить коммутатор, а внутри ПЛИС управлять так, как Вам выше подсказали  - совместить 2 возможности.

14 minutes ago, Freibier said:

в этом случае на clk_out возможны иголки.

Или я ошибаюсь?

Чтобы не было иголок - это должен постараться разработчик правильно сгенерировать этот сигнал enable (не забыть составить соотв. файл sdc).

 

22 minutes ago, Freibier said:

указать квартусу

https://www.intel.com/content/www/us/en/support/programmable/articles/000078402.html   - это поможет?

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


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

Приветствую!

3 hours ago, Freibier said:

Использовать ALTCLKCTRL почему-то не получилось, то ли библиотек не хватает то ли еще чего.

Решил вопрос по другому. ... 

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

 

Удачи! Rob.  

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


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

57 минут назад, RobFPGA сказал:

А может все же  проще разобраться почему не получилось

Вот такую ошибку выдает:

Error (12006): Node instance "inst_ECLK" instantiates undefined entity "ECLK". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.

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


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

Только что, Freibier сказал:

Вот такую ошибку выдает:

Error (12006): Node instance "inst_ECLK" instantiates undefined entity "ECLK". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.

Так надо IP правильно подключить.

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


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

Только что, Flip-fl0p сказал:

Так надо IP правильно подключить.

Как надо IP правильно подключать?

Почему PLL автоматически подключился и я ничего дополнительно не делал.

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


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

2 часа назад, Freibier сказал:

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

а если такая схема?

Безымянный.png

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


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

38 минут назад, Jackov сказал:

а если такая схема?

Вроде именно так и реализовано в ALTCLKCTRL.

Но уже не актуально.

:gamer1:Отыскал и добавил к проекту файл ECLK.qip и всё заработало с хардварным блоком ALTCLKCTRL. :dance4:

 

2 часа назад, Yuri124 сказал:

Да, то что нужно.

Всем спасибо!

Изменено пользователем Freibier

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


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

Интересуюсь чисто в образовательных целях.

Подскажите: 

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

ClkA и CLKB - выходы PLL плис. clkout - тактирует всю схему плис.

Сигналы clksel, clken формируются внешней мс  и поступают на обычные I/O плис.

Любое изменение сигнала clksel возможно только когда сигнал clken в нуле.

Длительность нуля на clken всегда больше 2-3 тактов минимальной из частот  (clkA,clkB).

На верилоге изобразил так:

 

module CLK( input clkA, clkB, clksel, clken, output clkout);

wire tclk = clksel ? clkA : clkB;

reg tenb;
always @(negedge tclk) tenb <= clken;

assign clkout = tclk & tenb;

endmodule

 

RTL:

2.thumb.jpg.b7b47553748bfe96932a22787f5362ae.jpg

 

Можно ли так делать?

 

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


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

2 часа назад, Freibier сказал:

Можно ли так делать?

Посмотрите вот здесь, начиная с 27:49

https://youtu.be/kju8fPDxi3Y?t=1669

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


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

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

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

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

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

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

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

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

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

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