Jump to content

    
Sign in to follow this  
MaratZuev

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
13 минут назад, MaratZuev сказал:

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

Да.

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

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

Вам виднее.

Share this post


Link to post
Share on other sites

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

Это  ругательство  доносится из модулей писанных на 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.

Share this post


Link to post
Share on other sites

В файле 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

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

Share this post


Link to post
Share on other sites
10 minutes ago, Nick_K said:

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites

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

9 minutes ago, MaratZuev said:

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

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites
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!"
}    

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

Share this post


Link to post
Share on other sites
1 hour ago, MaratZuev said:

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

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

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

Share this post


Link to post
Share on other sites
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:

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

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

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.

Sign in to follow this