Worldmaster 0 27 февраля Опубликовано 27 февраля · Жалоба Здравствуйте. Может у кого была такая же фигня? Все было нормально, но в какой то момент IDE просто стала вылетать при попытке провести синтез. Что вдруг могло случиться то?? Сижу уже кусочно отключаю код.. Может у нее логи есть хоть где нибудь?? Доходит до этой строки и все. Что за фигня то.. почти готовый и рабочий проект ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 41 27 февраля Опубликовано 27 февраля · Жалоба Версия какая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 27 февраля Опубликовано 27 февраля · Жалоба В 27.02.2024 в 15:01, StewartLittle сказал: Версия какая? Пока ковырял обнаружил вот такую штуку. Есть код: 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 все нормально компилит и считает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 27 февраля Опубликовано 27 февраля · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 41 27 февраля Опубликовано 27 февраля · Жалоба Версия Gowin EDA у Вас ну очень старая... Обновитесь до актуальной. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 27 февраля Опубликовано 27 февраля (изменено) · Жалоба В 27.02.2024 в 15:33, _4afc_ сказал: Выполнить Clean&Rerun all или стереть содержимое /impl (лучше сохранив *json) А как это сделать то?? Вообще я создал новый проект, перетащил туда все файлы и все тоже самое. В 27.02.2024 в 15:36, StewartLittle сказал: Версия Gowin EDA у Вас ну очень старая... Обновитесь до актуальной. А дайте ссылочку пожалста. )) Нашел с оффсайта. Сейчас попробую. Изменено 27 февраля пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 27 февраля Опубликовано 27 февраля (изменено) · Жалоба Обновился. Но вылет не уходит. В логах ничего также нет. (( Что не так то .. в коде же все правильно сделано? Ему не нравится оператор mod. А что не так то? И почему моделсим все устраивает? Изменено 27 февраля пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
faa 4 27 февраля Опубликовано 27 февраля · Жалоба В 27.02.2024 в 16:48, Worldmaster сказал: Ему не нравится оператор mod. А что не так то? И почему моделсим все устраивает? Не так то, что оператор mod не синтезируем или синтезируем с ограничениями (делитель должен быть кратен степени двойки). Modelsim - это симулятор. Его синтезируемость конструкции не интересует. Gowin IDE тут не причем. Единственное к нему замечание, что можно было не выпадать в осадок, а собщить автору, что он не совсем прав. ЗЫ: вот тут неплохой краткий курс есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 февраля Опубликовано 28 февраля (изменено) · Жалоба В 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 сказал: что можно было не выпадать в осадок, а собщить автору, что он не совсем прав. Значит это бага. А куда можно сообщить? Изменено 28 февраля пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
faa 4 28 февраля Опубликовано 28 февраля · Жалоба В 28.02.2024 в 08:05, Worldmaster сказал: Он синтезируется. но MAX_FRAME_LEN не является степенью двойки. МОгу ли я быть уверен в том что код рабочий и будет адекватно обрабатываться в железе? Нет, не можете. Посмотрите, что получилось после синтеза и сразу будет все понятно. Там в IDE Schematic Viewer имеется. В 28.02.2024 в 08:05, Worldmaster сказал: Значит это бага. А куда можно сообщить? Я имел ввиду автора этого "замечательного" hdl-кода, в котором используются не синтезируемое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 февраля Опубликовано 28 февраля · Жалоба В 28.02.2024 в 10:52, faa сказал: в котором используются не синтезируемое. Ну все остальные среды обычно сообщают что встретили что то непонятное или не компилируемое. Зачем вообще делать не синтезируемые структуры. В 28.02.2024 в 10:52, faa сказал: Я имел ввиду автора этого "замечательного" hdl-кода Ой можно без этого? я автор кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
faa 4 28 февраля Опубликовано 28 февраля · Жалоба В 28.02.2024 в 12:16, Worldmaster сказал: Ну все остальные среды обычно сообщают что встретили что то непонятное или не компилируемое. Зачем вообще делать не синтезируемые структуры. Ой можно без этого? я автор кода. Еще раз попытаюсь донести мысль: есть синтезируемое подмножество языка описания аппаратуры (HDL), есть несинтезируемое. По поводу поведения среды при синтезе несинтезируемого (синтезируемого с ограничениями) подмножества - это к китайским авторам. Несинтезируемые структуры применил автор кода. Про остальное достаточно подробно написано выше. Ссылки и направление, куда копать, указаны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться