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

Вылетает GOWIN IDE

Здравствуйте. Может у кого была такая же фигня?

Все было нормально, но в какой то момент IDE просто стала вылетать при попытке провести синтез.

Что вдруг могло случиться то?? Сижу уже кусочно отключаю код..

Может у нее логи есть хоть где нибудь?? 

Доходит до этой строки и все. 

image.thumb.png.8e5aebcd966966f476e52e30700082e1.png

 

Что за фигня то.. почти готовый и рабочий проект ...

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


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

В 27.02.2024 в 15:01, StewartLittle сказал:

Версия какая?

image.png.8c3a49ab0324cdcd0088f3a9439c2711.png

Пока ковырял обнаружил вот такую штуку.

Есть код:

   constant MAX_FIFO_BUF_CNT: integer := 250;
 type EXCHANGE_MEMBuffer is array (0 to MAX_FIFO_BUF_CNT-1) of std_logic_vector(31 downto 0); 
signal fifo_buffer: EXCHANGE_MEMBuffer := (others=>(others=>'0'));



	SDRAM_PROCESSOR:process (I_sdrc_clk, RAM_IsReady, RAM_IsDataReady)
	variable loc_state: LOC_FSM_STATE := idle ; 
	variable total_word_counter: integer := 0; 
	variable cam_bytes_counter: integer := 0;  
	begin 
	
	if falling_edge(I_sdrc_clk) then
		if cam_frame_send_complete = '1' then
			RAM_READ_PTR <= 0; -- если закончили отправку кадра то сбрасываем счетчик в ноль
		end if;
		
		if ram_old_state /= ram_new_state then
			loc_state := init; 
			ram_old_state <= ram_new_state;		
			--ram_data_Buffer <= (others=>x"00");
			RAM_EXCHANGE_COMPLETE <= '0';
		end if;
		
		case loc_state is
			when idle=>
				RAM_EXCHANGE_COMPLETE <= '1';
				RAM_transmit_en <= '0';
				RAM_Bank_addr 	<= (others=>'0');
				RAM_Row_addr 	<= (others=>'0');
				RAM_Col_addr 	<= (others=>'0');
				RAM_Data_count 	<= (others=>'0');
			when init =>
				if RAM_IsReady = '1' then 
					RAM_Bank_addr <= ram_cmd_Buffer(RAM_BANK_ADDR_BIT)(1 downto 0) ; 
					RAM_Row_addr <= ram_cmd_Buffer(RAM_ROW_ADDR_HI)(2 downto 0) & ram_cmd_Buffer(RAM_ROW_ADDR_LOW); 
					RAM_Col_addr <= ram_cmd_Buffer(RAM_COL_ADDR_BIT) ; 
					RAM_Data_count <=  ram_cmd_Buffer(RAM_32BIT_WORD_COUNT_BIT);
					if ram_cmd_Buffer(RAM_RW_BIT) = WRITE then
						RAM_RW <= WRITE(0); -- WRITE : std_logic := '0'; 
						if ((RAM_WRITE_PTR mod MAX_ROW_COLS)+ to_integer(unsigned(ram_cmd_Buffer(RAM_32BIT_WORD_COUNT_BIT)))) > MAX_ROW_COLS then
							RAM_Data_count <= std_logic_vector(to_unsigned(MAX_ROW_COLS - (RAM_WRITE_PTR mod MAX_ROW_COLS), RAM_Data_count'length));
						end if;
					else
						RAM_RW <= READ(0); -- READ : std_logic := '1';
						if ((RAM_READ_PTR mod MAX_ROW_COLS)+ to_integer(unsigned(ram_cmd_Buffer(RAM_32BIT_WORD_COUNT_BIT)))) > MAX_ROW_COLS then
							RAM_Data_count <= std_logic_vector(to_unsigned(MAX_ROW_COLS - (RAM_READ_PTR mod MAX_ROW_COLS), RAM_Data_count'length));   
						end if;
					end if;
					
					total_word_counter := 0; 
					RAM_transmit_en <= '1';
					loc_state := processing; 
				end if; 
			when processing=>
				if RAM_IsDataReady = '1' then  
					if total_word_counter < RAM_Data_count then		
					-- вариант для работы с двоынйм буфером
						if ram_cmd_Buffer(RAM_RW_BIT) = WRITE then	 
					 		if ram_cmd_Buffer(RAM_BUF_ID) = x"00" then
					 		-- -- рассчитанный адрес с учетом цикличности буферов
					 		-- RAM_WriteData <= cam1_data_buffer((cam1_read_ptr) mod MAX_BUF_CNT) & cam1_data_buffer((cam1_read_ptr + 1) mod MAX_BUF_CNT);--- <------------------ ПРОБЛЕМА
					 		 cam1_read_ptr <= (cam1_read_ptr + 2) mod MAX_BUF_CNT;
					 		else 
					 		-- 	RAM_WriteData <= cam2_data_buffer((cam2_read_ptr) mod MAX_BUF_CNT) & cam2_data_buffer((cam2_read_ptr + 1) mod MAX_BUF_CNT);--- <------------------ ПРОБЛЕМА
					 		 	cam2_read_ptr <= (cam2_read_ptr + 2) mod MAX_BUF_CNT;
					 		end if;		
					 		cam_bytes_counter := cam_bytes_counter + 2;
					 		RAM_WRITE_PTR <= (RAM_WRITE_PTR + 1) mod MAX_FRAME_LEN;-- счет идет в пространстве РАМ по 32 бита																		
						else 
							--fifo_buffer(fifo_write_ptr mod MAX_FIFO_BUF_CNT) <= RAM_ReadData;   --- <------------------ ПРОБЛЕМА
							fifo_write_ptr <= (fifo_write_ptr + 1) mod MAX_FIFO_BUF_CNT;
							RAM_READ_PTR <= (RAM_READ_PTR + 1) mod MAX_FRAME_LEN; -- счет идет в пространстве РАМ по 32 бита
						end if;  
					total_word_counter := total_word_counter + 1;						
					end if;				
				end if; 			
				if ram_ack = '1' then
					RAM_WriteData <= (others => 'Z');
					RAM_Data_count <= (others => '0');
					loc_state := idle; 
					RAM_transmit_en <= '1';
				end if; 			
		end case;	 
	end if;
	end process SDRAM_PROCESSOR;

 

Вот стоит раскомментировать любую из этих строк и студия сразу падает.

Что тут такого страшного то?? Причем modelsim все нормально компилит и считает.

 

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


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

49 minutes ago, Worldmaster said:

Все было нормально, но в какой то момент IDE просто стала вылетать при попытке провести синтез.

Выполнить  Clean&Rerun all или стереть содержимое /impl (лучше сохранив *json)

 

49 minutes ago, Worldmaster said:

Может у нее логи есть хоть где нибудь??

логи хода синтезирования - файлы *log в вашем каталоге, повторяют вашу консоль, но могут содержать чуть больше если консоль не успела вывести.

 

Ещё есть логи IDE /Qt они для винды лежат в C:/Users//AppData/Local/GowinSemi///*.log

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


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

Версия Gowin EDA у Вас ну очень старая... Обновитесь до актуальной.

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


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

В 27.02.2024 в 15:33, _4afc_ сказал:

Выполнить  Clean&Rerun all или стереть содержимое /impl (лучше сохранив *json)

А как это сделать то??

Вообще я создал новый проект, перетащил туда все файлы и все тоже самое.

 

В 27.02.2024 в 15:36, StewartLittle сказал:

Версия Gowin EDA у Вас ну очень старая... Обновитесь до актуальной.

А дайте ссылочку пожалста. )) 

Нашел с оффсайта. Сейчас попробую.

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

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


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

Обновился. 

image.png.c9917d6d433e5d2651ebb307f1276b24.png

 

Но вылет не уходит. В логах ничего также нет. (( 

Что не так то .. в коде же все правильно сделано?

 

Ему не нравится оператор mod. А что не так то? И почему моделсим все устраивает?

 

 

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

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


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

В 27.02.2024 в 16:48, Worldmaster сказал:

Ему не нравится оператор mod. А что не так то? И почему моделсим все устраивает?

 

Не так то, что оператор mod не синтезируем или синтезируем с ограничениями (делитель должен быть кратен степени двойки).

Modelsim - это симулятор. Его синтезируемость конструкции не интересует.

Gowin IDE тут не причем. Единственное к нему замечание, что можно было не выпадать в осадок, а собщить автору, что он не совсем прав.

ЗЫ: вот тут неплохой краткий курс есть.

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


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

В 27.02.2024 в 17:20, faa сказал:

Не так то, что оператор mod не синтезируем или синтезируем с ограничениями (делитель должен быть кратен степени двойки).

Вот оно что .. весело блин. Спасибо.

 

А вот момент. Код вот такой:

RAM_READ_PTR <= (RAM_READ_PTR + 1) mod MAX_FRAME_LEN;

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

 

В 27.02.2024 в 17:20, faa сказал:

что можно было не выпадать в осадок, а собщить автору, что он не совсем прав.

Значит это бага. А куда можно сообщить?

 

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

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


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

В 28.02.2024 в 08:05, Worldmaster сказал:

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

Нет, не можете.

Посмотрите, что получилось после синтеза и сразу будет все понятно. Там в IDE Schematic Viewer имеется.

В 28.02.2024 в 08:05, Worldmaster сказал:

Значит это бага. А куда можно сообщить?

Я имел ввиду автора этого "замечательного" hdl-кода, в котором используются не синтезируемое.

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


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

В 28.02.2024 в 10:52, faa сказал:

в котором используются не синтезируемое.

Ну все остальные среды обычно сообщают что встретили что то непонятное или не компилируемое.

Зачем вообще делать не синтезируемые структуры.

 

В 28.02.2024 в 10:52, faa сказал:

Я имел ввиду автора этого "замечательного" hdl-кода

Ой можно без этого? я автор кода. 

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


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

В 28.02.2024 в 12:16, Worldmaster сказал:

Ну все остальные среды обычно сообщают что встретили что то непонятное или не компилируемое.

Зачем вообще делать не синтезируемые структуры.

 

Ой можно без этого? я автор кода. 

Еще раз попытаюсь донести мысль: есть синтезируемое подмножество языка описания аппаратуры (HDL), есть несинтезируемое.

По поводу поведения среды при синтезе несинтезируемого (синтезируемого с ограничениями) подмножества - это к китайским авторам.

Несинтезируемые структуры применил автор кода.

Про остальное достаточно подробно написано выше. Ссылки и направление, куда копать, указаны.

 

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


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

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

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

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

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

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

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

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

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

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