Jump to content
    

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

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

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

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

 

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

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

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

 

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

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

1) После подачи питания, старта осциляторов тригеры могут находится в любом состоянии.

Это значит напр. что счётчик может начать считать не с 0 а с 10 итп...

2) Чтобы схему было проще дизайнить и чтобы она всегда работала строго одинаково (напр. щётчик стартовал всегда с 0) и придумана схема сброса

3) Схема сброса может быть реализована как синхронная так и асинхронная.

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

Для этого тригеры имеют асинхронные входи - RN и\или SN (ресет \ сет соотв.), которые соеденяются одним проводом - CLRn

Асинхронные - значит что активный уровень на них приводит к сету\ресету моментально, не дожидаясь фронта CLK

4) После подачи питания, старта осциляторов итд. вы должны подать активный уровень на CLRn достаточной длительности (определяется min pulls with time по входах RN \ SN).

5) Сигнал CLRn формируется специальной микросхемой - супервизором напряжения.

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

6) С точки зрения Verilog, вы должны явно описать сигнал RN \ SN для каждого тригера, начальное состояние счётчика, регистра, FSM итп.

Хотя... как сказано в п.5), некотырые FPGA умеют сами обнулять все тригеры после включения питанеия, и в этом случае вы можете вообще RN \ SN не описывать но... ЭТО ПЛОХО!

 

 

 

 

Share this post


Link to post
Share on other sites

Torpeda, спасибо уже что-то полезное.

 

Вот что собрал и обобщил.

 

После подачи напряжения триггеры могут находиться в любом состоянии. Поэтому применяют POR (Power On Reset).

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

Провод ресета предвидится к основным тригерам и регистрам. При этом она может уста навивать триггер в 1 или 0.

Не основные тригеры или регистры сбрасываются программно или аппаратно при тактовки от клока.

Также ноги во время ресета приводяться в 3-х стабильное состояние. Тоже своего рода защита.

Синтезатор выдаёт частоты тоже не сразу. Так как кристалу надо стабилизироваться. Да и микропроцесор надо перевести в определённое состояние до того как пойдут такты. Иначе он будет выполняь белеберду и может натворить дел.

 

 

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

В ASIC 1,0 реализовано аппаратно.

Поэтому в Verilog надо описывать начальное состояние.

1)

module test (
  input clk,   // Input clock
  output out   // Output data
);

reg [7:0] counter=0; // начальное значение. или <= тут надо?
assign out = counter[7];

always @(posedge clk) begin
  counter <= counter+1;
end

endmodule

2)

module test (
  input clk,   // Input clock
  output out   // Output data
);

reg [7:0] counter;
initial 
    begin
      counter=0; // начальное значение, или <= тут надо?
    end
assign out = counter[7];

always @(posedge clk) begin
  counter <= counter+1;
end

endmodule

Читал что секция initial не является синтезируемой это так или это неправда?

 

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

 

Такого как супервизор. Возможные реализации супервизора SM описал. Это либо простая микросхема со счётчиком. Либо ещё более простая с компаратором и RC элементами.

 

Организация ресета должна вестись глобальной линией. Что бы он дошел до всех элементов системы одновременно и без искажений. Если это не возможно, то надо будет делать более сложную схему.

Для задания глобальной линии на ПЛИС надо смотреть документацию на конкретное устройство.

Edited by Paviaa

Share this post


Link to post
Share on other sites

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

 

А вот дальше стоит вспомнить про то что принято называть PLL, хотя это только один блок из этого модуля. PLL может из 10 МГц сделать 100, при это эти 100 будут достаточно стабильными. Принцип действия такой, блок генерит частоту, какую то, делит ее на указанное число (на 10 в случае если делаем из 10 -> 100), и сравнивает деленную частоту с опорной, и подстраивает генератор, так чтобы деленная и опорная частоты совпадали.

 

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

 

В некоторых ПЛИС тоже есть ПЛЛ, как думаю и в Асиках.

 

 

блоки Inital - это обычно для тест бенча, они выполняются 1 раз во время моделирования, тем отличаются от always. И как написано в книжке как правило НЕ поддерживаются синтезаторами. Собственно это и не надо потому что

 

module

reg [15 : 0] MyReg = 16;

endmodule

 

автоматически в синтезаторе станет регистром с начальным значением 16, оговорюсь в большинстве синтезаторов.

 

 

 

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

Share this post


Link to post
Share on other sites

процу строго говоря для работы не нужен застабилизированный клок

 

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

 

Самые обычные кварцевые генераторы, без всяких там PLL, в зависимости от их типа, схемы, параметров окружающей среды, и т.п., могут "заводиться" и одну миллисекунду, и десять, и десятки, и, может, и более. За это время ПЛИС уже пять раз выйдет из POR и загрузится, а клок будет еще НЕСТАБИЛЕН - иметь нелогические уровни (некий синус вокруг пол-питания, например), или к примеру иметь перепады с частотой, значительно выше допустимой на фронтах сигнала. И как себя поведет с таким клоком схема внутри ПЛИС? Я думаю догадаетесь, жизнь то уже заставила начать вникать в физику происходящего, например в метастабильность. Так что, это ОБЯЗАТЕЛЬНОЕ условие, чтобы все источники тактовых частот к этому времени находились в стабильном режиме и генерировали то, что от них ждут по документации, а не то, что они хотят сами. А кнопка, генерирующая клок, тут вообще неудачный пример, она находится в стабильном состоянии с первой же пикосекунды, у нее нету времени, когда она может генерировать нестабильный клок (ну если только забыть про дребезг, который и есть нестабильность в данном примере - нежданные ВЧ перепады на фронтах) - стабильный клок от кнопки - это когда с нее идет клок от 0 (нуля, ее не жмут) до какого-то Fmax (ее дрючат со страшной скоростью) герц - то есть, когда она работает в штатном режиме.

 

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

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

вот реально вспоминал...

В одной только АВР была явная настройка паузы перед стартом, в зависимости от типа кварц - генератор или что-то там еще на входе висит. Да и то при той конфигурации что мне дали, работала с 0 задержкой пуска.

 

Более ни в одном процессоре я не ожидал входного клока, как и в ПЛИСах ксалинкса не жду. Может я самоуверен, а может это сделал производитель процов за меня...

 

А вот нежелание вникать - это просто странность.

 

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

Share this post


Link to post
Share on other sites

Может я самоуверен, а может это сделал производитель процов за меня...

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

 

А в процессорах, естественно, все сделали разработчики, чтобы пока клокогенератор не в режиме, он стоял сам. Но процессор это не ФПГА, в ФПГА клок входит в чип, а дальше Вы сами, что хотите, то с ним и делаете.

Share this post


Link to post
Share on other sites

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

 

вот зачем вы меня обижаете... больше 10 лет везения:)?

 

кстати я вот задумался. Берем к примеру фиговый генератор, который не раскачался до нужной амплитуды. Подаем его на вход ПЛИС. Все равно там будет либо 0 либо 1, и все равно оно хоть как-то будет менятся, в худшем случае просто не будет фронтов, ну или они будут очень редкие. В этом случае все автоматы либо не будут работать, либо будут работать правильно (ну кроме времени). Я не прав? Неужели разные части схемы смогут после клокового буфера на входе получить разное значение сигнала?

 

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

 

вот и славно:) всегда есть кому позаботиться о программистах. Все берем пример с производителей процессоров.

Share this post


Link to post
Share on other sites

Неужели разные части схемы смогут после клокового буфера на входе получить разное значение сигнала?

Они могут получить "средний уровень" на всю клокосеть, такая вот метастабильность будет на всю ПЛИСину. Могут получить заваленные фронты, слишком длинные, на которых все триггеры внутри ПЛИС будут переключаться не одновременно, а плюс минус километр по времени (у меня такой косяк детский однажды был в начале пути, поставил генератор на 32 КГц, а он фронты давал пологие, так всему в ПЛИСе (в проекте стояла Altera FLEX10K, но в современных все так же) крышу унесло, пока не добавил триггер шмитта между ПЛИС и генератором), а могут, даже, получить "дребезг" на фронтах на частотах в сотни мегагерц.

 

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

Share this post


Link to post
Share on other sites

Если честно я не понимаю.

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

 

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

 

 

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

 

У меня была твердая уверенность что если процессор или ПЛИС перестать тактировать они не сломаются, а просто перестанут работать (это если без ПЛЛ), то есть замрут на очередном клоке. Я что не прав? вы хотите разрушить мой маленький сложившийся мир?

 

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

 

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

Share this post


Link to post
Share on other sites

Согласен с SM вначале будет высокая амплитуда. Из за которой будут фронты пологие.

Но разве в ПЛИС нет задержке на стабилизацию клока? Ведь POR сробатывает через 50мс. Так что 5 мс на стабилизацию точно есть(вернее я так думаю).

Share this post


Link to post
Share on other sites

У меня была твердая уверенность что если процессор или ПЛИС перестать тактировать они не сломаются, а просто перестанут работать

Ну повторю еще раз. При старте, первые 5, 10, или 100 миллисекунд, генераторы могут выдавать клок, но не соответствующий спецификации требуемого клока для нормальной работы ПЛИС. И пока он такой, ненормальный, ПЛИС может работать ненормально. СОВСЕМ НЕНОРМАЛЬНО - автоматы улетать, счетчики не считать, или считать по сто пятьдесят раз за такт вместо +1, может быть ЧТО УГОДНО там, в страшном сне не придумаешь.

 

А генераторов, которые начинают выдавать клок только после того, как его параметры вошли в норму, я пока не видел. Обычные XO/TCXO/т.п. этого не умеют.

 

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

 

Но разве в ПЛИС нет задержке на стабилизацию клока? Ведь POR сробатывает через 50мс. Так что 5 мс на стабилизацию точно есть(вернее я так думаю).

Если ее хватает, то это хорошо, тогда забыли и на все забили :). Но это так бывает не всегда.

 

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

 

-------------------------------------

Вот мой пример конкретный. Прямо сейчас на столе у меня есть схема, которая затактирована от USB трансивера USB3343, другого внешнего клока в системе нету. USB3343 требует внешнего резета, в ней нет супервизора, а лишний супервизор в системе это дорого и нет места для него на плате (вся плата с ПЛИС имеет размер 2х2.5 см, да еще и с вырезами и скосами, там для лишнего резистора то нет места). Как и питачники со встроенными супервизорами, тоже не проходят по каким то причинам каждый. Поэтому я сделал формирователь резета в ПЛИС двухступенчатым (он работает от внутреннего генератора ПЛИСы) - первая ступень выдает резет на USB3343, потом его снимает - счетчик считает от POR ПЛИС и просто какое-то время. После того, как эта ступень сняла RESET с USB3343, она раскручивает свои генераторы, в это время вторая ступень держит в резете (в асинхронном! так как нет гарантии, что синхронный уже работает, так как клок-то кривой) кишки ПЛИС, на время, пока источник клока в режим входит, и только потом разрешает работу всей системы в целом.

Share this post


Link to post
Share on other sites

Вот мой пример конкретный. Прямо сейчас на столе у меня есть схема, которая затактирована от USB трансивера USB3343,..., на время, пока источник клока в режим входит, и только потом разрешает работу всей системы в целом.

 

Пипец какой-то... вот реально. Я был огражден от всей этой байды действиями как раз того второго и очень крутого, что схемы делает. Неужели оно всегда было так сложно? Поглядел наши схемки, генераторы с выходом на режим 5-10 мСек, достаточно долго... В моем идеальном мире пока генератор выходит на режим клоки просто плохие, с плохой частотой, проходящие через раз, но не такие которые разрушат работу всей схемы...

 

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

Share this post


Link to post
Share on other sites

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

 

Ну Вы прикидываетесь, или издеваетесь? а?

 

ЧТО ТАМ МОЖНО ВСТРОИТЬ? Во всех ПЛИС тупо клоковый пин передается на разводку клока самыми быстрыми и соотв. самыми простыми буферами. ПЛИС на то и придуманы, чтобы "конечный пользователь" мог сделать все что хочет! В том числе, и глючную или нерабочую схему.

 

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

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...