Jump to content
    

Начальные значения

Меня интересует два вопроса.

Как задать начальное состояние для машины состояний(автомата)?

Всегда ли оно равно 0?

 

И второе как правильно производить сброс(reset)? Может есть какие рекомендации?

Тут под вопрос конвейерного процессора.

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

 

SM писал про глобальные линии клока и сброса. А где про них прочитать? Как их сделать глобальными?

И попутный вопрос, что SM имеет в виду под стробирующем сигналом? Это барьерная синхронизация?

Edited by Paviaa

Share this post


Link to post
Share on other sites

1) Чтобы задать начальное состояние автомату, нужно описать сигнал сброса для него:

 

always @(posedge clk or posedge reset) // async
или
always @(posedge clk) // sync
  if (reset)
    fsm <= STATE_IN_RESET;
  else
/* тут сам автомат */

 

2) Правильно производить сброс... Рекомендация одна - сбрасывать все, от чего зависит состояние системы. Никто никуда не убежит, если все сбрасывается одним синхронным резетом (для начала лучше синхронным), сам сигнал reset должен быть также синхронным с тактовой схемы.

 

Про глобальные линии, их типы и количество, можно узнать в даташите на конкретную ПЛИС, в разных ПЛИС у них разная структура и количество.

 

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

Share this post


Link to post
Share on other sites

Меня интересует два вопроса.

Как задать начальное состояние для машины состояний(автомата)?

Всегда ли оно равно 0?

 

И второе как правильно производить сброс(reset)? Может есть какие рекомендации?

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

На ум приходят два решения:

1) брать тактовый сигнал не напрямую с ноги ПЛИС, а с PLL;

2) использовать внешний супервизор.

 

Если же сброс будет поступать во время работы схемы, то говорят, что он должен быть синхронным. Хотя я полагаю, его можно сделать синхронизированным, т.е. сбрасывать триггеры можно через асинхронные входы CLRN, но сигнал должен поступать на них от триггера работающего на том же тактовом сигнале.

Edited by Jackov

Share this post


Link to post
Share on other sites

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

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

 

Если же сброс будет поступать во время работы схемы, то говорят, что он должен быть синхронным. Хотя я полагаю, его можно сделать синхронизированным, т.е. сбрасывать триггеры можно через асинхронные входы CLRN, но сигнал должен поступать на них от триггера работающего на том же тактовом сигнале.

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

Share this post


Link to post
Share on other sites

1) Чтобы задать начальное состояние автомату, нужно описать сигнал сброса для него:

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

 

сам сигнал reset должен быть также синхронным с тактовой схемы.

Вашу фразу не понял. Каким образом? Я всегда считал что reset это кнопка которую нажимает человек. Не понимаю как человеку за синхронизироваться с 50 МГц кварцем. Не ну понятно что можно поставить триггер, но какой смысл если.

Достаточно ведь always @(posedge clk)

 

 

Про глобальные линии, их типы и количество, можно узнать в даташите на конкретную ПЛИС, в разных ПЛИС у них разная структура и количество.

Не могу найти. Можно конкретнее Altera Cyclone IV E FPGA язык Virelog.

Share this post


Link to post
Share on other sites

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

 

 

Вашу фразу не понял. Каким образом? Я всегда считал что reset это кнопка которую нажимает человек. Не понимаю как человеку за синхронизироваться с 50 МГц кварцем. Не ну понятно что можно поставить триггер, но какой смысл если.

Достаточно ведь always @(posedge clk)

 

 

 

Не могу найти. Можно конкретнее Altera Cyclone IV E FPGA язык Virelog.

 

Настоятельно рекомендую Вам почитать что-нить "для чайников". Без обид, но, судя по этим вопросам, Вам надо с этого начинать. :)

Share this post


Link to post
Share on other sites

что он должен быть синхронным. Хотя я полагаю, его можно сделать синхронизированным,

А разве это не одно и тоже?

Share this post


Link to post
Share on other sites

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

Например, его можно сформировать, используя знание о том, что после загрузки FPGA регистр обнуляется (это можно дополнительно указать синтезатору, чтобы он именно обнулялся, через аттрибут), сделать на нем счетчик, и сформировать резет от включения питания, и до... Чего захотите. Можете поставить внешнюю микросхему, формирующую резет, вообще, тут Вы ограничены только вашей фантазией

 

Вашу фразу не понял. Каким образом? Я всегда считал что reset это кнопка которую нажимает человек. Не понимаю как человеку за синхронизироваться с 50 МГц кварцем. Не ну понятно что можно поставить триггер, но какой смысл если.

Достаточно ведь always @(posedge clk)

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

 

 

Не могу найти. Можно конкретнее Altera Cyclone IV E FPGA язык Virelog.

Язык тут вообще не причем.

Про устройство сети распределения тактовых сигналов - там написано и нарисовано - http://www.altera.com/literature/hb/cyclon.../cyiv-51005.pdf

Про глобальную линию сброса - не помню где, сигнал называется у этой ПЛИС DEV_CLRn, сами ищите.

Share this post


Link to post
Share on other sites

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

В ПК к примеру RESET ЦП длиться 5мс и поддерживается схемно. И да можно отдельно сбросить как всю систему так и проц в отдельности.

Это ещё один вопрос как автоматически рассчитать время сброса.

 

 

Share this post


Link to post
Share on other sites

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

Мой первый абзац относится к случаям когда в ПЛИС размещён простой проект, который начинает исполнятся сразу после включения питания и работает до отключения питания. Сбрасывать такие схемы во время работы нет необходимости, да и сбросу браться неоткуда, кроме как от супервизора.

 

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

Ну и потрудитесь объяснить, почему же данный способ - откровенная ерунда?

 

Share this post


Link to post
Share on other sites

Это ещё один вопрос как автоматически рассчитать время сброса.

 

автоматически рассчитать? Это сильно.

 

Обычно сигнал сброса делается таким, чтобы он превышал время запуска всех минимально необходимых для работы частей схемы, генераторов, критичных аналоговых узлов, и т.п. Либо, просто берется из спецификации, если Вы реализуете какую-то шину например, в которой есть резет. Для вашего случая, гы, "автоматически рассчитали" резет уже за вас, схемой POR внутри ПЛИС. Для сброса же Вашей схемы, которая внутри, достаточно времени, равного одному периоду клока.

 

такой откровенной ерунды, как подача синхронного сигнала на вход асинхронного сброса.

Это, кстати, не ерунда, это вполне нормальная схема. Плейсер/роутер для такого сигнала сможет легко (а может и не легко) выполнить все recovery/removal ограничения, и схема будет работать как положено.

Share this post


Link to post
Share on other sites

А разве это не одно и тоже?

Под "синхронным" понимается сброс поступающий на R-вход триггера от другого триггера работающего на той же тактовой частоте.

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

Share this post


Link to post
Share on other sites

Под "синхронным" понимается

Ну зачем муть поднимать :) :)

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

Share this post


Link to post
Share on other sites

Ну зачем муть поднимать :) :)

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

Тоже верно! ))

Share this post


Link to post
Share on other sites

Когда ПЛИС, после конфигурации, переходит в рабочий режим, все триггеры сбрасываются автоматически, однако есть одна проблема. ПЛИС переходит в рабочий режим не синхронно с тактовым сигналом поступающим от внешнего генератора, и может случится так, что она перейдёт в раб. режим перед активным фронтом.

 

Например, его можно сформировать, используя знание о том, что после загрузки FPGA регистр обнуляется (это можно дополнительно указать синтезатору, чтобы он именно обнулялся, через аттрибут), сделать на нем счетчик, и сформировать резет от включения питания, и до... Чего захотите.

 

Как известно RS триггере после падания напряжения попадает в одно из 2-х состояний. А как такой сброс в 0 реализован в ПЛИC? Ставится RC цепочка которая выполняет временную задержку?

Я к тому что мне интересно как это реализуется в ASIC. Желательно по подробнее.

Edited by Paviaa

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...