Jump to content

    

Recommended Posts

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.

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

 

Share this post


Link to post
Share on other sites
21 hours ago, vt313 said:

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

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

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

 

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

 

Share this post


Link to post
Share on other sites
4 часа назад, des00 сказал:

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

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

Share this post


Link to post
Share on other sites
19 hours ago, Plain said:

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

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

Share this post


Link to post
Share on other sites
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 убирается на уровне мастера. 

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

Share this post


Link to post
Share on other sites
1 hour ago, vt313 said:

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

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

1 hour ago, vt313 said:

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

Там не такое

Share this post


Link to post
Share on other sites
48 минут назад, xvr сказал:

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

Там не такое

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

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

Share this post


Link to post
Share on other sites

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

37 minutes ago, vt313 said:

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

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
2 hours ago, vt313 said:

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

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

 

Share this post


Link to post
Share on other sites
1 час назад, xvr сказал:

STM_U_QBUS_IN_L

 

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

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

 

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

Share this post


Link to post
Share on other sites
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

 

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.