Пример взаимодействующих автоматов — различия между версиями
Материал из 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