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

проблемы при создании PLL в Libero 9.1

Доброе время суток.

Столкнулся с неожиданной проблемой. По долгу службы пришлось перейти с квартуса на Libero. При создании самого первого проекта из getting started, обнаружил полное отсутвтвие признаков жизни PLL, которое я использовал. Вот его внешний вид

post-55287-1363833091_thumb.png

Проект простой - мегание светодиодами. Без PLL светодиоды моргают отлично, а вот с ним никак. Вот собственно сам проект:

post-55287-1363833227_thumb.png

Использую A3PE_STARTER_KIT с A3PE1500 PQG208 на борту.

Если не достаточно информации - обязательно добавлю.

Заранее спасибо!)

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


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

Первое, что настораживает, это то, что в качестве источника выбран External I/O, а на верхнем уровне clock заведён не только на PLL, но ещё и на счётчик, вроде как генератор PLL пихает входной буфер в такой конфигурации внутрь модуля PLL_075MHZ.

Ещё не понятно, что подаётся на buttom_in[1:0].

Пробовали отсимулировать?

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


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

Сейчас попробую пустить на прямую и отдельно через внутренний буфер.

Вход clock я уже от безнадежности завел на счетчик, в изначальной схеме оно не работало и при подачи клока исключительно на pll. Да, симулировать пробовал и до фитинга и после. В обоих случаях pll выдает нормальный клок и LOCK. В том-то и вопрос у меня - почему симуляция работает, а в кристалле нет (забыл написать, что симулировал).

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


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

Сейчас попробую пустить на прямую и отдельно через внутренний буфер.

Вход clock я уже от безнадежности завел на счетчик, в изначальной схеме оно не работало и при подачи клока исключительно на pll. Да, симулировать пробовал и до фитинга и после. В обоих случаях pll выдает нормальный клок и LOCK. В том-то и вопрос у меня - почему симуляция работает, а в кристалле нет (забыл написать, что симулировал).

 

А вы проверяли, правильно ли назначены пины для сигналов button_in[1:0]?

В реальной железке PLL в захвате, т.е. led_out[6] светится?

Выложите результаты синтеза (файл .srr).

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


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

А можно увидеть верхний уровень, где PLL подключается с модулю?

А та кже тесбенч (симуляционную модель).

 

И еще одно важное замечание. Если в качестве порта ввода клока используется порт с функцией глобального входа/выхода, то вход PLL можно подключать напрямую, а если это только порт общего назначения, то нужно подключать через примитив CLKINT.

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

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


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

Сам проект верхнего уровня:

-- first_project.vhd
----------------------------------------------------------------------
-- Created by Actel SmartDesign Tue Mar 19 18:16:17 2013
-- Testbench Template
-- This is a basic testbench that instantiates your design with basic 
-- clock and reset pins connected.  If your design has special
-- clock/reset or testbench driver requirements then you should 
-- copy this file and modify it. 
----------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

entity first_project is
PORT
   (
   led_out     : OUT STD_LOGIC_VECTOR(7 downto 0):=(OTHERS => '0');
   button_in   : IN STD_LOGIC_VECTOR (3 downto 0);
   test_out    : OUT STD_LOGIC_VECTOR (7 downto 0):=(OTHERS => '0');
   clock40     : IN STD_LOGIC
   );
end first_project;

architecture ARCH of first_project is
---SIGNAL---
SIGNAL clock20 : STD_LOGIC;
SIGNAL count_q : STD_LOGIC_VECTOR (19 downto 0);
---
---COMPONENT_LIST---
COMPONENT PLL_20 is 
   port
   (
       POWERDOWN, CLKA : in std_logic;
       LOCK, GLA : out std_logic
   );
END COMPONENT;

COMPONENT counter_20 is

   port( Aclr  : in    std_logic;
         Clock : in    std_logic;
         Q     : out   std_logic_vector(19 downto 0)
       );

end COMPONENT;
---
begin

---COMPONENT_DECLARATION---
PLL_20_0 : PLL_20
   port map
   (
       POWERDOWN   => '1', 
       CLKA        => clock40,
       LOCK        => test_out(0),
       GLA         => clock20
   );

counter_20_0 : counter_20
   port map
   (
           Aclr  => button_in(0),
           Clock => clock20,
           Q => count_q

   );

led_out <= count_q(19 downto 12);
test_out(7 downto 2) <= count_q(5 downto 0);
test_out(1) <= clock20;
---
end ARCH;

test_bench:

-- testbench.vhd----------------------------------------------------------------------
-- Created by Actel SmartDesign Tue Mar 19 18:16:17 2013
-- Testbench Template
-- This is a basic testbench that instantiates your design with basic 
-- clock and reset pins connected.  If your design has special
-- clock/reset or testbench driver requirements then you should 
-- copy this file and modify it. 
----------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

entity testbench is
end testbench;

architecture behavioral of testbench is

   constant SYSCLK_PERIOD : time := 25 ns;

   signal SYSCLK : std_logic := '0';
   signal NSYSRESET : std_logic_vector(3 downto 0);
   signal led_out : std_logic_vector(7 downto 0);
   signal test_out : std_logic_vector(7 downto 0);


COMPONENT first_project is
PORT
   (
   led_out     : OUT STD_LOGIC_VECTOR(7 downto 0);
   button_in   : IN STD_LOGIC_VECTOR (3 downto 0);
   test_out    : OUT STD_LOGIC_VECTOR (7 downto 0);
   clock40     : IN STD_LOGIC
   );
end COMPONENT;

begin

   process
       variable vhdl_initial : BOOLEAN := TRUE;

   begin
       if ( vhdl_initial ) then
           -- Assert Reset
           NSYSRESET <= (OTHERS => '0');
           wait for ( SYSCLK_PERIOD * 1000 );
           NSYSRESET <= (OTHERS => '1');
           wait for ( SYSCLK_PERIOD * 1000 );
           NSYSRESET <= (OTHERS => '0');
           wait;
       end if;
   end process;

   -- 40MHz Clock Driver
   SYSCLK <= not SYSCLK after (SYSCLK_PERIOD / 2.0 );

   -- Instantiate Unit Under Test:  top
   first_project_0 : first_project 
   PORT MAP
       (
           led_out     => led_out,
           button_in   => NSYSRESET,
           test_out    => test_out,
           clock40     => SYSCLK 
       );

end behavioral;

 

Файл .srr: first_project.zip

 

 

 

И пару вопросов:

В какой из подутилит Libero можно назначить глобальный вход/выход?

И как из под .vhdl файла верхнего уровня подключить CLKINT на вход плл? Нашел ответ.

 

Я переписал проект, сделав верхним уровнем файл не из под Smart Disign, а VHDL файл.

 

Защелка для плл, выведенная на ножку находится в нижнем положении.

 

Вот результат симуляции. На инвертированный вход POWERDOWN PLL подается постоянная '1'.

post-55287-1364186797_thumb.jpg

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

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


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

Файл .srr: first_project.zip

 

Синтез нормальный вроде, PLL не выбрасывается.

Моё предположение - неправильно назначен пин для button_in[0] или на этот вход снаружи подаётся не то, что нужно ("1").

 

И пару вопросов:

 

В какой из подутилит Libero можно назначить глобальный вход/выход?

 

Можно назначить в файле констрейнов для Designer'a (.pdc): assign_global_clock -net MSS_CORE_0_M2F_RESET_N

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


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

Я в последнем проекте заменил button_in[0] на постоянную '1'. Результат тот же.

На синтез я тоже смотрел, в RTL, и непосредственно на чипе. Есть PLL, никуда не девается.

У меня есть подозрение, что проблема больше в железе - некорректная работа этого конкретного блока PLL или неправильное питание блоков PLL.

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


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

Я в последнем проекте заменил button_in[0] на постоянную '1'. Результат тот же.

 

Так ведь надо вроде button_in[0] = 0, чтобы мигало. По крайней мере, так в вашей симуляции.

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


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

Я видимо не правильно объяснил.

С миганием проблем нет. Все работает как надо, в том числе очистка счетчиков по нажатию кнопки.

А вот плл не работает вообще.

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


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

Я видимо не правильно объяснил.

С миганием проблем нет. Все работает как надо, в том числе очистка счетчиков по нажатию кнопки.

А вот плл не работает вообще.

 

Так ведь вы счётчик тактируете 20 МГц из pll, и если счётчик считает и диоды мигают, то значит pll работает. Разве не так?

 

Пин test_out[0] в каком состоянии?

 

На test_out[1] есть 20 МГц?

 

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


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

Я пришел к выводу, что проблема все-таки непосредственно в физической PLL. Залил стандартный проверочный проект, и он частично не работает. Причем именно та часть, которая тактируется от PLL.

Остальное работает(всякие асинхронные resetы и clearы). Жалко отладочник.

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


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

Я пришел к выводу, что проблема все-таки непосредственно в физической PLL. Залил стандартный проверочный проект, и он частично не работает. Причем именно та часть, которая тактируется от PLL.

Остальное работает(всякие асинхронные resetы и clearы). Жалко отладочник.

А JP49 и JP50 на плате у вас замкнуты? Т.е., питание подаётся на PLL?

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


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

Вы правы, и нашел в даташите на STARTER KIT эти пины и способы их подключения. Я еще хотел проверить питание, но не сподобился.

Но у меня PROTO KIT, так что подключить питание на прямую я не могу. Видимо придется в тупого брать проводок и подключать к источнику на плате.

 

Огромное спасибо вам за помощь!

 

Да, просто проводком питание присоединил и все заработало. Мне бы и в голову не пришло, что PLL можно не подключать) Будет мне наука.

 

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

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


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

Доброе время суток.

Столкнулся с неожиданной проблемой. По долгу службы пришлось перейти с квартуса на Libero. При создании самого первого проекта из getting started, обнаружил полное отсутвтвие признаков жизни PLL, которое я использовал. Вот его внешний вид

post-55287-1363833091_thumb.png

Проект простой - мегание светодиодами. Без PLL светодиоды моргают отлично, а вот с ним никак. Вот собственно сам проект:

post-55287-1363833227_thumb.png

Использую A3PE_STARTER_KIT с A3PE1500 PQG208 на борту.

Если не достаточно информации - обязательно добавлю.

Заранее спасибо!)

 

Я сразу не обратил внимание, но схема изначально сделана не правилно. Не используйте в качестве тактовых сигналов сигнальные цепи. На вход CLK надо всегда подавать тактовый сигнал! Замучаетесь с задержками. Схема может не работать. При такой схеме в качестве тактовой используются обычные трассировочные цепи ПЛИС, а не глобальные. Задержки не предсказуемы. Да и с трассировкой будут проблемы. Трассировщик привязывается к клоку. Он трассиирует сигналы так, чтобы задержки от тригера до триггера были меньше такта. Но здесь нет тактовых сигналов!!! Какая должна быть задержка с выхода первого счетчика до входа второго? В ПЛИС надо использовать синхронный дизан! Клок- зто клок, а в качестве сигнала записи используйте вход разрешения записи. Это неприложное правило!!!

 

Во вторых, сигнал сброса тоже должен быть глобальным. Это связано еще и с архитектурой ячейки ПЛИС.

 

Кстати, как я понимаю, симулировалась только RTL модель. Мои рекомендации - всегда проверяйте на симуляции посттрасировочную модель.

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

 

Вы правы, и нашел в даташите на STARTER KIT эти пины и способы их подключения. Я еще хотел проверить питание, но не сподобился.

Но у меня PROTO KIT, так что подключить питание на прямую я не могу. Видимо придется в тупого брать проводок и подключать к источнику на плате.

 

Огромное спасибо вам за помощь!

 

Да, просто проводком питание присоединил и все заработало. Мне бы и в голову не пришло, что PLL можно не подключать) Будет мне наука.

 

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

 

Почему нельзя? На PROTO KIT можно отключить все питания. так же можно джамперами отключать и питание PLL. Посмотрите по схеме. Новый StarterKit от старого PROTO KIT по-сути мало чем отличается. Поставили другой дисплей и источники питания, да название сменили. Но схема подключения ПЛИС не изменилась.

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

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


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

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

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

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

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

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

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

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

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

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