Worldmaster 0 20 марта Опубликовано 20 марта (изменено) · Жалоба Здравствуйте. Подскажите пожалуйста что в этот раз не так то?? Обновил IDE Gowin и в новой версии порты у МИПИ стали inout. И теперь в моделсиме они всегда в состоянии 'U'. В архитектуре прописал инициализацию: architecture tb of testbench is signal CAM1_DATA_P: std_logic:='0'; signal CAM1_DATA_N: std_logic:='0'; signal CAM1_DATA_2_P: std_logic:='0'; signal CAM1_DATA_2_N: std_logic:='0'; signal CAM1_CLK_P: std_logic:='0'; signal CAM1_CLK_N: std_logic:='0'; signal CAM1_EXT_CLK: std_logic:='0'; -------------------------- -- в опредедении топа тоже инициализаци component top is port ( CAM2_RESET: out std_logic := '0'; CAM2_DATA_P: inout std_logic := '0'; CAM2_DATA_N: inout std_logic := '0'; CAM2_DATA_2_P: inout std_logic := '0'; CAM2_DATA_2_N: inout std_logic := '0'; CAM2_CLK_P: inout std_logic := '0'; CAM2_CLK_N: inout std_logic := '0'; CAM2_EXT_CLK: out std_logic := '0'; -- в функии отправки тестовых данных тоже cam_src: process (clk_bit_i, SystemReady) variable counter: integer := 0; variable snd_clk: integer := 0; begin if rising_edge(clk_bit_i) then if SystemReady = '1' then if hs_clk_en_i = '1' and hs_data_en_i = '1' then if snd_clk >= 4 then tx_clk <= not tx_clk; clk_data_i <= "01010101"; data_in0_i <= std_logic_vector(to_unsigned(counter, data_in0_i'length)); -- почему то путает данные вместо 00001111 приходит 00111100 data_in1_i <= std_logic_vector(to_unsigned((counter + 1), data_in1_i'length)); counter := (counter + 2) mod 255; snd_clk := 0; else snd_clk := snd_clk + 1; end if; end if; CAM1_CLK_P <= '1';<--- CAM1_CLK_N <= '1';<--- else CAM1_CLK_P <= '0'; <--- CAM1_CLK_N <= '0'; <--- end if; end if; end process cam_src; А еще он пишет про драйвер. # ** Warning: (vsim-8683) Uninitialized inout port /testbench/UUT/MyMIPI2/HS_CLK_P has no driver. # This port will contribute value (U) to the signal network. # ** Warning: (vsim-8683) Uninitialized inout port /testbench/UUT/MyMIPI2/HS_CLK_N has no driver. # This port will contribute value (U) to the signal network. # ** Warning: (vsim-8683) Uninitialized inout port /testbench/UUT/MyMIPI2/HS_DATA1_P has no driver. # This port will contribute value (U) to the signal network. # ** Warning: (vsim-8683) Uninitialized inout port /testbench/UUT/MyMIPI2/HS_DATA1_N has no driver. # This port will contribute value (U) to the signal network. # ** Warning: (vsim-8683) Uninitialized inout port /testbench/UUT/MyMIPI2/HS_DATA0_P has no driver. # This port will contribute value (U) to the signal network. # ** Warning: (vsim-8683) Uninitialized inout port /testbench/UUT/MyMIPI2/HS_DATA0_N has no driver. Что ему надо то? как инициировать данные ? Вообще отладка встала из за этого обновления. Хотя завел дополнительные сигналы и сделал вот так: mipi_drv: process(SystemReadyFlag) begin if SystemReadyFlag = '1' then CAM1_CLK_P <= CAM1_CLK_P_s; CAM1_CLK_N <= CAM1_CLK_N_s; else CAM1_CLK_P <= '0'; CAM1_CLK_N <= '0'; end if; end process mipi_drv; MyMIPI1: mipi_rx port map ( reset_n => Mipi_Rst_N, HS_CLK_P => CAM1_CLK_P_s, HS_CLK_N => CAM1_CLK_N_s, HS_DATA1_P => CAM1_DATA_P_s, HS_DATA1_N => CAM1_DATA_N_s, HS_DATA0_P => CAM1_DATA_2_P_s, HS_DATA0_N => CAM1_DATA_2_N_s, ready => Cam1_Mipi_Ready, clk_byte_out => Cam1_Mipi_Data_Read_Clk, data_out1 => CAM1_MIPI_DATA_OUT1, data_out0 => CAM1_MIPI_DATA_OUT0, hs_en => Mipi_EN_N, clk_term_en => '0', data_term_en => '0' ); Вроде правильно же? Изменено 20 марта пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 20 марта Опубликовано 20 марта · Жалоба 8 часов назад, Worldmaster сказал: Вроде правильно же? Согласно выложенному Вами проекту Есть HS mode input HS_CLK_RX_P , //HS (High Speed) Clock input HS_CLK_RX_N , //HS (High Speed) Clock это lvds и двунаправленным не бывает Есть LP mode inout [1:0] LP_CLK_RX , //LP (Low Power) External Это наверно lvcmos В зависимости от этого наверно согласование в линии разное. Скачайте Э3 на плату с Вашим интерфейсом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 20 марта Опубликовано 20 марта · Жалоба 9 hours ago, Worldmaster said: mipi_drv: process(SystemReadyFlag) begin if SystemReadyFlag = '1' then CAM1_CLK_P <= CAM1_CLK_P_s; CAM1_CLK_N <= CAM1_CLK_N_s; else CAM1_CLK_P <= '0'; CAM1_CLK_N <= '0'; end if; end process mipi_drv; Это работает не так, как вы ожидаете. 9 hours ago, Worldmaster said: сam_src: process (clk_bit_i, SystemReady) begin if rising_edge(clk_bit_i) then if SystemReady = '1' then Судя по этим двум процессам, вы плохо понимаете, как работает список чувствительности. Если для синтеза это не так критично, то для симуляции весьма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 20 марта Опубликовано 20 марта · Жалоба В 20.03.2024 в 20:48, sazh сказал: В зависимости от этого наверно согласование в линии разное Это же корка. Я там параметры выставил и мне дали код. В прошлой версии были четко in или out. В новой версии вот так В 20.03.2024 в 20:48, sazh сказал: Скачайте Э3 на плату с Вашим интерфейсом. Чего скачать и где? В 20.03.2024 в 21:49, andrew_b сказал: Судя по этим двум процессам, вы плохо понимаете, как работает список чувствительности. Если для синтеза это не так критично, то для симуляции весьма. Вполне возможно. В руководстве написано что в процесс надо передавать все сигналы которые там используются. Вот и передаю. Если есть что почитать то я бы почитал конечно. И по такому же принципу написан код для моста фт601. Там все нормально работает. Даже а физическом плане. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 4 20 марта Опубликовано 20 марта · Жалоба 16 minutes ago, Worldmaster said: Вполне возможно. В руководстве написано что в процесс надо передавать все сигналы которые там используются. Вот и передаю. 1. Написано, в общем-то верно. Раз сказано, все - ну значит и пихать в "mipi_drv: process" надо все: в т.ч. и "CAM1_CLK_P_s", "CAM1_CLK_N_s". mipi_drv: process(SystemReadyFlag, CAM1_CLK_P_s, CAM1_CLK_N_s) 2. Но эту конструкцию я бы переписал в другом виде: CAM1_CLK_P <= CAM1_CLK_P_s when (SystemReadyFlag = '1') else '0'; CAM1_CLK_N <= CAM1_CLK_N_s when (SystemReadyFlag = '1') else '0'; Так меньше ошибок: - одно назначение, которое всегда выполняется, - никих элементов памяти (если есть else), - то, чему происходит назначение, указывается 1 раз, что уменьшает количество опечаток до минимума, - никаких списков чувствительности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 21 марта Опубликовано 21 марта (изменено) · Жалоба В 21.03.2024 в 00:20, Beby сказал: Раз сказано, все - ну значит и пихать в "mipi_drv: process" надо все: в т.ч. и "CAM1_CLK_P_s", "CAM1_CLK_N_s". Это я учитываю конечно, но когда уже в моделсиме будет понятно что алгоритм работает логически. Вроде бы не заметил что от этого что то менялось в моделсиме. В 21.03.2024 в 00:20, Beby сказал: 2. Но эту конструкцию я бы переписал в другом виде: CAM1_CLK_P <= CAM1_CLK_P_s when (SystemReadyFlag = '1') else '0'; CAM1_CLK_N <= CAM1_CLK_N_s when (SystemReadyFlag = '1') else '0'; Так меньше ошибок: - одно назначение, которое всегда выполняется, - никих элементов памяти (если есть else), - то, чему происходит назначение, указывается 1 раз, что уменьшает количество опечаток до минимума, - никаких списков чувствительности. ЗА это спасибо. Обязательно переделаю в других модулях. Только все это не решило исходной проблемы. И я вот что нашел. После компиляции корки появляется файлик .vho --Source file index table: --file0 "\C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/MIPI_RX_Advance/data/DPHY_RX.vp" --file1 "\C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/MIPI_RX_Advance/data/DPHY_RX_TOP.v" library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library gw2a; use gw2a.components.all; entity mipi_rx is 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 mipi_rx; Может имеется ввиду что в нем порты не инициализированы? Но в vho лезть что то мне кажется не совсем правильно. Изменено 21 марта пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 21 марта Опубликовано 21 марта · Жалоба 8 часов назад, Worldmaster сказал: Чего скачать . это типовое решение. Скачайте описание evaluation board с Вашим кристаллом. Есть готовые дешевые проверенные решения от lattice, crosslink family.Есть в интегральном исполнении решения. Не зная физики, не читая спецификации, слишком смело использовать корку типового кристалла при безобразном описании этой корки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 21 марта Опубликовано 21 марта · Жалоба В 21.03.2024 в 08:50, sazh сказал: Скачайте описание evaluation board с Вашим кристаллом. Его не существует. В 21.03.2024 в 08:50, sazh сказал: при безобразном описании этой корки. Что в нем безобразного? По факту есть что сказать? Или только сыпать обвинения можете? В 21.03.2024 в 08:50, sazh сказал: Не зная физики, не читая спецификации, Вообще ни о чем. Есть мануал на MIPI, есть древний пример от разработчика который в старой версии нормально работал. Но новая версия ПО упорно генерит порты inout. Баг это или фича мне не понятно. Приходишь, спрашиваешь о помощи и начинается понос. Если корка типовая что в чем проблемы то могут быть? Описание генерит полностью тут 5 сигналов что тут можно скривить то? Покажите как правильно сделать если знаете конечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 21 марта Опубликовано 21 марта · Жалоба 10 минут назад, Worldmaster сказал: Если корка типовая что в чем проблемы то могут быть? Типовая, это не значит просто. Плис это много чего в одном флаконе. Это хорошо и это плохо. Она не заточена под что то конкретное. Это уже ручками доводиться до ума. И это не наезд. Лично для меня в этой корке много чего не понятно. Это китаец. Как работает его pll , втом числе в индустриальном температурном диапазоне, кто знает. И выше 800мбс из нее точно не выжать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 21 марта Опубликовано 21 марта · Жалоба В 21.03.2024 в 09:30, sazh сказал: И выше 800мбс из нее точно не выжать. Выше и не надо. 800 на канал с лихвой хватит для текущей задачи. В 21.03.2024 в 09:30, sazh сказал: втом числе в индустриальном температурном диапазоне Ну надо сделать и проверить. В 21.03.2024 в 09:30, sazh сказал: Это уже ручками доводиться до ума. Это все понятно. Не понятно почему вроде как готовый блок формируется не так как указано в примерах. Если баг IDE то было бы понятно, если не хватает просто какой нибудь хитрой настройки то это уже другое. Просто нужна информация чтобы принять решение. А ее невероятно мало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 21 марта Опубликовано 21 марта · Жалоба 10 минут назад, Worldmaster сказал: А ее невероятно мало. И я про это. Фишка протокола в том, что по одной линиипередается как высокочастотная так и низкочастотная составляющие. Причем передача пакетная. Значит в корке должны быть по идее для rx 1 вхoд h clk, когда ему зададут в проекте порт lvds, автоматом должен появиться порт h clk n, и двунаправленные 2 входа выхода l clk. Это тоже по двум проводам. Как это между собой взаимодействует я не знаю. Как они в непрерывном потоке битов идентифицируют начало и конец пакета. Там ведь нет 8б10б кодирования. Снимаю шляпу перед этими творцами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться