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

Сигнал не задерживается триггером в Aldec

Gorby:

По вашему предположению, все присваивания, написанные без указания задержек будут при моделировании(наприме, в Modelsim) выполняться одновременно и никак не буду соответствовать поведению реального триггера?

То есть результат симуляции такого простого куска кода:

always @(posedge clk)
  begin
    signal_d1 <= signal;
    signal_d2 <= sigbel_d1;
  end

Не будут соответствовать работе 2-х триггеров?

 

Я Вас правильно понял?

 

Вы поняли правильно. Только без категоричного обобщения "все присваивания". На самом деле симулятор не так плох, чтобы тупить в таком каноническом случае. А вот сделайте счетчик десятичный (ну чтобы обратные связи от самого себя были) - тут же наколетесь.

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


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

теперь понятно почему в Quartus этот сигнал успешно переименовал и все, а у в Aldec'е произошла бага.

 

Я про багу не знаю. А в Квартусе функциональное моделирование подразумевает функционирование с нулевыми задержками.

Можете изменять даныые по фронту клока и все равно получите нужный результат. Вот с временным моделированием это не пройдет.

И понятно почему.

Про альдек не знаю. А моделсим ведет себя адекватно симулятору Квартуса.

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


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

Вот такая вот штука. получается что кроме понимания работы архитектуры системы нужно отлично понимать алгоритмы работы САПР, в котором эта архитектура верифицируется.

Очень было бы полезно почитать про дельта-задержки. Что бы в будущем таких "глюко-фич" избегать. Не подскажете, где и что почитать? Спасибо!

 

Ааааааа... держите меня трое....

Почитайте лучше про триггер. Про его setup и hold, например.

А дельта-задержек не существует. Это абстракция. В отличие от времени срабатывания триггера.

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

 

Ну и не забывайте про плохого танцора... А то всё у Вас САПР виноват :biggrin:

 

Я про багу не знаю. А в Квартусе функциональное моделирование подразумевает функционирование с нулевыми задержками.

Можете изменять даныые по фронту клока и все равно получите нужный результат. Вот с временным моделированием это не пройдет.

И понятно почему.

Про альдек не знаю. А моделсим ведет себя адекватно симулятору Квартуса.

 

А что, в Моделсиме есть разделение на функциональное и временное моделирование?

Запустите туда чистый VHDL без задержек и он Вам напоказывает...

А кое-кто взвизгнет "очередную багу Моделсима нашёл!"

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


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

Ааааааа... держите меня трое....

Почитайте лучше про триггер. Про его setup и hold, например.

А дельта-задержек не существует. Это абстракция. В отличие от времени срабатывания триггера.

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

 

Ну и не забывайте про плохого танцора... А то всё у Вас САПР виноват :biggrin:

Сурово Вы :rolleyes:

 

Я уже 4 года с FPGA работаю и имплементированы проекты порядка "Компенсатор дифференциальных задержек для VCAT до 256мс". Я отлично знаю что такое, пред-установка и пост-удержание тригерров. Мне интересно про то как симуляторы отрабатывают код, по каким алгоритмам и т.д.

 

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

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


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

А что, в Моделсиме есть разделение на функциональное и временное моделирование?

Запустите туда чистый VHDL без задержек и он Вам напоказывает...

А кое-кто взвизгнет "очередную багу Моделсима нашёл!"

я ведь не писатель. Но изъясняюсь еще пока по-русски. Первую систему моделирования я увидел в связке pcad4 и что то от viewlogic под ДОС, которое московские товарищи назвали типа Сюзи.

Разделение как хотите назовите. Но суть от отого не поменяется.

--вот сделайте счетчик десятичный (ну чтобы обратные связи от самого себя были) - тут же наколетесь.--

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

Хотя наверно это он vhdl не любит. Потому что на верилоге чистый счетчик без наколок функционирует.

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


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

Имеем тот эффект, что время срабатывания описанного кривыми руками триггера равно нулю.

Оно (время срабатывания) всегда равно дельта-задержке в поведенческом моделировании (если нет каких-то связей со времянками), а не 0.

И то, что написано у старттопика в коде - правильно!

А добавлять "чтоб всегда работало" after 1ns - это костыль и он то и есть кривость.

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


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

Ответьте за базар.
Тю киса ты с какова горада? Смените лексикон -- не на зоне.

 

Скриншот симулирования двух идеальных триггеров - в студию.
Для начала в студию код.

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


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

Не подскажете, где и что почитать?

Честно говоря, не помню где это читал - давно дело было... Скорей всего я это у Бибило видел (т.к. других книг я в общем-то и не читал - маны Aldecа были вполне адекватны для изучения :) )...и ИМХО (может быть ошибаюсь, но) - дельта задержка входит в стандарт, а не является особенностью какого-то симулятора, и наверняка о ней будет написано в любой книге, полно охватывающей VHDL.

Наверно маны того же aldecа можно почитать :), но это конечно не книга - там слабенькая структура... Вот полезно по топику - в мане Aldecа поищите "VHDL Simulation Cycle"

 

P.S. Бибило не осилил. Тока начало :) показалось нужным (правда оч старая редакция была...)

P.P.S. Не знаю как в Active-HDL 8.1, но в 7.3 в появилось сырое на мой взгляд нововведение - Accelerated Simulation. Очень глючно ведут себя временные диаграммы (особенно сохранение). Чтобы не разлюбить Active - рекомендую в настройках изменить Waveform Viewer/Editor на "Standard Waveform Viewer/Editor" если и в 8.1 наблюдается неадекватность.

 

P.P.S: в азах VHDL писалось что при симуляции любое назначение сигнала происходит с дельта-задержкой (т.е. и синхронное И АСИНХРОННОЕ).

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

Изменено пользователем Gothard

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


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

Оно (время срабатывания) всегда равно дельта-задержке в поведенческом моделировании (если нет каких-то связей со времянками), а не 0.

И то, что написано у старттопика в коде - правильно!

А добавлять "чтоб всегда работало" after 1ns - это костыль и он то и есть кривость.

 

Ну, крыть нечем. Виноват во всем. Костыли и кривость.

Это примерно как в электрических симуляторах моделировать схемы с идеальными элементами. Ну да ладно...

 

Только прокомментируйте пожалуйста, вот этот счетчик. Сразу оговорюсь - его писал не я. Идет в примерах с Моделсимом.

 

--
-- Copyright 1991-2008 Mentor Graphics Corporation
--
-- All Rights Reserved.
--
-- THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF 
-- MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
--   

entity counter is
    port (count : buffer bit_vector(8 downto 1);
        clk   : in bit;
        reset : in bit);
end;

architecture only of counter is
    constant tpd_reset_to_count : time := 3 ns;
    constant tpd_clk_to_count   : time := 2 ns;

    function increment(val : bit_vector) return bit_vector
    is
        -- normalize the indexing
        alias input : bit_vector(val'length downto 1) is val;
        variable result : bit_vector(input'range) := input;
        variable carry : bit := '1';
    begin
        for i in input'low to input'high loop
            result(i) := input(i) xor carry;
            carry := input(i) and carry;
            exit when carry = '0';
        end loop;
        return result;
    end increment;
begin

    ctr:
    process(clk, reset)
    begin
        if (reset = '1') then
            if reset'event then
                count <= (others => '0') [color="#FF0000"]after tpd_reset_to_count[/color];
            end if;
        elsif clk'event and (clk = '1') then
            count <= increment(count) [color="#FF0000"]after tpd_clk_to_count[/color];
        end if;
    end process;

end only;

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


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

Оно (время срабатывания) всегда равно дельта-задержке в поведенческом моделировании (если нет каких-то связей со времянками), а не 0.

И то, что написано у старттопика в коде - правильно!

А добавлять "чтоб всегда работало" after 1ns - это костыль и он то и есть кривость.

 

Было бы правильно - топика бы не было.

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


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

Только прокомментируйте пожалуйста, вот этот счетчик. Сразу оговорюсь - его писал не я. Идет в примерах с Моделсимом.

Ну вот и криво на мой взгляд. Сам по себе счетчик ни к какому аппаратному базису не привязан. А если в моя схема работает на частоте свыше 500 МГц и я туда поставлю этот счетчик - что тогда случится?

Это примерно как в электрических симуляторах моделировать схемы с идеальными элементами. Ну да ладно...

Здесь вы перегибаете палку. У всего есть свои рамки применения.

Если уж добавлять задержки - то иметь возможность их параметризовать, чтобы привязать к конкретному аппаратному базису, но на это существует временное моделирование. При моделировании ПОВЕДЕНИЯ - задержки нужны только в узкоспециализированных местах, таких как интерфейсы, например.

 

Было бы правильно - топика бы не было.

Так ведь уже нашли, что проблема была в другом месте схемы :) Сам по себе приведенный в начале темы код - правильный, поэтому и начали грешить на симулятор. Симуляторы конечно не без ошибок, но как правильно заметили - в них их гораздо меньше, так что лучше все таки начать искать с себя.

 

P.S. никогда не был в восторге от поделок ментора.

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


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

Я уже 4 года с FPGA работаю и имплементированы проекты порядка "Компенсатор дифференциальных задержек для VCAT до 256мс". Я отлично знаю что такое, пред-установка и пост-удержание тригерров. Мне интересно про то как симуляторы отрабатывают код, по каким алгоритмам и т.д.

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

От Вас ожидалось примерно следующее: "вот, в функциональной симуляции в этом месте сбоит, а в post-layout все нормально. Где могут быть грабли?"

А Ваша постановка вопроса показывает, что Вы не понимаете разницы между ними. Иначе бы проверили.

А если бы работали 4 года с ФПГА, то забили бы на функциональное моделирование вообще, оставив его только для проверки маленьких блочков кода.

Самое достоверное - post-layout симуляция, и то не на все 100 %. Ибо не учитывает сигналы за пределами кристалла, да и PLL внутри не всегда адекватно симулируется.

 

Был тут один, всё супернадежными компиляторами бредил. Постоянно находил баги в Си-компиляторах.

 

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

 

Я не смеялся. Это было отчаяние :-). И рабочее решение Вам предоставил.

А начинающим представляют не того, кто спрашивает, а того, кому по профилю 23 года, а он уже 4 года ФПГА занимается :-)

 

Удачи!

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


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

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

Самое достоверное - post-layout симуляция

Кажется вы учите плохому - post-layout симуляция хороша для проверки того, что в результате синтеза и расскладки проекта поведение не отличается от описанного (и ожидаемого). А то что вы предлагаете - приводит к маскированию ошибок в коде. Таких как поднята в этой теме, sensevity list'ам, однозначности описания, наверное найдутся и другие...

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


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

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

 

По мойму необходимо снизить накал дискусии.

 

В поведенческом симуляторе нет понятия "дельта задержка", есть понятие "дельта цикл".

Длительность "дельта цикла" с точки зрения симулятора - 0. Это внутренние циклы симулятора по расчету нового состояния схемы после определенного события и подготовка информации для следующего по СИМУЛИРУЕМОМУ ВРЕМЕНИ события (events). После очередного events в при дельта цикле=0 симуляттор проходит по списку (подготовленному на предыдущих этапах) сигналов которые могут изменится для этого events. Производится расчет новых значений. При этом возможна ситуация когда новые значения сигналов необходимо переасчитывать несколько раз пока список всех возможных изменений в этот момент симулируемого времени не исчерпается. Вот эти несколько раз перерасчетов и есть дельта циклы. При этом вычисляется следующее значении времени симуляции для очередного events. Только после этого происходит запоминание новых значений сигналов, приращение времени симуляции и повторение шага для нового events.

 

 

Успеха! Rob.

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


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

Действительно было удивительно узнать о таких особенностях функциональных симуляторов.

Я думаю в FPGA FAQ стоит добавить краткий комментарий по теме переименования тактовых входных сигналов во внутренние, и о том как это может повлиять на симуляцию, и о том как нада писать event-accurate модели.

 

Спасибо всем за сообщения. Тема исчерпала себя.

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


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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...