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

Фазы выходных клоков после реконфигурации случайные. Пример - задаем одинаковую частоту для всех выходных клоков, фазы получаются с точностью 180град, случайным образом. Как избежать этого, и получать заданную фазу? 

Если без реконфигурации, фазы получаются такие, как задано в корке. 

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


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

может там делители (триггера) какие есть - то есть в них случайные 1 и 0 остаются, чтобы фазы выровнять должен быть сброс

это про плл вообще, насколько для циклона справедливо - хз

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


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

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

Фазы выходных клоков после реконфигурации случайные. Пример - задаем одинаковую частоту для всех выходных клоков, фазы получаются с точностью 180град, случайным образом. Как избежать этого, и получать заданную фазу? 

Если без реконфигурации, фазы получаются такие, как задано в корке. 

А как реконфигурируете PLL ? 

Как получаете конфиги ?

Какие настройки изначальные ?

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


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

В документе https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/cyclone-iv/cyiv-52003.pdf

упоминается 

Quote

ALTPLL_RECONFIG Instance Dynamic PLL reconfiguration controller instance generated by the ALTPLL_RECONFIG Megawizard Plug-In Manager

Может Вам его применить?

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


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

Один раз создал при помощи мегавизарда Верилоговский файл мегафункции ALTPLL, далее все изменения делаю непосредственно в этом файле. Все стабильно работает, если не делать реконфигурацию, все фазы всегда правильные. Реконфигурацию делаю при помощи этой-же функции, загоняя 144 бит данных. Все работает, кроме фазы, она м/б повернута на 180град (даже если ее не двигаю, и задаю "0" в мегафункции). Где-то в доках написано, что такое может быть. Как-же тогда работает статическая конфигурация, там фазы всегда правильные ?

// megafunction wizard: %ALTPLL%
module pllreconfshift (
    input inclk0,
    input areset,
    input configupdate,
    input phasestep,
    input [2:0] phasecounterselect,
    input phaseupdown,
    input scanclk,
    input scanclkena,
    input scandata,    
    output [4:0] cout,
    output phasedone,
    //output scandataout,
    output scandone
);
altpll altpll_component (
    .areset (areset),
    .configupdate (configupdate),
    .inclk ({1'h0, inclk0}),
    .phasecounterselect (phasecounterselect),
    .phasestep (phasestep),
    .phaseupdown (phaseupdown),
    .scanclk (scanclk),
    .scanclkena (scanclkena),
    .scandata (scandata),
//    .locked (locked),
    .clk (cout),
    .phasedone (phasedone),
//    .scandataout (scandataout),
    .scandone (scandone),
    .clkena ({6{1'b1}}),
    .clkswitch (1'b0),
    .extclkena ({4{1'b1}}),
    .fbin (1'b1),
    .pfdena (1'b1),
    .pllena (1'b1),
    .scanaclr (1'b0),
    .scanread (1'b0),
    .scanwrite (1'b0)
);
defparam
//    altpll_component.scan_chain_mif_file = "pllreconf.mif",
    altpll_component.bandwidth_type = "AUTO",
    altpll_component.clk0_divide_by = 1,
    altpll_component.clk0_duty_cycle = 50,
    altpll_component.clk0_multiply_by = 1,
    altpll_component.clk0_phase_shift = "0",
    altpll_component.clk1_divide_by = 1,
    altpll_component.clk1_duty_cycle = 50,
    altpll_component.clk1_multiply_by = 1,
    altpll_component.clk1_phase_shift = "0", 
    altpll_component.clk2_divide_by = 1,
    altpll_component.clk2_duty_cycle = 50,
    altpll_component.clk2_multiply_by = 1,
    altpll_component.clk2_phase_shift = "0",    
    altpll_component.clk3_divide_by = 1,
    altpll_component.clk3_duty_cycle = 50,
    altpll_component.clk3_multiply_by = 1,
    altpll_component.clk3_phase_shift = "0",        
    altpll_component.clk4_divide_by = 1,
    altpll_component.clk4_duty_cycle = 50,
    altpll_component.clk4_multiply_by = 1,
    altpll_component.clk4_phase_shift = "0",    
    altpll_component.compensate_clock = "CLK0",
    altpll_component.inclk0_input_frequency = 40000,
    altpll_component.intended_device_family = "Cyclone IV E",
    altpll_component.lpm_type = "altpll",
    altpll_component.operation_mode = "NORMAL",
    altpll_component.pll_type = "AUTO",
    altpll_component.port_areset = "PORT_USED",
    altpll_component.port_configupdate = "PORT_USED",
    altpll_component.port_inclk0 = "PORT_USED",
//    altpll_component.port_locked = "PORT_USED",
    altpll_component.port_phasecounterselect = "PORT_USED",
    altpll_component.port_phasedone = "PORT_USED",
    altpll_component.port_phasestep = "PORT_USED",
    altpll_component.port_phaseupdown = "PORT_USED",
    altpll_component.port_scanclk = "PORT_USED",
    altpll_component.port_scanclkena = "PORT_USED",
    altpll_component.port_scandata = "PORT_USED",
//    altpll_component.port_scandataout = "PORT_USED",
    altpll_component.port_scandone = "PORT_USED",
    altpll_component.port_clk0 = "PORT_USED",
    altpll_component.port_clk1 = "PORT_USED",
    altpll_component.port_clk2 = "PORT_USED",
    altpll_component.port_clk3 = "PORT_USED",
    altpll_component.port_clk4 = "PORT_USED",
    altpll_component.self_reset_on_loss_lock = "OFF",
    altpll_component.vco_frequency_control = "MANUAL_PHASE",
    altpll_component.vco_phase_shift_step = 100,
    altpll_component.width_clock = 5,
    altpll_component.width_phasecounterselect = 3;
endmodule

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


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

Как то очень давно мучался подстраивал фазы PLL, может после реконфига подстроить просто надо с помощью сигналов управляющих phasexxxx?
Интересно, если после реконфига сделать резет pll, новые настройки сбросятся?

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


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

1 hour ago, Leka said:

создал при помощи мегавизарда Верилоговский файл мегафункции ALTPLL

Реконфигурацию делаю при помощи этой-же функции

а если сравнить, что делает альтеровский реконфигурационный контроллер? Или - тупо его добавить в проект, и делать реконфигурацию уже с его помощью?

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


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

Подскажите, можно ли с помощью Cyclone-овской PLL управлять внешним VCO? Режим внешней обратной связи вроде в некоторых реализациях ALTPLL упоминается, а вот как вытащить сигналы для аналогового ФД из микросхемы- непонятно.

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


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

Внешние связи - прочерк для Циклонов. 

111.png

19 minutes ago, Yuri124 said:

тупо его добавить в проект

Не получится, использую только чистый Верилог + мегафункции.

57 minutes ago, new123 said:

после реконфига подстроить просто надо с помощью сигналов управляющих phasexxxx?

Сложно, частоты то высокие, 500МГц может быть.

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


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

10 minutes ago, Leka said:

Внешние связи - прочерк для Циклонов.

Думаю - это цифровые выходы, а товарищу, как понимаю, нужен аналоговый сигнал для управления внешним VCO.

Теоретически - можно попробовать вывести наружуFPGA цифровое представление аналогового сигнала (например, ШИМ), но вряд ли это будет работоспособно при замкнутой петле ФАПЧ - т.к. время реакции, боюсь, будет огромное. 

Если есть желание погрузиться в теорию ФАПЧ -можно попробовать теоретически рассчитать устойчивость такой петли.

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


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

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

4 hours ago, Leka said:

Фазы выходных клоков после реконфигурации случайные. Пример - задаем одинаковую частоту для всех выходных клоков, фазы получаются с точностью 180град, случайным образом. Как избежать этого, и получать заданную фазу? 

Если без реконфигурации, фазы получаются такие, как задано в корке. 

На  сколько я помню фазы  выходных клоков в PLL в Altera определяются выбором одной из 8 фаз VCO и  начальным состоянием  выходных делителей.  А точность установки фазы зависит от частоты VCO.  Поэтому после (или в процессе) переконфигурирования  нужно коректно  сбросить/установить начальные значения этих  счетчиков. IMHO нужно копать в эту  сторону. 

 

Удачи! Rob.   

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


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

26 minutes ago, Leka said:

использую только чистый Верилог + мегафункции

так он - разве не мегафункция?

Ну или если именно его нельзя - разобраться, как он работает, чтобы понять - чего не хватает еще, кроме тех 144 бит. 

Выше - дельную мысль подбросили ИМХО.

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


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

39 minutes ago, Yuri124 said:

так он - разве не мегафункция?

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

 

49 minutes ago, RobFPGA said:

сбросить/установить начальные значения этих  счетчиков

Вот не могу нигде найти про это. Есть только сигналы сдвига фазы на 1/8 VCO.  

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


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

5 часов назад, Leka сказал:

Фазы выходных клоков после реконфигурации случайные. Пример - задаем одинаковую частоту для всех выходных клоков, фазы получаются с точностью 180град, случайным образом. Как избежать этого, и получать заданную фазу? 

Если без реконфигурации, фазы получаются такие, как задано в корке. 

Доброго времени суток!

Сброс должен выполняться синхронно с синфазно требуемому сигналу. Скажу больше - если внешний начальный сброс у вас сделан каким-нибудь асинхронным контроллером, то "Если без реконфигурации, фазы получаются такие, как задано в корке. " - чистое везение.

Конкретно на Cyclone таких задач не решал, но в StratixV такие вопросы возникали и решались синхронным сбросом синфазно и с требуемой точностью.

П.С. Выше уже написали ответ...

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


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

1 hour ago, Yuri124 said:

Думаю - это цифровые выходы, а товарищу, как понимаю, нужен аналоговый сигнал для управления внешним VCO.

Внутренняя ФАПЧ не тянет по фазовому шуму, поэтому понадобился внешний VCO.

Да, типа как в этом проекте. http://www.aholme.co.uk/Frac2/Main.htm

Но тут древняя альтеровская CPLD используется, запрограммирована в графике. И ФД немного криво сделан. Выводить наружулучше два сигнала цифровых с ФД ( to_slow/to_fast) и суммировать их и фильтровать на ОУ. Так задержки компенсируются лучше.

Или вообще ставить внешний ФД на дискретных триггерах.
Вот и хотелось эти сигналы вытянуть из существующей мегакорки чтобы самому не писать.

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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