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

Синтезатор минимизирует лишнего

я не могу точно отослать к главам стандарта, но вроде бы

 

reg [15:0] MyReg = 0;

и

reg [15:0] MyReg;
initital begin
  MyReg = 0;
end

Эквивалентны.

Да, только не "output reg [1:0]State = 0"

 

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


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

...power-up level of a register to minimize the area of the design...

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

 

Да, только не "output reg [1:0]State = 0"

 

вот так пишу, так можно.

 

module MyModule
   ( 
     ....
     out_reg,
     ....
    );

    output reg [15:0] out_reg = 0; 

endmodule

 

и можно добавлять в начале

#(
    parameter My_PARAM = 10, 
    .....)

 

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

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


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

Сделайте синхронный сброс.
Да хоть какой сброс, от куда его подавать? От PLL, как советует тов. Голиков? Но в общем случае PLL может и не присутствовать в проекте.

 

Даже если нет PLL все равно генератору надо раскачаться, у многих плис после загрузки конфигурации есть возможность выбрать задержку до появления сигнала готовности.
А разве пока ПЛИС конфигурируется генератор не успеет выйти на режим?

 

ну это не аргумент. Самый последний брать не надо, а какой-то из новых с патчами вполне нормально работает.
Вполне аргумент. У меня комутер слабенький новые квартусы работают заметно медленнее. Да и тут периодически всплывают жалобы "Раньше проект нормально разводился, а на новом Квартусе уже не лезет в кристалл.", в технике есть хорошее правило "Работает - не трожь".

Ваш то пишет на вашу конструкцию что он нашел автомат?
Не знаю, в консоли ничего такого не пишет.

 

Могли бы указать, где это у Альтеры прописано.
Говорю же, точно не уверен, но помню, что что-то такое читал в документации на первый Циклон.

 

Не гарантирует. Смотрим вашу опцию 'Power-Up don't care':

Т.е. у вас State изначально в X, а не в 0.

И синтезатор имел полное право стартануть автомат из любого состояния (что он и сделал)

А, ну теперь ясно.

Хотя до сих пор не понимаю, почему второй код работает.

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


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

Да хоть какой сброс, от куда его подавать? От PLL, как советует тов. Голиков? Но в общем случае PLL может и не присутствовать в проекте.

У Альтеры нет примитива startup?

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


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

У Альтеры нет примитива startup?
Первый раз о таком слышу, можно по подробнее, где его искать?

 

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


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

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

 

Я с Альтерой не работал, поэтому и спросил. У xilinx эти примитивы в наборе CONFIG/BSCAN в лампочке. В этом startup есть сигнал окончания конфигурации, бытовало мнение, что его можно завести как сброс для начальной установки. Возможно, это мнение ошибочно.

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


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

Я с Альтерой не работал, поэтому и спросил. У xilinx эти примитивы в наборе CONFIG/BSCAN в лампочке. В этом startup есть сигнал окончания конфигурации, бытовало мнение, что его можно завести как сброс для начальной установки. Возможно, это мнение ошибочно.

Не ошибочно.

EOS - Active high output signal indicating the End Of Startup.

Именно этот сигнал постоянно используем для генерации общего ресета. В том числе и для PLL.

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


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

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

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


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

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

 

 

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


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

второй во 2 состоянии останавливается, если начать с него то кода еще меньше. С другой стороны дефалт у 2 автомата активный в отличии от 1...

 

 

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

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


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

Салют.

 

Синтезируем простенький автомат:

Методом научного тыка нашёл решение проблемы, в настройках синтезатора нужно снять опцию "Power-Up don't care".

Кто-нибудь может сказать что происходит?

Сейчас напишу немного другое...

Я вот даю уроки по ПЛИС и первое, что я объясняю, так это то, что любая разработка для инженера это риск. И его задача в том, чтобы этот риск свести к минимуму. Потому как цель - это зарабатывание денег, а не написание разных файлов.

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

А вот "изучение" криво написанного файла - этот то как раз и есть тупик. И он, файл этот, приводит к увеличению числа ошибок. В сложном проекте это приведет к лавинообразному нагромождению ошибок.

Так вот, в чем цель ТС? Поиграть файлами? Или нужен результат проекта? Если нужен результат, то берем описание автомата из шаблонов или из рекомендаций по языку и не выпендриваемся...

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


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

Звучит мрачновато. Из серии "жизнь - это боль".

 

Но всё остальное правильно, конечно. Если работа не связана с тестированием средств моделирования и синтеза, то RTL-описание должно быть предельно понятным и разработчику, и синтезатору, и коллегам. Иначе это не описание, а фуфло.

 

любая разработка для инженера это риск.

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


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

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

С другой стороны дефалт у 2 автомата активный в отличии от 1...
Он то активный, но как автомат может попасть в 3-е состояние, если по его логике он туда попасть не может? В результате сбоя, наводок, помех, воздействия радиации? Но если такое случится, мне кажется, уже никакой дефолт не поможет, ведь сбойнёт не только этот автомат, но и другие части схемы.

 

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

 

Так вот, в чем цель ТС? Поиграть файлами? Или нужен результат проекта? Если нужен результат, то берем описание автомата из шаблонов или из рекомендаций по языку и не выпендриваемся...
Имеет место факт, вот и интересно почему происходит именно так, а не иначе, и никаких выпендриваний здесь нет.

LCDTest.flow.rpt.txt

LCDTest.map.rpt.txt

LCDTest.map.summary.txt

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


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

Задача ваша из полезнейшей категории: "почему неправильное RTL-описание синтезируется/работает не так, как я хочу? интернет, памагай!"

 

В соответствии с вашим RTL-описанием (первый листинг), начальное состояние регистра

reg [1:0] State

будет 2'bxx, т.е. "логическое неопределенное". Скажу больше, на любом времени моделирования значение будет 2'b1x.

 

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

 

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

 

Успехов.

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


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

Он то активный, но как автомат может попасть в 3-е состояние, если по его логике он туда попасть не может? В результате сбоя, наводок, помех, воздействия радиации? Но если такое случится, мне кажется, уже никакой дефолт не поможет, ведь сбойнёт не только этот автомат, но и другие части схемы.

тут надо ввести понятие небезопасный и безопасный автомат. В безопасном автомате все неиспользуемые значения переходят в состояние восстановления. А в небезопасном все состояния в которые нельзя попасть выкидываются.

 

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

 

Прикрепил 3 файла с отчётами, ничего такого там вроде не пишут.

я не очень искушен в квартусе, но сейчас в последних версиях там есть какие-то интерактивные отчеты, которые не файлы, а в среде открываются какие-то вкладочки, закладочки, и там все это написано, там есть прям закладка FSM и в ней все автоматы собраны.

 

 

Так вот, в чем цель ТС? Поиграть файлами? Или нужен результат проекта?

На самом деле исследование работы среды и почему она приняла то или иное решение также важно в понимание процесса, на мой взгляд, как и заучивание стандартных описаний. Это база и фундамент. ИМХО конечно.

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

 

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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