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

Странности с симуляцией

VHDL Process Statement warning at <location>: signal "<name>" is read inside the Process Statement but isn't in the Process Statement's sensivitity list

 

...

During simulation, the Process Statement updates the value of signal o whenever signal a changes value. However, changes to the value of signal b do not trigger the execution of the Process Statement, and thus signal o behaves as a pseudo-latch, that is, it retains its value, whenever signal b alone changes value.

 

Quartus II Integrated Synthesis ignores the pseudo-latch behavior implied by the incomplete sensitivity list in the example above. It generates logic as if the sensitivity list were complete, and therefore implements purely combinational logic for signal o.

 

ACTION: To avoid receiving this message in the future, and to avoid potential mismatches between simulation and the synthesized logic, add the specified signal to the sensitivity list.

...

 

Про синтезатор сказано яснее ясного: ему мой список по барабану. Однако про симулятор вроде бы говорится, что он и на самом деле им руководствуется, что, с моей точки зрения было бы крайней глупостью.

 

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

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
USE ieee.std_logic_unsigned.all;
------------------------------------------------------------
ENTITY Sim_Test IS
    -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
    PORT
    (
        Clk : IN STD_LOGIC;
        Rst : IN STD_LOGIC;
        InData : IN STD_LOGIC;
        Out1 : OUT STD_LOGIC;
        Out2 : OUT STD_LOGIC;
        OutCnt : OUT STD_LOGIC_VECTOR(3 downto 0)
    );
    -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!    
END Sim_Test;
------------------------------------------------------------
ARCHITECTURE Sim_Test_architecture OF Sim_Test IS

signal cnt,shr            : unsigned(3 downto 0);
signal dummy            : std_logic;

BEGIN

process(dummy) -- по-вашему, он вообще запускаться не будет?;)
begin
  if Rst='1' then
    cnt <= (others => '0');
    shr <= (others => '0');
  elsif rising_edge(Clk) then
    cnt <= cnt + X"1";
    shr <= shr(2 downto 0) & InData;
    OutCnt <= std_logic_vector(cnt);
    Out1 <= std_logic(shr(3));
  end if;
  Out2 <= std_logic(shr(1));
end process;
------------------------------------------------------------
END Sim_Test_architecture;

 

Запускаем симулятор и видим, что он тоже, как и синтезатор, видал этот мой липовый спиcок в белых тапочках:

post-2483-1144365580_thumb.jpg

Что и следовало ожидать :biggrin:

 

Усложняем задачу. Вводим липовый клок Clk101 частотой 101MHz с начальным смещением 3.33ns, и в списке чувствительности вместо dummy использум Clk101. Запускаем симулятор.

post-2483-1144367151_thumb.jpg

Ничего не изменилось :laugh:

 

"Суха теория, мой друг, а древо жизни зеленеет" © :)

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


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

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

post-14188-1144393003_thumb.jpg

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


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

Не знаю, чем Вы моделировали и как, но у меня в моделсиме получилось то что должно было получиться: не было ни одного срабатывания... Может квартус моделирует уже синтезированную схему, не знаю...

 

Simulation Mode:

 

Allows you to specify the type of simulation you want to run. The Quartus II Simulator can perform the following types of simulation:

 

* Functional—Simulates the behavior of flattened netlists extracted from the design files.

 

 

Generate Functional Simulation Netlist:

 

Generates the functional simulation netlist required for functional simulation. The flattened functional simulation netlist extracted from the design files does not contain timing information.

 

Я это понимаю так, что квартусовский симулятор не компилирует исходники заново, а пользуется готовыми результатами "основного" компилятора. Что очень даже логично, т.к. независимый компилятор симулинка может выдавать существенно другие результаты, чем компилятор того же квартуса. Это довод в пользу полностью интегрированных систем.

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


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

VHDL Process Statement warning at <location>: signal "<name>" is read inside the Process Statement but isn't in the Process Statement's sensivitity list

 

...

During simulation, the Process Statement updates the value of signal o whenever signal a changes value. However, changes to the value of signal b do not trigger the execution of the Process Statement, and thus signal o behaves as a pseudo-latch, that is, it retains its value, whenever signal b alone changes value.

 

Quartus II Integrated Synthesis ignores the pseudo-latch behavior implied by the incomplete sensitivity list in the example above. It generates logic as if the sensitivity list were complete, and therefore implements purely combinational logic for signal o.

 

ACTION: To avoid receiving this message in the future, and to avoid potential mismatches between simulation and the synthesized logic, add the specified signal to the sensitivity list.

...

 

Про синтезатор сказано яснее ясного: ему мой список по барабану. Однако про симулятор вроде бы говорится, что он и на самом деле им руководствуется, что, с моей точки зрения было бы крайней глупостью.

 

Проверяем, как на самом деле ведет себя симулятор, если ему подсунуть неправильный список чувствительности.

 

"Суха теория, мой друг, а древо жизни зеленеет" © :)

тяжело сдерживаться после такого опуса, но попробую быть вежливым и милым:

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

вы думаете что у нас задача минимум сбить вас с толку и научить вас делать неправильно? тогда зачем вы на форуме вообще что-либо спрашиваете? вы задавали вопрос. вам наиподробнейшим образом объяснили почему происходит именно так а не иначе. если вы уверены в собственных знаниях предложите ваше объяснение случившейся у вас нестыковки. вам не хватает плюрализма мнений? вам три человека указывают на ошибку. вам нужно ещё? вы не думали что те кто "ещё" не считают нужным что-то добавлять иначе здесь давно б завязалась горячая дискуссия.

 

теперь по конкретике:

в приведённой вами цитате ни слово не сказано о синтезе. почему вы делаете какие-то выводы о синтезаторе? но это только замечание. даже из того скудного фрагмента руководства видно (и по моему даже очевидно) что речь идёт о недостаче в списке чувствительности процесса описывающего комбинаторную логику, приводящую к образованию защёлки - вам ровно это уже говорили - почитайте транскрипт внимательно - вдумываясь что вам люди объясняют. или вы не понимаете в чём разница между комбинаторной логикой и тактируемой? или это намереная спикуляция? более того там ясно сказано что лучше так не делать. лучше быть внимательным к списку чувствительности чтоб не получить защёлку (и ещё много чего в подобных случаях невнимательности). вы знаете, есть такое понятие "защита от дураков" (это я ни в коем случае ни про кого-либо лично - ну просто програмный продукт тем лучше чем он устойчивее от непредсказуемых действий пользлвателя). очень рад что создатели того програмного продукта который вы используете решили повысить защиту от невнимательных пользователей или от упрямцев считающих что стандарты пишутся для недалёких людей с короткой траекторией полёта фантазии. и сделали дополнительный проход компилятора который просматривает тело процесса и после анализа создаёт реальный список событий к которым данный процесс привязан. вы думаете они этим хотели сказать :"давайте ребята - катайте всё чего в голову придёт - мы и не таких фантазёров видали"? а если у программы как-нибудь не хватит интеллекта чтобы обнаружить все ошибки пользователя - как случилось например в вашем случае? или допустим пользователь действительно хотел защёлку - а синтезатор думает что он просто чего-то не понимает в ВХДЛ как тогда быть? может лучше всё-таки придерживаться правилу установленных и не расчитывать что каждый компилятор будет думать что вы хотели получить не то что вы на самом деле описали

 

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

прикиньте так гаишник подходит к водителю только что на полной скорости сбившего на пешеходном переходе какую-нибудь старушку, переходящую на зелёный свет, и говорит: "ну если ты не сын министра обороны то ты, товарищь, попал на оооочень крупную сумму".

а тот ему:"да, слышь, корешь, я ж не знал что она додумается переходить как раз ту улицу по которой я обычно езжу. по моему скромному мнению... это была крайняя глупость с её стороны"!

 

на счёт примера вами приведённого - см. выше коментарий о защите програм от неопытных пользователей. но поверьте так везёт не всегда и не со всеми компиляторами - некоторые относятся с уважением к пользователю и не считают его не понимающим что он на самом деле описывает (и особенно таким строгим языком как ВХДЛ)

 

надеюсь вы не обиделись на мои гиперболы. в противном случае - пожалуйста, извините, обидеть не хотел. просто не понимаю почему вы не хотите услышать то что вам уже неделю пытаются безёспешно объяснить

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


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

вы думаете что у нас задача минимум сбить вас с толку и научить вас делать неправильно?

Я думаю, что всем людям свойственно ошибаться, а монополией на истину никто не обладает.

 

вы задавали вопрос. вам наиподробнейшим образом объяснили почему происходит именно так а не иначе.

На вопрос, котрый я задал (почему в железе "исчез" сигнал, который имелся при симуляции), я получил такой ответ: "Я бы посоветовал иногда заглядывать в сгенеренную по коду схематику...", "(просмотр схематики) помогает разобраться во что будет синтезирован код, обнаружить неточности в описании(появление нежелательных латчей, укорочение сдвиговых регистров". Ваше объяснение "у меня к сожлению нет времени для достаточно полного анализа почему синтезатор убирает сигнал RwWr_done вообще, но предположу что так как shr[2] упрощается сигнал RdWr_done ~ cmd_gate" совершенно неудовлетворительно. Я не вижу причин, почему бы он вообще должен быть сокращен, тем более что симулятор его не сократил.

 

Зато вместо ответа на поставленный вопрос меня стали ретиво поучать, что я в список чувствительности процесса вставляю "слишком много сигналов". Что, с моей точки зрения, ни к заданному вопросу никакого отношения не имеет (по крайней мере, для квартуса), ни само по себе пользы не приносит.

 

При этом мне "наиподробнейшим образом" объяснили, почему с процессом и со списком должно происходить "именно так а не иначе". Однако выяснилось, что на самом деле в квартусе происходит совсем не так, как мне объясняли.

 

вам три человека указывают на ошибку. вам нужно ещё? вы не думали что те кто "ещё" не считают нужным что-то добавлять иначе здесь давно б завязалась горячая дискуссия.

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

 

При этом very_hard единственный, кто, помимо собственного мнения по этому вопросу, привел объективную информацию, указав на стандарт, а также запустив симулинк и описав результаты. В результате я стал лучше понимать его резоны, потому как симулинк, как выяснилось, ведет себя иначе, чем симулятор квартуса. А также лучше стал понимать, почему квартус так настоятельно советует держать этот список в порядке, несмотря на то, что сам он пользуется своим собственным списком.

 

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

 

в приведённой вами цитате ни слово не сказано о синтезе. почему вы делаете какие-то выводы о синтезаторе?

"Quartus II Integrated Synthesis", "вы английским хорошо владеете?" (с)

 

даже из того скудного фрагмента руководства видно (и по моему даже очевидно) что речь идёт о недостаче в списке чувствительности процесса описывающего комбинаторную логику, приводящую к образованию защёлки - вам ровно это уже говорили - почитайте транскрипт внимательно - вдумываясь что вам люди объясняют. или вы не понимаете в чём разница между комбинаторной логикой и тактируемой? или это намереная спикуляция? более того там ясно сказано что лучше так не делать. лучше быть внимательным к списку чувствительности чтоб не получить защёлку (и ещё много чего в подобных случаях невнимательности).

Это не фрагмент руководства. Это фрагмент контекстно-чувствительной подсказки, объясняющей предупреждение, возникающее, когда в списке чувствительности процесса отсутствует один из сигналов, влияющий на процесс.

 

При всей своей "чувствительности к контексту" эта подсказка одна. Она выдается как в случае, когда недостача сигнала в "комбинаторном" процессе превращает его в защелку, так и во всех остальных случаях, в том числе и для тактируемых процессов.

 

Повторяю еще раз: квартус выдает это предупреждение в любом случае, когда в теле процесса есть сигнал, стоящий в правой части оператора, но этот сигнал отсутствует в списке чувствительности процесса. Подсказка на это предупреждение одна, объяснение одно (на комбинаторном примере), рекомендация одна: ввести в список процесса указанный сигнал.

 

Не выбросить сигнал из списка "за ненадобностью", как мне тут наперебой советуют, а ввести его в список. "вы не понимаете в чём разница? или это намереная спекуляция?" ©

 

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

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

 

может лучше всё-таки придерживаться правилу установленных и не расчитывать что каждый компилятор будет думать что вы хотели получить не то что вы на самом деле описали

Я тоже считаю, что лучше всё-таки придерживаться установленных правил. Квартус диктует свои правила и дает свои рекомендации, прямо противоположные вашим советам. И мне хорошо понятно, почему квартус в этом вопросе ведет себя именно так, требуя формально правильного списка. Тогда как польза от вашего совета выбросить "лишние" сигналы мне не видна.

 

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

 

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

прикиньте так гаишник подходит к водителю ...

Прикиньте, приходит в бухгалтерию ревизия. Бухгалтер выкладывает на стол две тоненькие папочки и говорит: "Вот это проверяйте, а остальное не надо проверять, у меня там ни ошибок нет, ни мухлежа". И убирает всю остальную документацию в сейф.

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


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

ок, дело ваше, делайте как считаете нужным

удач

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


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

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

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

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

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

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

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

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

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

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