кідається успішної Обробка пакета и сигналом aclr (початковій установки)
BORDER: OUT STD_LOGIC;
- границі пакета_STROB_OUT: OUT STD_LOGIC;- Парні Стробі записів в пам ять_STROB_OUT: OUT STD_LOGIC;- Одиночний стрибає записів у регістр_STROB_IN: OUT STD_LOGIC;- Парні Стробі читання з пам яті_STROB_IN: OUT STD_LOGIC;- Одиночний стрибає читання з регістра_SUM: OUT STD_LOGIC_VECTOR (15 DOWNTO 0);
- Cумма даних пакету з регістра GR_SUM
10011000=0x98: IN STD_LOGIC;
- F=20 МГц
- debug
- VEC8: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
- VEC2: OUT STD_LOGIC_VECTOR (1 DOWNTO 0); _ a: OUT STD_LOGIC; _b: OUT STD_LOGIC
); PIOX_PackDecode; AUTOMAT OF PIOX_PackDecode ISState: STD_LOGIC_VECTOR (1 downto 0);
- поточний стан автоматаN: std_logic_vector (7 downto 0);
- номер оброблюваного слова з пакетуssUnion: STD_LOGIC;
Обедіненіе Вірівняність стробів PIOX_WR и PIOX_RDReset: STD_LOGIC;
Складання aclr и SelfResetSelfReset: STD_LOGIC;
Скиданов при некоректно пакетіtSTROB_IN: STD_LOGIC;
Сигнал служити Ознакою генерації парних стробовtData_Out: std_logic_vector (15 downto 0);
Дані на PIOX в момент PIOX_WRtADD: STD_LOGIC;
затримки кордонів пакету BORDER для ПРОХОДЖЕННЯ всех стробов_OUTtBORDER: STD_LOGIC;
Кордон інф. части пакета - провіснік сигналом заняття RAMHOLD_sPIOX_WR: STD_LOGIC;
Затриманий сигнал PIOX_WR вікорістовується для визначення Записів/читання в змішаному сігналі ssUnion існує в позітівній області, ті НЕ як PIOX_WRDelay_sPIOX_RD: STD_LOGIC;
Затриманий сигнал PIOX_RDtPACK_SUM: STD_LOGIC_VECTOR (15 DOWNTO 0); tADDR: STD_LOGIC_VECTOR (7 DOWNTO 0); C_SIGN: STD_LOGIC;
V1 lt;=Reset;
V2 lt;=SelfReset; lt;=tADDR; _SUM lt;=tPACK_SUM; _OUT lt;=tDATA_OUT; lt;=sPIOX_RD AND sPIOX_WR;
Об'єднання нужно, так як підрахунок кількості слів идет и в запісі и в чітанні lt;=(SelfReset and (NOT (sPIOX_WR AND sPIOX_RD))) or aclr;
Скиданов відбувається по aclr або помилковості протоколом, скидання помилковості протоколу утрімується до кінця імпульсу PIOX_RD/WR віклікав его; после скидання поновлюється и Selfeset звільняється lt;=tBORDER OR tADD;
Межі пакету формуються від кінця заголовка пакета до кінця последнего слова пакету + годину на формирование імпульсів запісу_DATA_OUT lt;=DATA_IN;
Просто наскрізне проходження
Затриманий сигнал PIOX_RD для віділення переднього фронту в імпульсі PIOX_RD_sPIOX_RD_drive: PROCESS (sPIOX_RD, CLK) CLK event and CLK= 0 'then_sPIOX_RD lt;=sPIOX_RD; NULL; if; PROCESS Delay_sPIOX_RD_drive;
Дані на записах дійсна в момент переднього фронту PIOX_WR_OUT_drive: PROCESS (aPIOX_WR) aPIOX_WR event and aPIOX_WR= 1 'then_OUT lt;=PIOX_DATA_IN; NULL; if; PROCESS DATA_OUT_drive;
Адреси формується з заголовка пакета при запісі або при чітанні между пакетами
Кількість слів безперервно відстежується для визначення між пакета_N_drive: PROCESS (Delay_sPIOX_RD, sPIOX_RD, State, ssUnion, HOLD_sPIOX_WR) HOLD_sPIOX_RD: STD_LOGIC; _sPIOX_RD:=Delay_sPIOX_RD and sPIOX_RD; HOLD_sPIOX_RD= 0 and State= 00 then tADDR lt;= 00011000 raquo ;; ssUnion event and ssUnion= 1 thenHOLD_sPIOX_WR= 1 'and State= 00 then lt;=tDATA_OUT (15 downto 8); lt;=tDATA_OUT (7 downto 0); tDATA_OUT= 10011000 then NULL;
На качана пакету лічильник скідаєтьсяtPACK_SUM lt;= 0000000000000000 raquo ;; if;
Сума підраховується в кінці записів, если Це не Запис заголовка (State=0) и не РЕГІСТР GR_sum
При ціклі читання цього регістра его значення гарантовано НЕ змінюєтьсяState= 11 OR State= 10 OR State= 01 thenState= 11 OR State= 10 then N lt;=N - 1; NULL; if;
При зверненні за адресою RG_sum рахунки НЕ відбуваєтьсяtADDR= 10011000 then NULL;
У запісі рахунок значень в момент aWRHOLD_sPIOX_WR= 1 then tPACK_SUM lt;=tPACK_SUM + tDATA_OUT;
При чітанні в момент sRDHOLD_sPIOX_WR= 0 then tPACK_SUM lt;=tPACK_SUM + DATA_IN; if; NULL; if; NULL; if; PROCESS ADDR_N_drive; _drive: PROCESS (ssUnion, sPIOX_RD, Reset ) Reset= 1 then tBORDER lt;= 0 raquo ;; ssUnion event and ssUnion= 1 thenState= 00 thenHOLD_sPIOX_WR= 1 then lt;= 1 laquo ;; NULL; if; State= 11 OR State= 10 thenN= 00000001 then tBORDER lt;= 0 l...