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

12 hours ago, RobFPGA said:

Еще раз уточню - нет проблемы реализации выхода из ошибочных состояний автомата - есть проблема не попадания в оные под действием ожидаемых входных сигналов.

да нет там проблемы, я уже несколько раз писал, что не надо теоретизировать об автомате в вакууме, речь про конкретный случай, конкретного применения. Вы код ТС и суть его вопросов вообще читали? он ловит тупо один такт с проца, длительностью в 1 такт частоты до 162МГц. Ловит скорее всего на частотах порядка 200-300МГц.  Автомат, перейдя в любое состояние от текушего уже выполнит свою программу, а именно сигнализирует о том, что факт события был. А зависший автомат, у него падает в то самое ожидание, где этот импульс, который длится порядка 1.5-2 тактов частоты его автомата, будет уже нормальным импульсом и автомат тем более выполнит свою задачу.

On 6/9/2021 at 7:50 PM, RobFPGA said:

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

В том то и дело, что следуя докам о современных чипах, эта частота уже составляет величины до 300МГц и более того, олдскульная рекомендация 2-3 триггера уже не актуальна. Ссылку не дам, но читал пару лет назад wp на сайте хилых, про седьмое семейство. Там уже шли выводы в разрез Кена Чапмена и Ко по CDC.

ЗЫ. Зачем именно так делает ТС, мне не ведомо, но решение имеет место быть. Да оно не каноническое, но все же предлагаю закончить дискус сей

 

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


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

21 hours ago, vt313 said:

Как? Кодирование тут никакой роли не играет. 

Ещё как играет. У ТС автомат в кодах Грея, при этом все переходы последовательные, кроме STATE_STM_FLAG->STATE_STM_WAIT. При последовательном переходе меняется 1 бит, что не приведёт к неправильным переходам (бит либо изменится, либо останется прежним - автомат либо перейдёт в правильное состояние либо останется в прежнем состоянии).

В переходе STATE_STM_FLAG->STATE_STM_WAIT будет меняться несколько битов (он не последовательный). Из за метастабильности реальный набор изменившихся битов может быть подмножеством требуемого. Какие при этом получатся переходы предсказать трудно.

 

Например, если изменяются одновременно 2 бита, то возможно 4 варианта реального изменения. При этом 1 вариант будет соответствовать правильному переходу, в ещё 1 варианте автомат останется в прежнем состоянии и в 2х вариантах будут переходы в неправильное состояние.

 

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


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

4 часа назад, des00 сказал:

сигнализирует

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

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


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

19 hours ago, Plain said:

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

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

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


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

11.06.2021 в 12:47, xvr сказал:

Ещё как играет. У ТС автомат в кодах Грея, при этом все переходы последовательные, кроме STATE_STM_FLAG->STATE_STM_WAIT. При последовательном переходе меняется 1 бит, что не приведёт к неправильным переходам (бит либо изменится, либо останется прежним - автомат либо перейдёт в правильное состояние либо останется в прежнем состоянии).

В переходе STATE_STM_FLAG->STATE_STM_WAIT будет меняться несколько битов (он не последовательный). Из за метастабильности реальный набор изменившихся битов может быть подмножеством требуемого. Какие при этом получатся переходы предсказать трудно.

 

Например, если изменяются одновременно 2 бита, то возможно 4 варианта реального изменения. При этом 1 вариант будет соответствовать правильному переходу, в ещё 1 варианте автомат останется в прежнем состоянии и в 2х вариантах будут переходы в неправильное состояние.

 

Так я не общую теорию имею ввиду, а конкретный пример. 

В этом примере я ничего не увидел.

 

Собственно говоря, я думаю, что там вот такое

            
process(clk)
begin                
    if clk = '1' and clk'event then    
        if oe = '0' and wr = '1' then comand <= data; end if; 
        res <= f(comand);  
    end if;    
end process;        
 

Вся метастабильность между сигналами oe, wr, data убирается на уровне мастера. 

В внутри автомата нет ничего, что нарушит работу. 

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


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

1 hour ago, vt313 said:

Так я не общую теорию имею ввиду, а конкретный пример. 

Я вам и привожу конкретный пример - посмотрите первое сообщение темы, там приведён вполне конкретный автомат.

1 hour ago, vt313 said:

Собственно говоря, я думаю, что там вот такое

Там не такое

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


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

48 минут назад, xvr сказал:

Я вам и привожу конкретный пример - посмотрите первое сообщение темы, там приведён вполне конкретный автомат.

Там не такое

Так я посмотрел. И где там будет неправильный переход? 

А что там еще может быть? Давайте пофантазируем. 

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


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

Приветствую!
 

37 minutes ago, vt313 said:

А что там еще может быть? Давайте пофантазируем. 

IMHO  неблагодарное это дело фантазировать по RTL как именно он будет реализован в нетлисте.  В этом основная проблема таких "скользких" решений.
Сложно контролировать как разложится такой код в нетлисте при синтезе и P&R,  нужно прикладывать дополнительные усилия и специально констрейнить полет фантазий синтезатора и P&R.   

 

Удачи! Rob.

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


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

2 hours ago, vt313 said:

Так я посмотрел. И где там будет неправильный переход? 

Я писал где именно. При переходе STATE_STM_FLAG->STATE_STM_WAIT будет изменено более одного бита в регистре состояния автомата. Все другие переходы происходят последовательно, и при них меняется 1 бит (автомат кодируется в коде Грея). Этот переход НЕ последовательный - как минимум 2 бита будет изменено. Изменение зависит от асинхронного внешнего сигнала (STM_U_QBUS_IN_L) - автомат может попасть как минимум в 2 неожиданных состояния

 

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


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

1 час назад, xvr сказал:

STM_U_QBUS_IN_L

 

1 час назад, xvr сказал:

Я писал где именно. При переходе STATE_STM_FLAG->STATE_STM_WAIT будет изменено более одного бита в регистре состояния автомата. Все другие переходы происходят последовательно, и при них меняется 1 бит (автомат кодируется в коде Грея). Этот переход НЕ последовательный - как минимум 2 бита будет изменено. Изменение зависит от асинхронного внешнего сигнала (STM_U_QBUS_IN_L) - автомат может попасть как минимум в 2 неожиданных состояния

 

В какие состояния он может попасть? 

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


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

4 hours ago, vt313 said:

В какие состояния он может попасть? 

В любые: STATE_STM_CLANK1, STATE_STM_CLANK2, STATE_STM_CLANK3, STATE_STM_DATA, STATE_STM_OPER, STATE_STM_END. Какие именно из этого списка будут (2 штуки) зависит от того, как синтезатор разложит номера на состояния.

Например если кодировка будет такая:

STATE_STM_WAIT	 000
STATE_STM_CLANK1 001
STATE_STM_CLANK2 011
STATE_STM_CLANK3 010
STATE_STM_FLAG	 110
STATE_STM_DATA	 111
STATE_STM_OPER	 101
STATE_STM_END	 100
  

То переход STATE_STM_FLAG->STATE_STM_WAIT будет 110->000, т.е. могут получиться

100 STATE_STM_END
010 STATE_STM_CLANK3

ну и ожидаемые STATE_STM_FLAG и STATE_STM_WAIT

 

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


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

16.06.2021 в 19:55, xvr сказал:

В любые: STATE_STM_CLANK1, STATE_STM_CLANK2, STATE_STM_CLANK3, STATE_STM_DATA, STATE_STM_OPER, STATE_STM_END. Какие именно из этого списка будут (2 штуки) зависит от того, как синтезатор разложит номера на состояния.

Например если кодировка будет такая:


STATE_STM_WAIT	 000
STATE_STM_CLANK1 001
STATE_STM_CLANK2 011
STATE_STM_CLANK3 010
STATE_STM_FLAG	 110
STATE_STM_DATA	 111
STATE_STM_OPER	 101
STATE_STM_END	 100
  

То переход STATE_STM_FLAG->STATE_STM_WAIT будет 110->000, т.е. могут получиться


100 STATE_STM_END
010 STATE_STM_CLANK3

ну и ожидаемые STATE_STM_FLAG и STATE_STM_WAIT

 

Ну и что? 

110, 100, 000, 000, 000 - автомат в STATE_STM_WAIT

или 110, 010, 000, 000, 000 - автомат в STATE_STM_WAIT

 

Вся суть этого автомата сводится к тому чтобы по сигналам 

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

Я написал свое понимание этого протокола.

 

То что Вы написали, предполагает, что данный автомат по команде чтения. каким-то образом выполнит команду записи, примет данные и выполнит не ту команду. Я и спрашиваю как?

 

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


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

7 hours ago, vt313 said:

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

Я ничего не предполагаю. И не строю никаких догадок по тому, что подключено на выходе этого автомата. Да, по любому переходу он в конце концов свалится в STATE_STM_WAIT, но по дороге он может пройти не по тому маршруту, что описан в verilog описании. И это целиком вопрос к ТС - устраивает его это, или нет.

7 hours ago, vt313 said:

Я написал свое понимание этого протокола.

 

IMHO слишком мало информации, что бы гарантировать устойчивость (неизвестного нам) протокола к таким переходам :)

 

Quote

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

Например можно предположить, что в результате непредвиденного перехода STATE_STM_FLAG->STATE_STM_END дальнейшая схема потеряет команду вообще (перехода через STATE_STM_DATA и STATE_STM_OPER не будет)

Quote

Я и спрашиваю как?

Никак, вообще ничего не сделает

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


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

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

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

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

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

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

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

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

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

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