|
|
  |
Правильное использование locked у PLL |
|
|
|
Jan 22 2015, 18:27
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Приветствую! Имеется Cyclone4, а в нём имеется PLL. Как известно PLL на рабочий режим выходит не сразу, сразу после запуска она выдаёт нестабильную частоту. Тактировать схемы такой нестабильной частотой, понятное дело, нельзя - могут сбойнуть. Для этого в PLL предусмотрен специальный выход "locked". Доподлинно неизвестно синхронизирован ли этот выход с тактовой частотой выдаваемой PLL, или нет. Потому встаёт вопрос: как правильно использовать этот выход. Я предлагаю такую схему:
На Verilog-е выглядит так: Код module M1( .................................... (*chip_pin = "Y2"*) input inMHz50);
wire Locked33_6, MHz33_6_; PLL1 PLL1(.c0(MHz33_6_), .locked(Locked33_6), .inclk0(inMHz50)); wire Enable33_6Q; DFF Enable33_6(.q(Enable33_6Q), .d(Locked33_6), .clk(MHz33_6_), .clrn(1'd1), .prn(1'd1)); wire MHz33_6; LCELL Cell(.out(MHz33_6), .in(Enable33_6Q & MHz33_6_));
.......ля-ля-ля тополя....... endmodule LCELL нужен только для того чтобы на него сослаться в констрейнах, по другому я не сумел. Сами констрейны выглядят так: Код derive_clock_uncertainty
#тактовая частота с генератора 50МГц create_clock -period 50MHz -name {inMHz50} [get_ports {inMHz50}]
#тактовая частота с PLL create_generated_clock -name MHz33_6_ -source [get_ports {inMHz50}] [get_pins {PLL1|altpll_component|auto_generated|pll1|clk[0]}] -divide_by 5 -multiply_by 7 -duty_cycle 70.00 create_generated_clock -name MHz33_6 -source [get_pins {PLL1|altpll_component|auto_generated|pll1|clk[0]}] [get_nets {Cell}] -invert То что в названии частоты присутствует 33,6 МГц - это пережиток прошлого, сейчас там 70. В последней строчке я и ссылаюсь на LCELL, "-invert" присутствует из-за того что компилятор по каким-то своим причинам инвертирует сигнал после LCELL. Вопроса, собственно, два: Правильно ли использовать выход "locked" подобным образом? И если правильно, правильно ли заданы констрейны?
Сообщение отредактировал Jackov - Jan 22 2015, 18:28
|
|
|
|
|
Jan 23 2015, 08:46
|
Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574

|
У xilinx есть клоковые буферы со входом enable, у альтеры, наверное, тоже есть подобное. Можно использовать locked в качестве сигнала сброса. Всякие хитрые манипуляции с тактовой, мне кажется, до добра не доведут..
И еще, обычно трассы для тактовых сигналов в плисах отделены от обычной логики, элемента "И" может и не оказаться, тогда клок разведется через логику, и опять в клоки. Такой каши лучше избегать.
Сообщение отредактировал Opex - Jan 23 2015, 09:00
|
|
|
|
|
Jan 23 2015, 09:13
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(bogaev_roman @ Jan 23 2015, 12:07)  to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю. И я. Код module Reset_m ( input bit res_ext, //!< External reset (knob, port) input bit no_lock, //!< PLL no locked reset input bit res_cmd, //!< MCU command reset input bit clks, //!< Slow Clock output bit res_int //!< Internal wide device reset ); bit rest; //!< Reset start assign rest = res_ext || no_lock || res_cmd; bit [1:0] ress; //!< Reset sequence always_ff @(posedge rest, posedge clks) begin if (rest) ress <= '1; else ress <= {ress[0], 1'b0}; end assign res_int = ress[1];
endmodule : Reset_m
|
|
|
|
|
Jan 23 2015, 16:22
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(Opex @ Jan 23 2015, 11:46)  У xilinx есть клоковые буферы со входом enable, у альтеры, наверное, тоже есть подобное. Ммм... не совсем понял. Цитата(Opex @ Jan 23 2015, 11:46)  Всякие хитрые манипуляции с тактовой, мне кажется, до добра не доведут.. Согласен, сам такое не люблю. Но я же немножко.  Как я думаю, дребезгов, гонок и прочих гличей быть не должно. Цитата(Opex @ Jan 23 2015, 11:46)  И еще, обычно трассы для тактовых сигналов в плисах отделены от обычной логики, элемента "И" может и не оказаться, тогда клок разведется через логику, и опять в клоки. Такой каши лучше избегать. Забыл написать, этот LCELL подключил к глобальному клоку, судя по Чип Планеру, действительно подключился. Цитата(Opex @ Jan 23 2015, 11:46)  Можно использовать locked в качестве сигнала сброса. Цитата(bogaev_roman @ Jan 23 2015, 12:07)  to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю. Цитата(ViKo @ Jan 23 2015, 12:13)  И я. Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает.
|
|
|
|
|
Jan 23 2015, 17:18
|
Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574

|
Цитата(Jackov @ Jan 23 2015, 21:22)  Ммм... не совсем понял. У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок. Цитата(Jackov @ Jan 23 2015, 21:22)  Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает. Вы вручную что ли все разводить собираетесь? А кто без ресета все в нужное начальное состояние устанавливает?
|
|
|
|
|
Jan 23 2015, 18:40
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(Hose @ Jan 23 2015, 20:10)  Яков, начните с изучения плл. Он красиво нарисован в описании на семейство... И есть у меня такое подозрение, что там уже реализовано отключение выхода при отсутствии захвата. Если не найдете, или нет такой функции, то не стоит делать, поскольку захват плл - штука условная и аналоговая, учитывая ширину петли альтеровского плл. Устанете потом искать куда пропадают такты. Что я могу сказать? Смотрел осциллографом, когда этот locked переходит в 1 частота к этому времени действительно стабилизируется. А без него схема сбоит. Цитата(Opex @ Jan 23 2015, 20:18)  У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок. Ага, спасибо за наводку, посмотрю. Цитата(Opex @ Jan 23 2015, 20:18)  Вы вручную что ли все разводить собираетесь? Цитата(SM @ Jan 23 2015, 20:51)  Это, с какого перепуга то? Я, конечно, утверждать не берусь, но рассуждая логически, чем сложнее трассировка, тем хуже тайменги, а у меня и так констрейны с натяжкой сходятся. Хотя если для асинхронного сброса есть специально выделенная сеть, как для клоков, тогда да, тогда усложнить не должно. Цитата(Opex @ Jan 23 2015, 20:18)  А кто без ресета все в нужное начальное состояние устанавливает? Цитата(SM @ Jan 23 2015, 20:51)  У Вас и так резет обязан быть. Вот к нему и примешать lock. Ну почему же обязан? Кто ПЛИСку ресетить будет? Некому её ресетить. Я не знаю как у Хилых, но Альтера гарантирует при старте нулевые состояния на всех триггерах. Цитата(DuHast @ Jan 23 2015, 21:36)  Только меня смущает, что на MHz33_6 не будет ни какой частоты? Она там есть, только 70 Мгц - имена старые остались.
|
|
|
|
|
Jan 23 2015, 18:43
|

Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797

|
Цитата(Jackov @ Jan 23 2015, 21:40)  Она там есть, только 70 Мгц - имена старые остались. У Вас MHz33_6 = locked AND (locked задержанный на такт) откуда там клок?
|
|
|
|
|
Jan 23 2015, 19:08
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(DuHast @ Jan 23 2015, 21:43)  У Вас MHz33_6 = locked AND (locked задержанный на такт) откуда там клок? Да, картинку криво нарисовал, верхний вход элемента И должен быть подключён к клоку от PLL.
|
|
|
|
|
Jan 26 2015, 14:58
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(ViKo @ Jan 23 2015, 22:00)  Вижу в Мегавизарде Альтеры Enable self-reset on loss lock. Отметить галкой и забыть про сбои. Посмотрел, это не то. Цитата(SM @ Jan 23 2015, 21:52)  Именно так. Тем более, что домешивание LOCK к и так имеющемуся резету, добавит лишь один логический элемент во всю схему, никак более ее не изменив. Нет желания возиться с этими сбросами, хотелось бы обойтись малой кровью. Цитата(Opex @ Jan 23 2015, 20:18)  У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок. Да, нашёл:
Пожалуй остановлюсь на этом варианте. Завёл locked с PLL на вход разрешения напрямую, надеюсь пичёк в начале не проскочит.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|