реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Много тактовых в большом проекте
Denisnovel
сообщение Aug 6 2015, 13:30
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



В большом проекте получается порядка 20 тактовых домена. Предполагается работать с трафиком похожем на ethernet. По предыдущем проектам возникали проблемы при разводке кристалла из-за нехватки глобальных клоков. Есть 2 возможных выхода:
1) Оставить 20 клоков.
2) Сделать в каждом модуле вход разрешения и использовать один клок(чуть большей чем необходимо).
Как лучше поступить?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 6 2015, 13:40
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Denisnovel @ Aug 6 2015, 16:30) *
В большом проекте получается порядка 20 тактовых домена. Предполагается работать с трафиком похожем на ethernet. По предыдущем проектам возникали проблемы при разводке кристалла из-за нехватки глобальных клоков. Есть 2 возможных выхода:
1) Оставить 20 клоков.
2) Сделать в каждом модуле вход разрешения и использовать один клок(чуть большей чем необходимо).
Как лучше поступить?

№2 однозначно...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Aug 6 2015, 14:06
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



На самом деле вопрос тот еще. С системной точки зрения один клок - безусловно проще и меньше рисков на "функциональном" уровне. Дальше же начинаются всякие "но".
Если проект большой и сложный, то единый клок (да еще большей частоты, чем минимально необходим) гуляющий по всему кристаллу может стать проблемой в плане производительности. Недаром в современных кристаллах стали появляться клоковые цепи не только глобальные, но и разделенные по регионам. Так что если какие-то части проекта можно уложить в отдельный регион кристалла и использовать региональный клок - это плюс. Понятное дело, что если кристалл простенький только с общими глобальными клоками, то выбор намного упрощается wink.gif
В общем стоит смотреть по используемому кристаллу и нагрузке как по ресурсам, так и по требуемой частоте.
Go to the top of the page
 
+Quote Post
ASN
сообщение Aug 6 2015, 15:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



Denisnovel
Сложный вопрос.
IMHO, от структуры проекта многое зависит.
У нас 5 разных таковых частот в проекте, но модули решают каждый свою задачу, имеют хорошую локализацию (в кристалле и на плате) и частоты формируется от одной исходной.
На выходе модулей переход на глобальную частоту: и отлаживать проще и кристалл используется эффективнее.
Без информации о "потрохах" трудно что-то дельное посоветовать.
Go to the top of the page
 
+Quote Post
des00
сообщение Aug 6 2015, 15:14
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



у меня в проектах гуляет до 20 тактовых. разумное разбиение и корректные переходы между клоками рулят.


--------------------
Go to the top of the page
 
+Quote Post
johan
сообщение Aug 6 2015, 15:16
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 3-09-12
Пользователь №: 73 371



Одна системная по разработке и поддержке, конечно, приятнее чем куча клоков.

Какие значения частот у этих 20 клоков? Меняются ли они динамически во время работы? Или все клоки это RX_CLK, от каких-то трансиверов?


--------------------
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 6 2015, 18:24
Сообщение #7


Универсальный солдатик
******

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



Не могу представить 20 тактовых частот, могу, максимум, 5. Цифры назовите, пожалуйста, не дайте пропасть тупым. rolleyes.gif
Go to the top of the page
 
+Quote Post
krux
сообщение Aug 6 2015, 19:32
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



понимаю, если бы частоты соответствовали 20 различным видам интерфейсов, критичных к ppm и/или джиттеру.
в противном случае не понимаю.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Aug 7 2015, 05:59
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Цитата(johan @ Aug 6 2015, 18:16) *
Одна системная по разработке и поддержке, конечно, приятнее чем куча клоков.

Какие значения частот у этих 20 клоков? Меняются ли они динамически во время работы? Или все клоки это RX_CLK, от каких-то трансиверов?

150-166 MHz. Да все TX RX от трансиверов. Частоты могут динамически меняться. Интерфейсы критичны к джиттеру и ppm.
Go to the top of the page
 
+Quote Post
krux
сообщение Aug 7 2015, 06:27
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



найти то место, где можно перейти от этих 20 разных к одному общему, например, 200МГц. дальше всю обработку делать на нём.

если какой-нибудь STM или OTN, то однозначно - так и делается.
в STM переход производится сразу после обработки указателей H1H2. VC4 перекладывается в фифо, а вынимается на той частоте, на которой работает основной домен, занимающийся обработкой.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 7 2015, 06:44
Сообщение #11


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Denisnovel @ Aug 6 2015, 16:30) *
В большом проекте получается порядка 20 тактовых домена. Предполагается работать с трафиком похожем на ethernet. По предыдущем проектам возникали проблемы при разводке кристалла из-за нехватки глобальных клоков. Есть 2 возможных выхода:
1) Оставить 20 клоков.
2) Сделать в каждом модуле вход разрешения и использовать один клок(чуть большей чем необходимо).
Как лучше поступить?

Я бы выбрал пункт 2.
PS Если хорошо подумать думаю можно уменьшить кол-во тактовых...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 7 2015, 07:38
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Denisnovel @ Aug 7 2015, 08:59) *
150-166 MHz. Да все TX RX от трансиверов. Частоты могут динамически меняться. Интерфейсы критичны к джиттеру и ppm.

Посмотрите, как это сделано в ПЛИС Акроникс. Там для каждого набора из 8 (кажется так) входных выводов под RX есть своя тактовая... Потом коммутатор тактовых... И еще аппаратные приемники со сдвигами битов...



--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 7 2015, 08:17
Сообщение #13


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Посмотрите, это, возможно поможет

Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

library UNISIM;
use UNISIM.VComponents.all;

entity dcm_clockgen_test is
    Port ( clk_in  : in  STD_LOGIC;
           clk_out : out STD_LOGIC;
           sw      : in  STD_LOGIC_VECTOR (3 downto 0));
end dcm_clockgen_test;

architecture Behavioral of dcm_clockgen_test is
   signal prog_data_sr : std_logic_vector(27 downto 0) := (others => '0');
   signal prog_en_sr   : std_logic_vector(27 downto 0) := (others => '0');
  
   signal prog_data    : std_logic;
   signal prog_en      : std_logic;
  
   signal desired_mode: std_logic_vector(3 downto 0)   := "0001";
   signal current_mode: std_logic_vector(3 downto 0)   := "0000";
begin
   prog_data <= prog_data_sr(0);
   prog_en   <= prog_en_sr(0);
  
process(clk_in)
   begin
      if rising_edge(clk_in) then
         -- Update the clock reprogramming signals
         prog_en_sr   <= '0' & prog_en_sr((prog_en_sr'length)-1 downto 1);
         prog_data_sr <= '0' & prog_data_sr((prog_data_sr'length)-1 downto 1);
        
         -- Do we need to switch modes?
         if desired_mode /= current_mode and unsigned(prog_en_sr) = 0 then
            case desired_mode is
            when "0001"  =>
               -- switch to 25MHz
               prog_en_sr   <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two 10-bit xfers + 1-bit 'go'
               prog_data_sr <= "0000" & "00001010" & "11" & "0000" & "00001101" & "01"; -- Code for D 14 M 11
               current_mode <= desired_mode;

            when "0010"  =>
               -- switch to 40MHz
               prog_en_sr   <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two x 10-bit xfers + 1-bit 'go'
               prog_data_sr <= "0000" & "00000100" & "11" & "0000" & "00000011" & "01"; -- Code for D 5 M 4
               current_mode <= desired_mode;

            when "0100"  =>
               -- switch to 64.0MHz
               prog_en_sr   <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two x 10-bit xfers + 1-bit 'go'
               prog_data_sr <= "0000" & "00000001" & "11" & "0000" & "00000000" & "01"; -- Code for D 1 M 2
               current_mode <= desired_mode;

            when "1000"  =>
               -- switch to 74.6MHz
               prog_en_sr   <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two x 10-bit xfers + 1-bit 'go'
               prog_data_sr <= "0000" & "00000110" & "11" & "0000" & "00000010" & "01"; -- Code for D 3 M 7
               current_mode <= desired_mode;

            when others =>
            
            end case;
         end if;
         if sw /= "0000" then
            desired_mode <= sw;
         end if;
      end if;
   end process;

DCM_CLKGEN_inst : DCM_CLKGEN
   generic map (
      CLKFXDV_DIVIDE => 2,    
      CLKFX_DIVIDE   => 14,  
      CLKFX_MD_MAX   => 2.0,  
      CLKFX_MULTIPLY => 11,  
      CLKIN_PERIOD   => 31.25,
      SPREAD_SPECTRUM => "NONE",
      STARTUP_WAIT => FALSE
   )
  
   port map (
      CLKIN     => clk_in,  
      CLKFX     => clk_out,  
      CLKFX180  => open,    
      CLKFXDV   => open,    
      LOCKED    => open,    
      PROGDONE  => open,    
      STATUS    => open,    
      FREEZEDCM => '0',      
      PROGCLK   => clk_in,  
      PROGDATA  => PROG_DATA,
      PROGEN    => PROG_EN,  
      RST       => '0'      
   );

end Behavioral;

чтобы не плодить тактовые частоты - программировал "на лету" DCM_CLKGEN (xilinx - Spartan 6 Clocking Resources User Guide for more info)


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Aug 8 2015, 10:19
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



№2 предпочтителен. К сожалению, в сложных проектах не всегда возможен. Пришел к необходимости замены ПЛИС с б0льшим числом глобальных тактов.


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01487 секунд с 7
ELECTRONIX ©2004-2016