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

Инициализация портов inout VHDL

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

Подскажите пожалуйста что в этот раз не так то??

Обновил IDE Gowin и в новой версии порты у МИПИ стали inout. 

И теперь в моделсиме они всегда в состоянии 'U'.

image.thumb.png.d01305588d837040f8421f6f4e65c736.png

 

В архитектуре прописал инициализацию:

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'	
		);  

 

Вроде правильно же?

 

 

 

 

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

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


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

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 на плату с Вашим интерфейсом.

 

 

 

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


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

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 

Судя по этим двум процессам, вы плохо понимаете, как работает список чувствительности. Если для синтеза это не так критично, то для симуляции весьма.

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


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

В 20.03.2024 в 20:48, sazh сказал:

В зависимости от этого наверно согласование в линии разное

Это же корка. Я там параметры выставил и мне дали код. В прошлой версии были четко in или out. В новой версии вот так 

 

В 20.03.2024 в 20:48, sazh сказал:

Скачайте Э3 на плату с Вашим интерфейсом.

Чего скачать и где?

 

В 20.03.2024 в 21:49, andrew_b сказал:

Судя по этим двум процессам, вы плохо понимаете, как работает список чувствительности. Если для синтеза это не так критично, то для симуляции весьма.

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

И по такому же принципу написан код для моста фт601. Там все нормально работает. Даже а физическом плане. 

 

 

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


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

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 раз, что уменьшает количество опечаток до минимума,
- никаких списков чувствительности.

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


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

В 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

image.thumb.png.25582b356f594959e00a206e4baecdd6.png

--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 лезть что то мне кажется не совсем правильно.

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

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


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

8 часов назад, Worldmaster сказал:

 

Чего скачать . 

это типовое решение. Скачайте   описание evaluation board  с Вашим кристаллом. Есть готовые дешевые проверенные решения от lattice, crosslink family.Есть в интегральном исполнении решения. Не зная физики, не читая спецификации, слишком смело использовать корку типового кристалла при безобразном описании этой корки.

 

 

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


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

В 21.03.2024 в 08:50, sazh сказал:

Скачайте   описание evaluation board  с Вашим кристаллом.

 Его не существует.

В 21.03.2024 в 08:50, sazh сказал:

при безобразном описании этой корки.

Что в нем безобразного? По факту есть что сказать? Или только сыпать обвинения можете?

 

В 21.03.2024 в 08:50, sazh сказал:

Не зная физики, не читая спецификации,

Вообще ни о чем. Есть мануал на MIPI, есть древний пример от разработчика который в старой версии нормально работал. Но новая версия ПО упорно генерит порты inout. Баг это или фича мне не понятно. Приходишь, спрашиваешь о помощи и начинается понос. 

Если корка типовая что в чем проблемы то могут быть? Описание генерит полностью тут 5 сигналов что тут можно скривить то? Покажите как правильно сделать если знаете конечно. 

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


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

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

 

Если корка типовая что в чем проблемы то могут быть?

Типовая, это не значит просто. Плис это много чего в одном флаконе. Это хорошо и это плохо. Она не заточена под что то конкретное. Это уже ручками доводиться до ума.

И это не наезд. Лично для меня в этой корке много чего не понятно. Это китаец. Как работает его pll ,   втом числе в индустриальном температурном диапазоне, кто знает.

И выше 800мбс из нее точно не выжать.

 

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


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

В 21.03.2024 в 09:30, sazh сказал:

И выше 800мбс из нее точно не выжать.

Выше и не надо. 800 на канал с лихвой хватит для текущей задачи. 

В 21.03.2024 в 09:30, sazh сказал:

втом числе в индустриальном температурном диапазоне

Ну надо сделать и проверить. 

 

В 21.03.2024 в 09:30, sazh сказал:

Это уже ручками доводиться до ума.

Это все понятно. Не понятно почему вроде как готовый блок формируется не так как указано в примерах. Если баг IDE то было бы понятно, если не хватает просто какой нибудь хитрой настройки то это уже другое. Просто нужна информация чтобы принять решение. А ее невероятно мало.

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


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

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

А ее невероятно мало.

И я про это. Фишка протокола в том, что по одной линиипередается как высокочастотная так и низкочастотная составляющие. Причем передача пакетная.

Значит в корке должны быть по идее для  rx 1 вхoд h clk, когда ему зададут в проекте порт  lvds, автоматом должен появиться порт  h clk n, и двунаправленные 2 входа выхода l clk. Это тоже по двум проводам. Как это между собой взаимодействует  я не знаю. Как они в непрерывном потоке битов идентифицируют начало и конец пакета. Там ведь нет 8б10б кодирования. Снимаю шляпу перед этими творцами. 

 

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


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

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

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

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

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

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

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

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

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

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