dsmv 0 10 ноября, 2016 Опубликовано 10 ноября, 2016 · Жалоба Всем добрый день Перешёл на Vivado 2016.3 и столкнулся с тем, что симулятор зависал на стадии "elaborate step". Раскопки привели к тому, что зависание происходит при передаче в процедуру двух параметров: ---- Сигналы для взаимодействия с моделью процессора ---- signal adm_cmd : bh_cmd; -- команда signal adm_ret : bh_ret; -- ответ ... test_m3_connect( adm_cmd, adm_ret ); Описания типов в файле cmd_sim_pkg.vhd : type mem32 is array (natural range<>) of std_logic_vector( 31 downto 0 ); type mem64 is array (natural range<>) of std_logic_vector( 63 downto 0 ); constant mem_size:integer:=32; -- размер массива памяти type bh_cmd is record cmd: integer; adr: mem32( mem_size-1 downto 0 ); data: mem64( mem_size-1 downto 0 ); p0: integer; p1: integer; end record; -- Формат команды -- cmd: -- 1 - read -- 2 - write -- 20 - запись числа в память -- 21 - чтение числа из памяти -- p0[31..16] - длина блока данных -- p0[0] - 1 - цикл 64 бита -- 0 - цикл 32 бита -- mem - данные для чтения или записи type bh_ret is record ret: integer; data: mem64( mem_size-1 downto 0 ); end record; Этот код у меня работает уже больше 12 лет, в том числе и на Vivado 2016.2; А вот в новой версии они что-то намудрили. Кто-нибуть с сталкивался с подобным ? Архив проекта - в приложении. test_pkg.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба Vivado 2016.4 тоже зависает. Я по прежнему в шоке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба Да, странная штука... Но в QuestaSim все запустилось без проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lixlex 0 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба Неоднократно натыкался на подобные глюки Vivado. Видимо неспроста все советуют использовать сторонние инструменты симуляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
starley 0 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба По мне, так какой-то не железячный стиль написания кода. Получаются сигналы с немерянной разрядностью. Заглючишь тут. Vivado, конечно, не права, но и тс есть что усовершенствовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба По мне, так какой-то не железячный стиль написания кода. Получаются сигналы с немерянной разрядностью. Заглючишь тут. Vivado, конечно, не права, но и тс есть что усовершенствовать. так может только для симулиции. как и тип real например на мой взгляд симуляция должна происходить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба Зависающий код теперь сведён к одному файлу. Вот определение типа и двух процедур: type mem32 is array (natural range<>) of std_logic_vector( 31 downto 0 ); type mem64 is array (natural range<>) of std_logic_vector( 63 downto 0 ); constant mem_size:integer:=32; -- размер массива памяти type bh_ret2 is record ret: std_logic; ret4: std_logic_vector( 63 downto 0 ); -- adr: mem32( mem_size-1 downto 0 ); data: mem64( 31 downto 0 ); -- data2: mem64( 31 downto 0 ); ret2: std_logic; end record; signal rtt : bh_ret2; --! Проверка установки соединения procedure test_y ( signal ret: out bh_ret2 --! ответ ) is begin end test_y; --! Проверка установки соединения procedure test_x ( signal ret: in bh_ret2 --! ответ ) is begin end test_x; Вызов test_y проходит нормально. Вызов test_x приводит к зависанию симулятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
starley 0 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба так может только для симулиции. как и тип real например на мой взгляд симуляция должна происходить Конечно должна, но в кривом симуляторе, заточенном на синтезируемый код, может глючить. И примерчик этот, вызывающий глюк, стоит послать Xilinx, например, на их форуме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 28 декабря, 2016 Опубликовано 28 декабря, 2016 · Жалоба Приветствую! Зависающий код теперь сведён к одному файлу. --! Проверка установки соединения procedure test_y ( signal ret: out bh_ret2 --! ответ ... --! Проверка установки соединения procedure test_x ( signal ret: in bh_ret2 --! ответ ... Вызов test_y проходит нормально. Вызов test_x приводит к зависанию симулятора. Разница в направлении (out/in) порта это так и должно ? Для Verilog в Vivado есть документированный глюк/фича с неправильным направлением порта в модуле. При этом во время компиляции error не генерируется а просто оптимизируется получающаяся неправильная логика. Может и при симуляции VHDL такое тоже происходит? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 29 декабря, 2016 Опубликовано 29 декабря, 2016 · Жалоба Разница в направлении (out/in) порта это так и должно ? Да. В оригинале мне нужно передавать и принимать сигнал сложной структуры. Выяснилось, что порт "in" приводит симулятор в ступор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться