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

Корка MIPI RX низкая частота

Здравствуйте. 

Все таки, почему может быть такая низкая частота у корки MIPI RX для GW2AR-LV18EQ144C8/I7??

Создал пустой проект. Самый простой.

Добавил только одну корку.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
use IEEE.numeric_std.all; 


entity top is 
port (  
    clk: in std_logic:= '0';    --генератор входного клока на 50мгц
 
HS_CLK_P_io: inout std_logic := '0';
HS_CLK_N_io: inout std_logic := '0';

HS_DATA1_P_io: inout std_logic := '0';
HS_DATA1_N_io: inout std_logic := '0';

HS_DATA0_P_io: inout std_logic := '0';
HS_DATA0_N_io: inout std_logic := '0';

out_d:out std_logic_vector(15 downto 0)
);
end top;


architecture structural of top is

signal clk_byte_out_o: std_logic;
signal data_out1_o: std_logic_vector(7 downto 0);
signal data_out0_o: std_logic_vector(7 downto 0);
signal ready_o: std_logic;

component MIPI_RX_Advance_Top
	port (
		reset_n: in std_logic;
		HS_CLK_P: inout std_logic;
		HS_CLK_N: inout std_logic;
		clk_byte_out: out std_logic;
		HS_DATA1_P: inout std_logic;
		HS_DATA1_N: inout std_logic;
		data_out1: out std_logic_vector(7 downto 0);
		HS_DATA0_P: inout std_logic;
		HS_DATA0_N: inout std_logic;
		data_out0: out std_logic_vector(7 downto 0);
		hs_en: in std_logic;
		clk_term_en: in std_logic;
		data_term_en: in std_logic;
		ready: out std_logic
	);
end component;
 
begin 

your_instance_name: MIPI_RX_Advance_Top
	port map (
		reset_n => '1',
		HS_CLK_P => HS_CLK_P_io,
		HS_CLK_N => HS_CLK_N_io,
		clk_byte_out => clk_byte_out_o,
		HS_DATA1_P => HS_DATA1_P_io,
		HS_DATA1_N => HS_DATA1_N_io,
		data_out1 => data_out1_o,
		HS_DATA0_P => HS_DATA0_P_io,
		HS_DATA0_N => HS_DATA0_N_io,
		data_out0 => data_out0_o,
		hs_en => '1',
		clk_term_en => '1',
		data_term_en => '1',
		ready => ready_o
	);

lop: process(clk_byte_out_o, data_out1_o, data_out0_o) 
begin

if rising_edge(clk_byte_out_o) then
	 out_d <= data_out1_o & data_out0_o;
end if;
end process lop; 


end architecture;

 

Собрал проект и все равно частота мизер какой то.

image.thumb.png.6cbaed7628c40386e18fcdd7e6a67b71.png

 

Какие 100 мегагерц то. В чем ошибка то? 

Прикладываю проект. Ну ведь не может же быть настолько все плохо??

 

fpga_project.7z

 

 

image.png

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


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

У вас в проекте один регистр? Тогда времянку просто не от чего считать по моему. Чтобы считать времянку нужно хотя бы 2.
Т.е поставить чего то на входе. Чего то на выходе и отдельно внутреннюю логику.

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


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

В 07.03.2024 в 16:23, MegaVolt сказал:

У вас в проекте один регистр?

В этом проекте один. Мне нужно понять почему он ставит такую низкую частоту. 

 

В 07.03.2024 в 16:23, MegaVolt сказал:

Т.е поставить чего то на входе. Чего то на выходе и отдельно внутреннюю логику.

Так это входные линии на которые камера шлет данные. Как мне туда поставить то что нибудь?

 

В 07.03.2024 в 16:23, MegaVolt сказал:

Чтобы считать времянку нужно хотя бы 2.

Хотите сказать что это фигня и не стоит обращать внимания? 

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


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

6 минут назад, Worldmaster сказал:

В этом проекте один. Мне нужно понять почему он ставит такую низкую частоту. 
Так это входные линии на которые камера шлет данные. Как мне туда поставить то что нибудь?

Ну поставить хотя бы ещё один регистр. Или входной регистр. Или ещё что нибудь 🙂

Цитата

Хотите сказать что это фигня и не стоит обращать внимания? 

Я хочу сказать что я не понимаю как он это определяет когда в проекте 1 регистр. Хотя анализатор настроен считать пути между 2 триггерами. Т.е. его расчёты могу совершенно ничего не значить. 

К сожалению не нашёл максимальных параметров по частоте тактирования каких нибудь клоковых путей внутри этой плис.

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


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

7 minutes ago, MegaVolt said:

К сожалению не нашёл максимальных параметров по частоте тактирования каких нибудь клоковых путей внутри этой плис.

GW2AR-C8/I7 DS226E.pdf   3.4.5 Clock and I/O Switching Character

  • HCLK tree - 0.82 nS
  • GCLK tree - 1.77 nS

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


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

В 07.03.2024 в 16:43, _4afc_ сказал:

GW2AR-C8/I7 DS226E.pdf   3.4.5 Clock and I/O Switching Character

  • HCLK tree - 0.82 nS
  • GCLK tree - 1.77 nS

Ну значит можно утверждать что если входные линии взяты с блока HCLK и ведут напрямую в корку то максимальная частота там будет до 1149 мегагерц?

 

В 07.03.2024 в 16:37, MegaVolt сказал:

Ну поставить хотя бы ещё один регистр. Или входной регистр. Или ещё что нибудь 🙂

Ну вот поставил генератор хотя бы на 600 мгц. но он требует дифференциальные линии.

Гуглю вот как их описать но не врубаюсь. 

Не подскажете как это? 

if rising_edge(clkout_o) then
	HS_CLK_P_io <= '1';
	HS_CLK_N_io <= '0';	 
end if;
end process pol;

 

ERROR  (PA2014) : Pin(I) of 'U0_IB'(ELVDS_IBUF) does not connect to port
ERROR  (PA2014) : Pin(IB) of 'U0_IB'(ELVDS_IBUF) does not connect to port

 

Вот так сделал:

differential_pair_driver : ELVDS_OBUF
port map (
    O => iHS_CLK_P_io,
    OB => iHS_CLK_N_io,
    I => state
);

Но почему то он не соединил.

 Pin(iHS_CLK_P_io) of 'differential_pair_driver'(ELVDS_OBUF) does not connect to port("C:\Delme\tttFPG\fpga_project\src\mipi_rx_advance\mipi_rx_advance.vhd":112)

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

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


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

3 hours ago, Worldmaster said:

Создал пустой проект. Самый простой.

А референсы смотрели GOWIN MIPI refDesign

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


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

В 07.03.2024 в 17:59, _4afc_ сказал:

А референсы смотрели GOWIN MIPI refDesign

Конечно смотрел. По ним и писал все.

Ну если я чего то просмотрел, ткните конкретно. Зачем эти загадки?

 

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


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

1 hour ago, Worldmaster said:

Ну если я чего то просмотрел, ткните конкретно. Зачем эти загадки?

Ну клоки внутри ПЛИС вероятно в 8/16 раз медленнее внешних, иначе зачем аппаратный MIPI SERDES...

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


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

В 07.03.2024 в 19:39, _4afc_ сказал:

Ну клоки внутри ПЛИС вероятно в 8/16 раз медленнее внешних, иначе зачем аппаратный MIPI SERDES...

Итог то какой?

В даташите указано что MIPI RX может работать на частоте до 1200mbs на линию. Мне надо всего лишь 800 на линию.

Анализ говорит что не больше 100mbs. Что не так то тут?

Будет оно работать на 800 мегагерц или нет?

В 07.03.2024 в 19:39, _4afc_ сказал:

аппаратный MIPI

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

разве любой блок тут не формирует аппаратную схему?

Я так понимаю что корки это просто готовые библиотеки от разработчиков. В идеале даже оптимизированные под конкретное железо. Или нет?

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


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

11 hours ago, Worldmaster said:

Я так понимаю что корки это просто готовые библиотеки от разработчиков. В идеале даже оптимизированные под конкретное железо. Или нет

Если посмотреть на самый нижний уровень, то есть варианты когда serdes раскручивается не в набор LUT-REG, а в нечто с атрибутом по аппаратной имплементации. 

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


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

В 08.03.2024 в 09:54, _4afc_ сказал:

Если посмотреть на самый нижний уровень, то есть варианты когда serdes раскручивается не в набор LUT-REG, а в нечто с атрибутом по аппаратной имплементации. 

Так будет оно работать на заявленных характеристиках или нет?

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


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

On 3/8/2024 at 3:40 PM, Worldmaster said:

Так будет оно работать на заявленных характеристиках или нет?

Если может быть Вам ближе микроконтроллеры - чтобы процессорное ядро не тратило свои вычислительные ресурсы для программной реализации к-л блока (интерфейса, таймера, счетчика) - в микроконтроллер добавляется уже готовая, аппаратная реализация нужного функционала. Аналогично и в микросхемы FPGA добавляются уже готовые аппаратные блоки, реализующие часто необходимые функции (блоки DSP, интерфейсы). Зачастую реализовать это просто невозможно из стандартных "кирпичиков", имеющихся в FPGA.
Например, интерфейс PCIe должен выдавать/принимать данные на частоте нескольких гигагерц. Поэтому внутри FPGA добавляется такой скоростной блок, который принимает-передает наружу микросхемы на гигагерцах, а внутрь FPGA или из нее данные поступают по более широкой (гораздо более многоразрядной шине) на той частоте, которую уже способна "переварить" эта FPGA.
Это делается как раз для того, чтобы необходимый блок работал с заявленными характеристиками.

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


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

В 08.03.2024 в 16:01, Yuri124 сказал:

Если может быть Вам ближе микроконтроллеры - чтобы процессорное ядро не тратило свои вычислительные ресурсы для программной реализации к-л блока (интерфейса, таймера, счетчика) - в микроконтроллер добавляется уже готовая, аппаратная реализация нужного функционала. Аналогично и в микросхемы FPGA добавляются уже готовые аппаратные блоки, реализующие часто необходимые функции (блоки DSP, интерфейсы). Зачастую реализовать это просто невозможно из стандартных "кирпичиков", имеющихся в FPGA.
Например, интерфейс PCIe должен выдавать/принимать данные на частоте нескольких гигагерц. Поэтому внутри FPGA добавляется такой скоростной блок, который принимает-передает наружу микросхемы на гигагерцах, а внутрь FPGA или из нее данные поступают по более широкой (гораздо более многоразрядной шине) на той частоте, которую уже способна "переварить" эта FPGA.
Это делается как раз для того, чтобы необходимый блок работал с заявленными характеристиками.

Ну хорошо. Это мне понятно.

но не понятно другое. Если я взял корку от производителя который утверждает что этот модуль может работать на частоту до 1200mbs и подключил ее топ сразу в входным линиям ПЛИС то будет ли модуль работать на заявленной частоте или нет?

Мне обращать внимание на красный свет во временных диаграммах или нет? 

 

А что касается МК то там все намного логичнее. Если в даташите заявлено что какой то модуль работает на частоте 100мгц то я даже голову морочить не буду. Я использую модуль по расчетным значениям и выхожу на заявленные скорости. Там все четко и понятно.

А тут какая то неведомая фигня.. вроде ДШ заявляет что можно, среда компилит, моделсим тоже говорит что все ок. А какая то временная диаграмма сообщает что "в железо не улеглось". Ладно я могу принять что я код писал по аналогии с высокоуровневым программированием. Но готовый модуль от разрабов который единственный в системе и не проходит временные рамки это просто шедевр. 

И главное что разработчик должен сам догадаться что конкретно пошло не так и в каком моменте. 

 

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

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


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

В 08.03.2024 в 16:27, Worldmaster сказал:

И главное что разработчик должен сам догадаться что конкретно пошло не так и в каком моменте.

А может разработчику почитать документацию от производителя ПЛИС   (выбрав нужное семейство ПЛИС)?

После ознакомления с документацией посмотреть, что и как сделано в рефдизайнах.

Вот ссылка раз, вот ссылка два. Вторая ссылка требует авторизации.

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


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

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

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

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

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

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

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

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

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

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