реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Vivado 2016.3 не моделирует элементарную операцию, Я в шоке
dsmv
сообщение Nov 10 2016, 08:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Всем добрый день

Перешёл на 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 ( 115.38 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
dsmv
сообщение Dec 28 2016, 09:04
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Vivado 2016.4 тоже зависает. Я по прежнему в шоке.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Dec 28 2016, 10:10
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 19-10-13
Пользователь №: 78 795



Да, странная штука... Но в QuestaSim все запустилось без проблем.
Go to the top of the page
 
+Quote Post
Lixlex
сообщение Dec 28 2016, 10:23
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 8-11-11
Из: Рязань
Пользователь №: 68 183



Неоднократно натыкался на подобные глюки Vivado. Видимо неспроста все советуют использовать сторонние инструменты симуляции.
Go to the top of the page
 
+Quote Post
starley
сообщение Dec 28 2016, 10:44
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 178
Регистрация: 9-01-09
Из: Москва
Пользователь №: 43 085



По мне, так какой-то не железячный стиль написания кода. Получаются сигналы с немерянной разрядностью. Заглючишь тут. Vivado, конечно, не права, но и тс есть что усовершенствовать.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Dec 28 2016, 11:23
Сообщение #6


я только учусь...
******

Группа: Модераторы
Сообщений: 3 267
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(starley @ Dec 28 2016, 12:44) *
По мне, так какой-то не железячный стиль написания кода. Получаются сигналы с немерянной разрядностью. Заглючишь тут. Vivado, конечно, не права, но и тс есть что усовершенствовать.

так может только для симулиции. как и тип real например
на мой взгляд симуляция должна происходить


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
dsmv
сообщение Dec 28 2016, 12:28
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Зависающий код теперь сведён к одному файлу.

Вот определение типа и двух процедур:

Код
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 приводит к зависанию симулятора.

Go to the top of the page
 
+Quote Post
starley
сообщение Dec 28 2016, 14:08
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 178
Регистрация: 9-01-09
Из: Москва
Пользователь №: 43 085



Цитата(Maverick @ Dec 28 2016, 15:23) *
так может только для симулиции. как и тип real например
на мой взгляд симуляция должна происходить

Конечно должна, но в кривом симуляторе, заточенном на синтезируемый код, может глючить.

И примерчик этот, вызывающий глюк, стоит послать Xilinx, например, на их форуме.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Dec 28 2016, 15:42
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 908
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(dsmv @ Dec 28 2016, 15:28) *
Зависающий код теперь сведён к одному файлу.
--! Проверка установки соединения
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.


Go to the top of the page
 
+Quote Post
dsmv
сообщение Dec 29 2016, 10:37
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(RobFPGA @ Dec 28 2016, 18:42) *
Разница в направлении (out/in) порта это так и должно ?


Да.
В оригинале мне нужно передавать и принимать сигнал сложной структуры.
Выяснилось, что порт "in" приводит симулятор в ступор.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th May 2017 - 17:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016