CaPpuCcino 0 5 апреля, 2006 Опубликовано 5 апреля, 2006 · Жалоба Хочу обратить Ваше внимание на одну мелочь:имхо было бы логичнее pulse5 прописать также в конструкции асинхронного сброса: а на мой взгляд эта переменная и так покрыта и сбрасывать её необязательнo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Very_hard 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба а на мой взгляд эта переменная и так покрыта и сбрасывать её необязательнo Да я и не говорю, что это обязательно. Просто существует неочевидная связь между асинхронным сбросом bit_cnt и присвоением переменной pulse5 (разрешение записи). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Если нет события "rising_edge", то изменения сигналов cmd_gate и bit_cnt, присутствующих в списке чувствительности, только впустую запустят процесс, который ничего не выполнит. Так что все же лучше будет (для скорости моделирования) их туда не включать. Если честно, я точно не знаю, что конкретно считается при запуске процесса. Если думать, что считаются только сами изменения выходных сигналов, то можно и не включать. Однако как правило я думаю о людях лучше, чем они заслуживают, :) поэтому в качестве рабочей гипотезы я принимаю, что Квартус запускает процес не только для этого, но в том числе и для того, чтобы посчитать всевозможные нарушения времянок. Например, если сигналы cmd_gate и bit_cnt изменятся незадолго до или же сразу вслед за событием "rising_edge", то это будет нарушением оговоренных спецификаций железа (времена сетап и холд). "Лишний" запуск процесса в принципе позволяет это обнаружить, тогда как при настоятельно мне советуемом "избегании ненужных запусков" обнаружить этого будет нельзя. При условии, конечно, что Квартус и правда запускает процесс по указанному мной списку, в чем я лично сомневаюсь. Я подозреваю, что он достаточно умен, чтобы самому определить, когда запускать процесс, безотносительно к моему списку. А мой список использует только и исключительно для того, чтобы сравнить его с собственным списком (по которому процесс и будет запускаться на самом деле), и выдать ворнинг, мол, "что ж ты, блин, мне подсовываешь?" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Very_hard 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Например, если сигналы cmd_gate и bit_cnt изменятся незадолго до или же сразу вслед за событием "rising_edge", то это будет нарушением оговоренных спецификаций железа (времена сетап и холд). "Лишний" запуск процесса в принципе позволяет это обнаружить, тогда как при настоятельно мне советуемом "избегании ненужных запусков" обнаружить этого будет нельзя. "Незадолго до" "сразу вслед" - все равно события rising_edge нет, а значит if rising_edge не выполнится. Нет фронта - нет действий... При условии, конечно, что Квартус и правда запускает процесс по указанному мной списку Запускает. Иначе - беспредел. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Например, если сигналы cmd_gate и bit_cnt изменятся незадолго до или же сразу вслед за событием "rising_edge", то это будет нарушением оговоренных спецификаций железа (времена сетап и холд). "Лишний" запуск процесса в принципе позволяет это обнаружить, тогда как при настоятельно мне советуемом "избегании ненужных запусков" обнаружить этого будет нельзя. Чепуха. Связи между списком чувствительности и анализом временных характеристик нет. Это влияет только на ФУНКЦИОНАЛЬНОЕ(RTL) моделирование, и лишние сигналы зря запускают процесс. Аналаз временных характеристик ведется на основании технологических примитивов после синтеза/разводки. Т.е. когда оригинальным кодом даже не пахнет. Время установки и удержания сигнала считаются относительно источника сигнала (триггера, вывода ИС). "Незадолго до" "сразу вслед" - все равно события rising_edge нет, а значит if rising_edge не выполнится. Нет фронта - нет действий... А запуск процесса есть. И если это происходит часто(к примеру >10^6), то вы тратите время на обогрев помещения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Very_hard 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба "Незадолго до" "сразу вслед" - все равно события rising_edge нет, а значит if rising_edge не выполнится. Нет фронта - нет действий... А запуск процесса есть. И если это происходит часто(к примеру >10^6), то вы тратите время на обогрев помещения. Конечно же запуск процесса есть! Только какие "нарушения времянок" он обнаружит, если ничего не выполнит...:)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба При анализе функциональной модели не происходит "нарушения времянок" т.к. все элементы идеальные! Пустая трата времени. Дополнительно: ложное срабатывание процесса может привести к неправильной симуляции. Например, очень часто, значения по умолчанию для сигналов присваивается в теле процесса перед основной логикой. Ложным запуском вы активизируете процесс, выполните установки по умолчанию, и выйдете из процесса. Синтезированная схема будет работать, а ваше повденческое описание - нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба При анализе функциональной модели не происходит "нарушения времянок" т.к. все элементы идеальные! Пустая трата времени. Я не пишу отдельно VHDL код для функциональной симуляции, пишу один код для всего проекта. Который используется и для функциональной симуляции (при отладке), и для живого кристалла, когда Квартус проверяет все времянки. Если Вы пишете другой код, поделитись, зачем это нужно, что при этом реально выигрывается, и как Вы потом разные коды сводите воедино? Неужели несколько долей секунды машинного времени, выигранные при функциональной симуляции, стоят траблов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба лишние сигналы зря запускают процесс. Значит, чтобы сэкономить машинное время, я должен уметь безошибочно определять, какие сигналы в списке лишние, а какие нет? Что будет если я в список клок по ошибке не включу? Я предпочитаю чтобы компьютер экономил мое время :) При условии, конечно, что Квартус и правда запускает процесс по указанному мной списку Запускает. Иначе - беспредел. :) Наоборот, беспредел - это если он будет запускать по моему списку. Тогда я увижу не то, что произойдет на самом деле, а то, что я хочу увидеть. Весь смысл симуляции теряется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Я всегда говорил. Начинать обучение надо с графического ввода. Прямыми линиями очень трудно написать слово процесс. Что нарисуете, то и получите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Very_hard 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Наоборот, беспредел - это если он будет запускать по моему списку. Тогда я увижу не то, что произойдет на самом деле, а то, что я хочу увидеть. Весь смысл симуляции теряется. Извините, это бред. То что Вы хотите увидеть "на самом деле", Вы видите при моделировании "после-трассировки", т.е. при моделировании синтезированной по коду схемы. В этом моделировании уже нет места списку чувствительности процесса: результат зависит от входного сигнала и временных характеристик элементов синтезированной схемы(см. сообщ. vetal). А если моделирующий софт будет игнорировать Ваш список при моделировании до синтеза, то этим нарушит стандарт VHDL, который гласит, что процесс запускается при изменении любого из сигналов, присутствующих в списке чувствительности(если таковой есть). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Наоборот, беспредел - это если он будет запускать по моему списку. Тогда я увижу не то, что произойдет на самом деле, а то, что я хочу увидеть. Весь смысл симуляции теряется. просто 3.14-здец какой-то. удивительная настойчивость, фантастическая логика :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба То что Вы хотите увидеть "на самом деле", Вы видите при моделировании "после-трассировки", т.е. при моделировании синтезированной по коду схемы. В этом моделировании уже нет места списку чувствительности процесса: результат зависит от входного сигнала и временных характеристик элементов синтезированной схемы(см. сообщ. vetal). Это не аргумент. Чем раньше вылавливаются ошибки, тем лучше. Лучше выловить их на стадии функционального моделирования. А если моделирующий софт будет игнорировать Ваш список при моделировании до синтеза, то этим нарушит стандарт VHDL, который гласит, что процесс запускается при изменении любого из сигналов, присутствующих в списке чувствительности(если таковой есть). Интересно. Ссылочку можете привести? Насколько я понимаяю, ни один компилятор достаточного сложного языка реально не соответствует стандарту. Возьмите С++, полного соответствия нет ни у мелкософта, ни у GCC, не говоря уж о прочих. Квартус о своем неполном соответствии пишет черным по белому. А главное - в чем все-таки преимущество такого запуска процесса строго по моему списку? Милливатт-часы? Вот это точно бред. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Я не пишу отдельно VHDL код для функциональной симуляции, пишу один код для всего проекта. Который используется и для функциональной симуляции (при отладке), и для живого кристалла, когда Квартус проверяет все времянки. Если Вы пишете другой код, поделитись, зачем это нужно, что при этом реально выигрывается, и как Вы потом разные коды сводите воедино? Неужели несколько долей секунды машинного времени, выигранные при функциональной симуляции, стоят траблов? никто никакие коды никуда не сводит. код один - ваш собственный поведенческий - а точнее около-поведенческий (синтез чистого поведения - задача сложная). компилятор (синтезатор) переводит ваше языковое описание в термины арxитектурных примитивов ПЛИС - и вы уже можите заливать эту прошивку - это о синтезе теперь о верификации - этот же код который вы можете синтезировать - вы можете подвергнуть функциональной и временной верификации - при функциональной ваш код просто интерпретируется симулятором без структурного преобразования - речь о проверки каких-либо временных задержек в сxеме здесь не идёт. другое дело временная симуляция - как и в случае синтеза компилятор переводит код в базис примитивов и потом автоматически создаёт файл на том же языке ХДЛ но уже в структурном описание (тот же код ХДЛ но напичканый инстансами логических ячеек, буфферов и т.д. соединённых проводочками) такой процесс называется обратной аннотацией (сами примитивы также описаны на языке - при том поведенчески) на эти примитивы по желанию и вешаются тайм чеки (при том тоже абсолютно автоматически) эта тема уже много раз обсуждалась на форуме. в общем предлагаю закрывать эту тему - а то мы так очень далеко уйдём от начального вопроса и обсудим мимоходом все проблемы вычислительной техники - лучше открыть новые темы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Very_hard 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба хотя бы /pub/DOC/Books/VHDL/VHDL Standard.pdf Это не аргумент. Чем раньше вылавливаются ошибки, тем лучше. Лучше выловить их на стадии функционального моделирования. Конечно лучше, только список чувствительности в этом не поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться