Мур 1 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Интересный вывод. То есть попытка полностью понять что происходит, понять инструмент и в деталях управлять процессом - это молодость:)? Вы как я понимаю точно знаете что будет да? Не понимаю, чего вы кипятитесь... Обращаю ваше внимание, что нет одинаковых синтезаторов. Ваш опыт связан теперь только с одним тулзом или вы пробовали разные? Молодость в вашем нетерпении. Тут должны пройти года(и ворох ошибок). А на основании чего вы это заявляете? Вы как я понял сторонник "деды так делали и мы так будем" :))) так вот может иногда стоит по молодецки поэкспериментировать? А заодно нам дуракам расскажете что получилось. Человеку свойственно ошибаться. Человеку не свойственно совершенство (с) Ф.Брукс ...В том числе и мне. ))). Это просто опыт.. Вот это мне демонстрирует полное непонимание или не владение темой. С чего вдруг то надо обязательно так делать? Более того засунут под клок приведенную схему вы создаете огромное количество проблем, чисто комбинаторная схема лишена мета-стабильности просто по определению :) Если не понимаете, спросите я объясню. Гляньте шире. Проблема ведь не в этой комбинационной схеме, а в следующем регистре, у которого на входе будет эта КАША... Плохо видите) Вы не хотите слушать что вам говорят, и вешаете ярлыки не разобравшись. Простите. Я не ставил целью обижать. Я склонен утрировать для понимания... Весь интернет и форумы основных производителей ПЛИС вместе с их суппортом считают что никак, но Мур другого мнения. Правда в силу нашей молодости он не хочет нам объяснить деталей:( Это смотря к чему список чувствительности.. К тактированному или полностью параллельному блоку? Именно, в этом и был смысл примера, но видать он был слишком молодецким%) Более того попытки защелкнуть комбинаторику в триггера без синхронизации, вот тут то как раз все встанет в полный рост с мета-стабильностью, гонками сигналов и прочими проблемами. Это к тезису что синхронный дизайн всегда благо. Всегда благо И есть один очень хороший пример sample_and: process(d) begin a <= b & c; end process; Уважаемый Мур прокомментируете что будет при синтезе и симуляции данной схемы Отличный пример. Вы тут получите свой а в моменты смены сигнала d Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Отличный пример. Вы тут получите свой а в моменты смены сигнала d Переступите через свой опыт, пожалуйста... и проверьте что будет на самом деле:) единственное я имел ввиду, конечно a <= b and c; просто давно не писал на VHDL... И да, когда будите проверять не поленитесь посмотреть технологическую схему после синтеза, а то и сделать пост синтез симуляцию Гляньте шире. Проблема ведь не в этой комбинационной схеме, а в следующем регистре, у которого на входе будет эта КАША... Какая каша простите? Если входы этой схемы - это выходы регистров на той же частоте - ничего не будет, все будет работать штатно. Если выход этой схемы не идет на вход никакого регистра, то опять же все будет работать штатно и правильно. Это смотря к чему список чувствительности.. К тактированному или полностью параллельному блоку? В том то и дело что НЕВАЖНО!!!!! синтезатор просто игнорирует список чувствительности и синтезирует схему по внутреннему описанию процесса! Это верно как минимум для ISE, Quartus, кто там еще остался симплифай? Вроде как он тоже себя так ведет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Переступите через свой опыт, пожалуйста... и проверьте что будет на самом деле:) единственное я имел ввиду, конечно a <= b and c; просто давно не писал на VHDL... И да, когда будите проверять не поленитесь посмотреть технологическую схему после синтеза, а то и сделать пост синтез симуляцию Спасибочки... Сделаю для развития... Какая каша простите? Если входы этой схемы - это выходы регистров на той же частоте - ничего не будет, все будет работать штатно. Если выход этой схемы не идет на вход никакого регистра, то опять же все будет работать штатно и правильно. Вы опять в рамках... Выставите свою комбинашку входами во внешний мир, чтобы была асинхронность. И будет ВАМ крах идеи... В том то и дело что НЕВАЖНО!!!!! синтезатор просто игнорирует список чувствительности и синтезирует схему по внутреннему описанию процесса! Это верно как минимум для ISE, Quartus, кто там еще остался симплифай? Вроде как он тоже себя так ведет. А вы пропустите в списке какой нибудь сигнал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Вы опять в рамках... Выставите свою комбинашку входами во внешний мир, чтобы была асинхронность. И будет ВАМ крах идеи... С чего вдруг то? А вы пропустите в списке какой нибудь сигнал тут мы возвращаемся к предложенной схеме sample_and: process(d) begin a <= b and c; end process; тут пропущены все сигналы, и если бы синтезатор смотрел на список чувствительности он бы вообще не смог бы ее синтезировать, в железе данная схема вообще невозможна. Скорее всего это и приводит к решению игнорировать этот список синтезатором. Для синтезируемого подмножества схем, список не меняет их поведение, он только может сделать так что схема становится не реализуемой и все.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Как-то дискуссия в тупик зашла. Предлагаю сойтись на том, что для абсолютной переносимости и для сопоставимости результатов работы железа и симулятора ЛУЧШЕ не экспериментировать, а приучить себя думать и над списком чувствительности в том числе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Как-то дискуссия в тупик зашла. Предлагаю сойтись на том, что для абсолютной переносимости и для сопоставимости результатов работы железа и симулятора ЛУЧШЕ не экспериментировать, а приучить себя думать и над списком чувствительности в том числе. зачем? используем VHDL 2008 :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Пропустил... тут то все на самом деле просто. Если схема работает по фронту одного сигнала, то она синхронная относительно этого сигнала. Если в ней есть реакции на фронты и уровни нескольких сигналов, которые не имеют зависимости между собой, то части схемы управляемые разными сигналами - асинхронны друг другу. Для приведения к синхронности применяют не один триггер. Одного мало... А что делать с SPI slave при взаимодействии с мастером из внешнего мира? Как!!! Вы этого не применяете? тот же прием! привязать события набором триггеров (не один) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Для приведения к синхронности применяют не один триггер. Одного мало... не очень понял о чем это в контексте сказанного. Я не говорил о схеме синхронизации, я говорил о критерии синхронности, ну да ладно... Как!!! Вы этого не применяете? тот же прием! привязать события набором триггеров (не один) Конечно же нет, потому что это верный способ провалить частоту минимум в 4 раза. Просто на самом деле знаю что там происходит и что такое мета-стабильность, и гонка сигналов. Поэтому я и могу сделать правильный SPI slave, который естественно не пересинхронизируется во время приема-передачи на рабочую частоту схемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Пишите на Verilog'е - там список чуствительности влияет (более того - определяет) синтезируемую схему :yeah: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба так и делаем:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Пишите на Verilog'е - там список чуствительности влияет (более того - определяет) синтезируемую схему :yeah: А можно какой-то пример? С Верилогом особо не работал, для общего развития немного баловался, но не более. Насколько я знаю, там, например, в списке чувствительность указывают фронт ресета тоже из соображения корректности симуляции, потому что в реальном железе никакой фронт конечно же анализироваться не будет. Поэтому я был уверен, что с этой точки зрения разницы в языках нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба если написать always(posedge clk or negedge reset_n) begin if(reset_n == 1'b1) .... else .... end могут быть проблемы, синтез и симуляция действительно могут разойтись. ну и конечно же симуляция честно отрабатывает фронты асинхронных сигналов, а реальная схема отрабатывает уровни. То есть always(posedge clk or posedge set) begin if(set == 1'b1) a <= b; else .... end в симуляции в а засовывается b по фронту set, и меняй не меняй b после фронта - пофиг. В реальной схеме, Если set стоит в 1, то изменение b будет проходить на a. А влияние на поведение, - это пропуск слова posedge, хотя я сейчас что-то задумался.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба А можно какой-то пример? С Верилогом особо не работал, для общего развития немного баловался, но не более. Насколько я знаю, там, например, в списке чувствительность указывают фронт ресета тоже из соображения корректности симуляции, потому что в реальном железе никакой фронт конечно же анализироваться не будет.Будет. Пример уже Golikov привел. Основное отличие от VHDL в том, что в Verilog'е нет конструкций clk'event и аналогичных, а реакция на фронты выводится из списка чуствительности. В VHDL реакция на фронты явно записывается в теле процесса. Если синтезатор в Verilog'е не опознает паттерн из списка чуствительности и использования сигнала в блоке, то он скорее всего вообще откажется это синтезировать. Ну и что бы не быть голословным: // D trigger with async reset always(posedge clk or posedge reset) if (reset) out <= 1'b0; else out <= in; // Latch with reset always(posedge reset) if (reset) out <= 1'b0; else out <= in; Как видно минимальное отличие только в списке чуствительности (posedge clk) привело к изменению схемы (причем оба варианта вполне валидны) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба // Latch with reset always(posedge reset) if (reset) out <= 1'b0; else out <= in;[/code]Как видно минимальное отличие только в списке чуствительности (posedge clk) привело к изменению схемы (причем оба варианта вполне валидны) А, все, понял, о чем речь. А нельзя сделать в явном виде: always(posedge reset) if (reset) out <= 1'b0; else if (clk) out <= in; Понятно, что многие любят язык в том числе за то, что позволяет убрать избыточность типа такой, но если VHDL со своим стилем уже въелся в мозг, не поможет такой вариант исправить ситуацию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба нет, не может. это будет латч с разрешением что ли%:) он просто не станет триггером, потому что нужно не значение клока а фронт, событие. То есть нет аналога ВХДЛьного clk'event внутри алвейса, Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться