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

Скачки на диаграмме в modelsim

Здравствуйте!

 

При функционально-логическом моделировании в modelsim на диаграмме моделирования у некоторых сигналов возникают мгновенные импульсы, которых по идее не должно быть. Пример прикрепляю, обратите внимание на поведение сигнала prt_data_next. Вот VHDL-описание тестируемой схемы:

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity rsc_encoder is
    port(
        clk:     in std_logic; 
        rst:     in std_logic; 
        en:     in std_logic; 
        code_gen:   in std_logic; 
        tail_gen:     in std_logic; 
        data_in:    in std_logic; 
        sys_out:     out std_logic; 
        prt_out:     out std_logic 
    );
end rsc_encoder;

architecture register_transfer_level of rsc_encoder is
    
    --registers
    signal shift_rigth_reg, shift_rigth_next: std_logic_vector(2 downto 0); --shift register
    signal sys_data_reg, sys_data_next: std_logic; 
    signal prt_data_reg, prt_data_next: std_logic; 

    --combinational logic
    signal upper_code_generator: std_logic;
    signal lower_code_generator: std_logic;
    signal shift_register_msb: std_logic;
    
begin

    process (clk, rst)
    begin
        if rst='1' then --reset
            shift_rigth_reg <= (others => '0');
            sys_data_reg <= '0';
            prt_data_reg <= '0';
            
        elsif rising_edge(clk) then --clock
            if (en = '1' and code_gen = '1') then 
                shift_rigth_reg <= shift_rigth_next;
                sys_data_reg <= sys_data_next;
                prt_data_reg <= prt_data_next;
            end if;
        end if;
    end process;
    
    upper_code_generator <= shift_rigth_reg(2) xor shift_rigth_reg(0);
    lower_code_generator <= shift_rigth_reg(1) xor shift_rigth_reg(0);
    shift_register_msb <= (lower_code_generator xor data_in) when (tail_gen = '0') else '0';
    shift_rigth_next <= shift_register_msb & shift_rigth_reg(2 downto 1);
    sys_data_next <= data_in when (tail_gen = '0') else lower_code_generator;
    prt_data_next <= (shift_register_msb xor upper_code_generator) when (tail_gen = '0') else upper_code_generator;
    
    --data output
    sys_out <= sys_data_reg;
    prt_out <= prt_data_reg;

end register_transfer_level;

 

Собственно вопрос: глюк modelsim или кривизна описания?

_____________.bmp

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


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

Здравствуйте!

 

При функционально-логическом моделировании в modelsim на диаграмме моделирования у некоторых сигналов возникают мгновенные импульсы, которых по идее не должно быть. Пример прикрепляю, обратите внимание на поведение сигнала prt_data_next. Вот VHDL-описание тестируемой схемы:

 

Собственно вопрос: глюк modelsim или кривизна описания?

На мой взгляд, причина кроется у Вас здесь

 

upper_code_generator <= shift_rigth_reg(2) xor shift_rigth_reg(0);
    lower_code_generator <= shift_rigth_reg(1) xor shift_rigth_reg(0);
    shift_register_msb <= (lower_code_generator xor data_in) when (tail_gen = '0') else '0';
    shift_rigth_next <= shift_register_msb & shift_rigth_reg(2 downto 1);
    sys_data_next <= data_in when (tail_gen = '0') else lower_code_generator;
    prt_data_next <= (shift_register_msb xor upper_code_generator) when (tail_gen = '0') else upper_code_generator;

 

Например у Вас сигнал upper_code_generator присутствует как в левой части так и в правой части описания. Одновременно сигнал upper_code_generator принимать значение и участвовать в логическом выражении для другого сигнала не может. Уберите его например из левой части или разнесите по разным тактам сигналы в левой и правой части описания. Т.е. на одном такте сигнал upper_code_generator принял значение

 upper_code_generator <= shift_rigth_reg(2) xor shift_rigth_reg(0);

а уже на следующем такте может участвовать в логическом выражении

prt_data_next <= (shift_register_msb xor upper_code_generator) when (tail_gen = '0') else upper_code_generator;

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

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


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

На взгляд, причина кроется здесь у Вас

 

upper_code_generator <= shift_rigth_reg(2) xor shift_rigth_reg(0);
    lower_code_generator <= shift_rigth_reg(1) xor shift_rigth_reg(0);
    shift_register_msb <= (lower_code_generator xor data_in) when (tail_gen = '0') else '0';
    shift_rigth_next <= shift_register_msb & shift_rigth_reg(2 downto 1);
    sys_data_next <= data_in when (tail_gen = '0') else lower_code_generator;
    prt_data_next <= (shift_register_msb xor upper_code_generator) when (tail_gen = '0') else upper_code_generator;

 

Например у Вас сигнал upper_code_generator присутствует как в левой части так и в правой части описания. Одновременно принимать значение и участвовать в логическом выражении сигнал не может. Уберите например из левой части или разнесите по тактам сигналы в левой и правой части описания.

 

Не вижу в этом никаких противоречий проектирования комбинационных схем на VHDL с использованием потокового стиля описания. Сигнал upper_code_generator в правой части выражения

prt_data_next <= (shift_register_msb xor upper_code_generator) when (tail_gen = '0') else upper_code_generator;

просто преобразуется на этапе генерации схемы в выражение вида

prt_data_next <= (shift_register_msb xor shift_rigth_reg(2) xor shift_rigth_reg(0)) when (tail_gen = '0') else (shift_rigth_reg(2) xor shift_rigth_reg(0));

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


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

Собственно вопрос: глюк modelsim или кривизна описания?

это не баг, это фича, фича работы симулятора с дельта циклами.

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


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

это не баг, это фича, фича работы симулятора с дельта циклами.

 

Интересно, а можно немного подробнее об этом или может быть ссылочку на полезный материал описывающий данную фичу?

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


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

это не баг, это фича, фича работы симулятора с дельта циклами.

Заинтересовало, можно поподробнее про дельта циклы и эту фичу?

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


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

Заинтересовало, можно поподробнее про дельта циклы и эту фичу?

 

Интересно, а можно немного подробнее об этом или может быть ссылочку на полезный материал описывающий данную фичу?

 

Книга Бибило "Язык VHDL" (кажется так называется) или стандарт на VHDL. Там про это все подробно расписано.

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


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

Как пишет Бибило, суть дельта "фичи" в том, что комбинационная логика имеет свою задержку.

Да точно, дельта фича это немного другое.

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


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

иногда гонки сигналов или пички также называют глитчами (англ. glitch)

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


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

Как пишет Бибило, суть дельта "фичи" в том, что комбинационная логика имеет свою задержку.

если он именно так пишет, то бред несет.

 

Интересно, а можно немного подробнее об этом или может быть ссылочку на полезный материал описывающий данную фичу?

Заинтересовало, можно поподробнее про дельта циклы и эту фичу?

стандарт на VHDL и любая литература о работе событийных симуляторов (т.е. симуляторов, движок которых построен на обработке событий).

 

Суть, если кратко, то дельта циклы, это абстракция которая позволяет разделить между собой события, связанные между собой временем возникновения.

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


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

Суть, если кратко, то дельта циклы, это абстракция которая позволяет разделить между собой события, связанные между собой временем возникновения.

 

Вобщем, в принципе, я так понимаю, ничего страшного в этом нет и можно не обращать внимания на эти скачки при моделировании? Триггерами развести комбинационную логику там вряд ли получится, т.к. есть обратные связи в схеме.

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


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

Я думаю, у автора темы сигнал upper_code_generator вырабатывается чуть позже, чем shift_register_msb, оттого и глитчи на prt_data_next.

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

Никаких абстракций. Суровая реальность. xor не прощает несовпадений :)

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


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

Вобщем, в принципе, я так понимаю, ничего страшного в этом нет и можно не обращать внимания на эти скачки при моделировании? Триггерами развести комбинационную логику там вряд ли получится, т.к. есть обратные связи в схеме.

Удачи! ;)

 

PS Будем ждать результатов работы схемы в "железе". Надеюсь Rundll отпишется по этому поводу.

PS PS На каком уровне Вы приводите моделирование? (Мне кажется на функциональном уровне.)

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


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

Удачи! ;)

На каком уровне Вы приводите моделирование?

Мне кажется на функциональном.

PS Будем ждать результатов работы схемы в "железе". Надеюсь Rundll отпишется по этому поводу.

 

Я и писал, что моделирование функционально-логическое.

 

Я думаю, у автора темы сигнал upper_code_generator вырабатывается чуть позже, чем shift_register_msb, оттого и глитчи на prt_data_next.

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

Никаких абстракций. Суровая реальность. xor не прощает несовпадений smile.gif

 

Я думал, что при функциональном моделировании задержки в элементах и цепях не учитываются, ежели только не задать их вручную.

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


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

Вобщем, в принципе, я так понимаю, ничего страшного в этом нет и можно не обращать внимания на эти скачки при моделировании?

Забить%), у вас же синхронный дизайн, у меня большинство тестов с текстовым выходом и в железе всё работает с полпинка. Один раз решил глянуть вейвформу там была куча таких дельтацикловых финтов, но т.к. дизайн был синхронный ни к чему плохому это не приводило.

PS Будем ждать результатов работы схемы в "железе". Надеюсь Rundll отпишется по этому поводу.

что там отписываться то ? все будет работать, он же не заводит эти сигналы на процессы со срабатыванием по фронту/спаду. Так что не надо пугать, пуганные %)

 

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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