Пример взаимодействующих автоматов — различия между версиями
Материал из Wiki
ANA (обсуждение | вклад) м (→Описание примера взаимодействующих автоматов) |
ANA (обсуждение | вклад) м (→NEW) |
||
| Строка 251: | Строка 251: | ||
Ограничение на подачу запросов. Для любого из каналов запроса: запрос может повториться через 4 ( и более тактов). С каждым из запросов могут быть связаны соответствующие операнды, которые должен обработать ресурс. Следующий запрос не должен повториться, пока не будет обработан поступивший запрос. Таким образом, подача запросов во времени должна быть «осмысленной». | Ограничение на подачу запросов. Для любого из каналов запроса: запрос может повториться через 4 ( и более тактов). С каждым из запросов могут быть связаны соответствующие операнды, которые должен обработать ресурс. Следующий запрос не должен повториться, пока не будет обработан поступивший запрос. Таким образом, подача запросов во времени должна быть «осмысленной». | ||
Вся цифровая система представляет собой три взаимодействующих конечных автомата. При этом ресурс представляет собой иерархический автомат. В каждом из его внутренних состояний происходит проверка состояния – а именно, какой из автоматов-запросов занимает ресурс.--> | Вся цифровая система представляет собой три взаимодействующих конечных автомата. При этом ресурс представляет собой иерархический автомат. В каждом из его внутренних состояний происходит проверка состояния – а именно, какой из автоматов-запросов занимает ресурс.--> | ||
| + | |||
| + | == Описание ПРАЛУ == | ||
| + | |||
| + | <source lang="text">TITLE fsm_multi | ||
| + | FORMAT PRL | ||
| + | AUTHOR Bibilo | ||
| + | DATE 18/01/05 | ||
| + | PROJECT LOCON_VHDL | ||
| + | DCL_PIN | ||
| + | EXT | ||
| + | INP | ||
| + | req0 req1 req2 | ||
| + | OUT | ||
| + | ready0 ready1 ready2 | ||
| + | INTER | ||
| + | cal_req0 cal_req1 cal_req2 | ||
| + | cal_ready0 cal_ready1 cal_ready2 | ||
| + | last_thread | ||
| + | END_PIN | ||
| + | BLOCK pott1main | ||
| + | |||
| + | 1: > | ||
| + | ready0 * ready1 * ready2 | ||
| + | |||
| + | > Thread0_00.Thread1_00.Thread2_00.CU_0001.last_thread1 | ||
| + | |||
| + | Thread0_00: -req0 > ^ready0 > Thread0_01 | ||
| + | Thread0_01: -^cal_ready0 > ^ready0 > Thread0_10 | ||
| + | Thread0_10: -cal_ready0 > ready0 > Thread0_00 | ||
| + | |||
| + | Thread1_00: -req1 > cal_req1 * ^ready1 > Thread1_01 | ||
| + | Thread1_01: -^cal_ready1 > cal_req1 * ^ready1 > Thread1_10 | ||
| + | Thread1_10: -cal_ready1 > ^cal_req1 * ready1 > Thread1_00 | ||
| + | |||
| + | Thread2_00: - req2 > cal_req2 * ^ready2 > Thread2_01 | ||
| + | Thread2_01: -^cal_ready2 > cal_req2 * ^ready2 > Thread2_10 | ||
| + | Thread2_10: - cal_ready2 > ^cal_req2 * ready2 > Thread2_00 | ||
| + | |||
| + | Thread0_01.Thread1_00.Thread2_00 : - > > Thread0_10.Thread1_00.Thread2_00.CU_0010 | ||
| + | last_thread1.Thread0_01.Thread1_01.Thread2_00 : - > > Thread0_10.Thread1_00.Thread2_00.CU_0010 | ||
| + | last_thread2.Thread0_01 : - > > Thread0_10.Thread1_00.Thread2_00.CU_0010 | ||
| + | |||
| + | Thread0_00.Thread1_01.Thread2_00 : - > > Thread0_00.Thread1_01.Thread2_00.CU_0010 | ||
| + | last_thread2.Thread0_00.Thread1_01.Thread2_01 : - > > Thread0_00.Thread1_01.Thread2_00.CU_0010 | ||
| + | last_thread0.Thread1_01 : - > > Thread0_00.Thread1_01.Thread2_00.CU_0010 | ||
| + | |||
| + | |||
| + | Thread0_00.Thread1_00.Thread2_01 : - > > Thread0_00.Thread1_00.Thread2_01.CU_0010 | ||
| + | last_thread0.Thread0_01.Thread1_00.Thread2_01 : - > > Thread0_00.Thread1_00.Thread2_01.CU_0010 | ||
| + | last_thread1.Thread2_01 : - > > Thread0_00.Thread1_00.Thread2_01.CU_0010 | ||
| + | |||
| + | CU_0001: - | ||
| + | Thread0_00 * ^cal_req1 * ^cal_req2 + | ||
| + | last_thread=1 * cal_req0 * cal_req1 * ^cal_req2 + | ||
| + | last_thread=2 * cal_req0 | ||
| + | > ^cal_ready0 * cal_ready1 * cal_ready2 > CU_0010 | ||
| + | - ^cal_req0 * cal_req1 * ^cal_req2 + | ||
| + | last_thread=2 * ^cal_req0 * cal_req1 * cal_req2 + | ||
| + | last_thread=0 * cal_req1 | ||
| + | > cal_ready0 * ^cal_ready1 * cal_ready2 > CU_0010 | ||
| + | - ^cal_req0 * ^cal_req1 * cal_req2 + | ||
| + | last_thread=0 * cal_req0 * ^cal_req1 * cal_req2 + | ||
| + | last_thread=1 * cal_req2 | ||
| + | > cal_ready0 * cal_ready1 * ^cal_ready2 > CU_0010 | ||
| + | CU_0010: CU_0100 | ||
| + | CU_0100: CU_1000 | ||
| + | CU_1000: - ^cal_req0 * ^cal_req1 * ^cal_req2 | ||
| + | > cal_ready0 * cal_ready1 * cal_ready2 > CU_0001 | ||
| + | |||
| + | last_thread0: | ||
| + | last_thread1: | ||
| + | last_thread2: | ||
| + | |||
| + | END_BLOCK pott1main | ||
| + | END_pott1 | ||
| + | </source> | ||
== NEW == | == NEW == | ||
Текущая версия на 10:07, 12 декабря 2017
Содержание |
Расширенный вариант графа переходов
Очень Расширенный вариант графа переходов
Pictures
Граф переходов для 3 потоков
Подграф для LastThread
Описание ПРАЛУ
TITLE fsm_multi
FORMAT PRL
AUTHOR Bibilo
DATE 18/01/05
PROJECT LOCON_VHDL
DCL_PIN
EXT
INP
req0 req1 req2
OUT
ready0 ready1 ready2
INTER
cal_req0 cal_req1 cal_req2
cal_ready0 cal_ready1 cal_ready2
last_thread
END_PIN
BLOCK pott1main
1: >
ready0 * ready1 * ready2
> Thread0_00.Thread1_00.Thread2_00.CU_0001.last_thread1
Thread0_00: -req0 > ^ready0 > Thread0_01
Thread0_01: -^cal_ready0 > ^ready0 > Thread0_10
Thread0_10: -cal_ready0 > ready0 > Thread0_00
Thread1_00: -req1 > cal_req1 * ^ready1 > Thread1_01
Thread1_01: -^cal_ready1 > cal_req1 * ^ready1 > Thread1_10
Thread1_10: -cal_ready1 > ^cal_req1 * ready1 > Thread1_00
Thread2_00: - req2 > cal_req2 * ^ready2 > Thread2_01
Thread2_01: -^cal_ready2 > cal_req2 * ^ready2 > Thread2_10
Thread2_10: - cal_ready2 > ^cal_req2 * ready2 > Thread2_00
Thread0_01.Thread1_00.Thread2_00 : - > > Thread0_10.Thread1_00.Thread2_00.CU_0010
last_thread1.Thread0_01.Thread1_01.Thread2_00 : - > > Thread0_10.Thread1_00.Thread2_00.CU_0010
last_thread2.Thread0_01 : - > > Thread0_10.Thread1_00.Thread2_00.CU_0010
Thread0_00.Thread1_01.Thread2_00 : - > > Thread0_00.Thread1_01.Thread2_00.CU_0010
last_thread2.Thread0_00.Thread1_01.Thread2_01 : - > > Thread0_00.Thread1_01.Thread2_00.CU_0010
last_thread0.Thread1_01 : - > > Thread0_00.Thread1_01.Thread2_00.CU_0010
Thread0_00.Thread1_00.Thread2_01 : - > > Thread0_00.Thread1_00.Thread2_01.CU_0010
last_thread0.Thread0_01.Thread1_00.Thread2_01 : - > > Thread0_00.Thread1_00.Thread2_01.CU_0010
last_thread1.Thread2_01 : - > > Thread0_00.Thread1_00.Thread2_01.CU_0010
CU_0001: -
Thread0_00 * ^cal_req1 * ^cal_req2 +
last_thread=1 * cal_req0 * cal_req1 * ^cal_req2 +
last_thread=2 * cal_req0
> ^cal_ready0 * cal_ready1 * cal_ready2 > CU_0010
- ^cal_req0 * cal_req1 * ^cal_req2 +
last_thread=2 * ^cal_req0 * cal_req1 * cal_req2 +
last_thread=0 * cal_req1
> cal_ready0 * ^cal_ready1 * cal_ready2 > CU_0010
- ^cal_req0 * ^cal_req1 * cal_req2 +
last_thread=0 * cal_req0 * ^cal_req1 * cal_req2 +
last_thread=1 * cal_req2
> cal_ready0 * cal_ready1 * ^cal_ready2 > CU_0010
CU_0010: CU_0100
CU_0100: CU_1000
CU_1000: - ^cal_req0 * ^cal_req1 * ^cal_req2
> cal_ready0 * cal_ready1 * cal_ready2 > CU_0001
last_thread0:
last_thread1:
last_thread2:
END_BLOCK pott1main
END_pott1