Jump to content
    

Вылетает GOWIN IDE

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

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

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

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

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

image.thumb.png.8e5aebcd966966f476e52e30700082e1.png

 

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

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

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

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

Edited by Worldmaster

Share this post


Link to post
Share on other sites

Обновился. 

image.png.c9917d6d433e5d2651ebb307f1276b24.png

 

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

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

 

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

 

 

Edited by Worldmaster

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

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

Share this post


Link to post
Share on other sites

В 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 сказал:

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

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

 

Edited by Worldmaster

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

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

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

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...