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

Потерянный ModelSim-ом сигнал: просьба помочь найти или пояснить.

Всем добра!
Разбираюсь с чужим проектом на чужом мне языке.
При моделировании ModelSim произносит несколько ругательств, суть которых, как (если) я правильно понимаю сводится к тому, что некоторые сигналы в проекте не заданы в testbench-е.
Начинаю смотреть по проекту и вижу, что один сигнал интересующего меня модуля отсутствует как класс: нет, он есть в файле (библиотечном, который сам ModelSim сгенерировал из Quartus-овских исходников или как там это правильно называть?), но, вот, в списке сигналов ModelSim-а этот сигнал отсутствует! Почему и куда он делся?!
Речь про enable.
Картинка, на которой всё:
Clipboard01.thumb.gif.2430461d0d11947880e07c3bd23c5b17.gif

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


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

Из приведённой Вами картинке ничего не понятно. Лучше покажите часть кода. Может там конфигурация задаётся через параметр или он оптимизируется ибо внутри не подключён.

По поводу варнингов в МоделСиме: если Вы интерпретировали те, что на скрине - тогда это обычное отсутствие инициализации, что привело к конвертации сигнала в неопределённое состояние "Х"

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


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

30 minutes ago, Nick_K said:

Лучше покажите часть кода

Покажу весь (в скрепке)

33 minutes ago, Nick_K said:

или он оптимизируется

Да, дело было в оптимизации: https://forums.xilinx.com/t5/Simulation-and-Verification/Why-does-Modelsim-not-display-some-signals/td-p/297781

35 minutes ago, Nick_K said:

обычное отсутствие инициализации

А вот этого по проекту я найти не могу: уже все глаза проглядел..

MPM027_16.02.ZIP

35 minutes ago, andrew_b said:

Это Three-Step Flow.

Добавьте +acc при компиляции.

Спасибо. Добавить именно при компиляции, а не при оптимизации? У меня же, вроде, two-step flow?

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


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

13 минут назад, MaratZuev сказал:

Добавить именно при компиляции, а не при оптимизации?

Да.

13 минут назад, MaratZuev сказал:

У меня же, вроде, two-step flow?

Вам виднее.

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


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

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

Это  ругательство  доносится из модулей писанных на VHDL, в которых есть арифметические операции, и переменные в которых не имеют начальных значений.  Лечится это:

либо полным игнором со стороны разработчика

либо  установкой опций StdArithNoWarnings, NumericStdNoWarnings в GUI опций симуляции 

либо  установкой опций set StdArithNoWarnings 1; set NumericStdNoWarnings 1в tcl скрипте запуска

либо изменением  опций в modelsim.ini

...
; Turn off warnings from accelerated versions of the std_logic_arith,
; std_logic_unsigned, and std_logic_signed packages.
; StdArithNoWarnings = 1

; Turn off warnings from accelerated versions of the IEEE numeric_std
; and numeric_bit packages.
; NumericStdNoWarnings = 1
...

Удачи! Rob.

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


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

В файле mpm027.vhd:

SIGNAL    SYNTHESIZED_WIRE_10 :  STD_LOGIC;

При объявлении все сигналы желательно инициализировать:

SIGNAL    SYNTHESIZED_WIRE_10 :  STD_LOGIC := '0'; (или := (others => '0') для векторов и в единицу, для инверсных сигналов)

Тогда не будет кучи таких синих варнингов.

А по поводу оптимизиции почитайте тут: https://forums.xilinx.com/t5/Synthesis/How-to-avoid-signal-optimizing-in-synthesis/td-p/76056

Хоть и форум Ксайлинкса, но констрейны те же и позволят предотвратить оптимизацию, как следствие будет видно на модели (советую сделать это только для моделирования)

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


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

10 minutes ago, Nick_K said:

При объявлении все сигналы желательно инициализировать:

SIGNAL    SYNTHESIZED_WIRE_10 :  STD_LOGIC := '0'; (или := (others => '0') для векторов и в единицу, для инверсных сигналов)

Тогда не будет кучи таких синих варнингов.

Инициализировал. Ворнинги остались.

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


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

На всех уровнях во всех файлах?

Кстати, если есть такие необъявленные сигналы в мегафункциях - то их исправит только могила решение от RobFPGA: придётся ставить их в игнор. По-другому внутрь проприетарных конструкций не влезть.

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


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

58 minutes ago, RobFPGA said:

либо  установкой опций set StdArithNoWarnings 1; set NumericStdNoWarnings 1в tcl скрипте запуска

Скрипте запуска чего?
Если ставлю в свой скрипт:

variable StdArithNoWarnings 1 
variable NumericStdNoWarnings 1

# create library
if [file exists work] {
    vdel -all
}

vlib work
set FilesCompiled 0
 
# compile all source files
set vhdl_files [glob -nocomplain ../../*.vhd]
if {[llength $vhdl_files]} {
    vcom -2008 -explicit -work work ../../*.vhd
    set FilesCompiled 1
    puts "VHDL file(s) are compiled!"
}

if {$FilesCompiled} {
    vsim -L altera -L lpm -L sgate -L altera_mf -L altera_lnsim -L maxii -L maxv\
         -L cycloneii -L work work.mpm027_tb
    source wave_window_signals.tcl    
} else {
    puts "No file(s) to compile found!"
}  

ничего не меняется, warning-и остаются

29 minutes ago, Nick_K said:

На всех уровнях во всех файлах?

Зачем же во всех?
Ругается только на /mpm027_tb/UUT/b2v_inst8/lpm_decode_component - на сигналы на его входах и надо ставить значения по умолчанию, нет?
Это указанный вами SYNTHESIZED_WIRE_10 и пара FBAd20 и FBAd21.
SYNTHESIZED_WIRE_10 я определил, как вы указали, а FBAd20 и FBAd21 были определены в testbench-e:
    signal FBAd21 : STD_LOGIC:='0';
    signal FBAd20 : STD_LOGIC:='0';
Но warning-и остаются. Any other idea?

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


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

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

9 minutes ago, MaratZuev said:

Скрипте запуска чего?

В скрипте выполняющемся после запуска vsim, до момента выполнения команды run ... 

Например как аргумент -do опции vsim. vsim ... -do "set NumericStdNoWarnings 1;  do wave_config.do" ... 

Удачи! Rob.

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


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

1 hour ago, RobFPGA said:

либо изменением  опций в modelsim.ini

Вот это сработало, спасибо.

20 minutes ago, RobFPGA said:

В скрипте выполняющемся после запуска vsim, до момента выполнения команды run

if {$FilesCompiled} {
    vsim -L altera -L lpm -L sgate -L altera_mf -L altera_lnsim -L maxii -L maxv\
         -L cycloneii -L work work.mpm027_tb 
    variable StdArithNoWarnings 1
    variable NumericStdNoWarnings 1
    source wave_window_signals.tcl    
} else {
    puts "No file(s) to compile found!"
}    

Спасибо, работает.

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


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

7 минут назад, MaratZuev сказал:

variable StdArithNoWarnings 1

variable NumericStdNoWarnings 1

 

Почему variable? set.

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


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

1 hour ago, MaratZuev said:

Ругается только на /mpm027_tb/UUT/b2v_inst8/lpm_decode_component - на сигналы на его входах и надо ставить значения по умолчанию, нет?

Увы, но нет. Вся "прелесть" VHDL" что он смотрит на все елементы входящие в конечный пункт. То есть учитывает все промежуточные порты, все присвания и даже списки чувствительности процессов, в которые входят причастные сигналы. Одним словом, чтобы не было таких варнингов каждая строка объявления signal и out должна замыкаться := '0' или := (others => '0').

А вообще это просто моделирование, морочить себе голову из-за набора варнингов инициализации - не особо важное занятие.

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


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

1 hour ago, andrew_b said:

Почему variable? set.

set выводит в transcript результат присвоения, что ИМО засоряет вывод, в то время как variable - нет

35 minutes ago, Nick_K said:

все елементы входящие в конечный пункт

Берём lpm_decode_component из lpm_decode0.vhd: у него два входных порта
    PORT MAP (
        enable => enable,
        data => data
    );

идём наверх
lpm_decode0 в том же файле имеет порты
    PORT
    (
        data        : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
        enable     : IN STD_LOGIC
    );

далее b2v_inst8 : lpm_decode0 из файла mpm027.vhd
PORT MAP(enable => SYNTHESIZED_WIRE_10,
         data => Add
);

в этом файле по вашему совету я добавил инициализацию
SIGNAL    SYNTHESIZED_WIRE_10 :  STD_LOGIC:= '0';
сигналы же Add здесь же описаны как

Add(0) <= FBAd20;
Add(1) <= FBAd21;
а выше, в testbench-e mpm027_tb.vhd, 

signal FBAd21 : STD_LOGIC:='0';
signal FBAd20 : STD_LOGIC:='0';

т.е. всё, вроде, инициализировано. Или не всё?

 

47 minutes ago, Nick_K said:

морочить себе голову из-за набора варнингов

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

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


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

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

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

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

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

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

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

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

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

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