Jump to content
    

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

Есть проект на плис 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?

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

Share this post


Link to post
Share on other sites

10 minutes ago, Freibier said:

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

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

[email protected](posedge clk) if(en) begin … end

Share this post


Link to post
Share on other sites

Не пойдёт.

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

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

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

Share this post


Link to post
Share on other sites

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

clk_out = enable ? clk : 0'b0;

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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?

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

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

Share this post


Link to post
Share on other sites

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   - это поможет?

Share this post


Link to post
Share on other sites

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

3 hours ago, Freibier said:

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

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

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

 

Удачи! Rob.  

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Только что, 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 правильно подключить.

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

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

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

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

Edited by Freibier

Share this post


Link to post
Share on other sites

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

Подскажите: 

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

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

 

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...