aquo ;; NULL; if; State= 01 thenN= 00000000 then tBORDER lt;= 0 '; NULL; if; NULL; if; NULL; if; PROCESS BORDER_drive;
Парні Стробі записи формуються после імпульсу PIOX_WR_OUT_drive: PROCESS (CLK, State, Reset) count: std_logic_vector (2 downto 0);
SPIOX змінюється по передній фронку CLKReset= 1 then count:= 000 raquo ;; lt;= 0 raquo ;; _ sPIOX_WR lt;= 0 raquo ;; _ STROB_OUT lt ;= 0 raquo ;; _ STROB_OUT lt;= 0 raquo ;; CLK event and CLK= 0 thensPIOX_WR= 0 then count:= 111 raquo ;; sPIOX_WR= 1 'AND count= 000 then NULL; count:=count - 1; if;
У Першому такті nCLK залежні від него State и count щє не змініліся и в разі если State=0 смороду пропускають свой такт установки и не віставляють tADDcount= 111 and State= 000 then tADD lt;= 0 raquo ;;
Если State НЕ заважає tADD віставляється Вже в началн PIOX_WRcount= 111 then tADD lt;= 1 raquo ;;
За кінцю рахунки сигнал возврвщается в початковий станcount= 000 then tADD lt;= 0 raquo ;; NULL; if;
HOLD_sPIOX_WR подовжує сигнал на 8,5 тактівcount= 000 then HOLD_sPIOX_WR lt;= 0 raquo ;; count= 111 then HOLD_sPIOX_WR lt;= 1 raquo ;; NULL; if;
Подвійний стрибає для запісуtADD= 1 thencount IS 110 = gt; DOUBLE_STROB_OUT lt;= 1 raquo ;; SINGLE_STROB_OUT lt;= 1 raquo ;; 101 = gt; DOUBLE_STROB_OUT lt;= 0 raquo ;; SINGLE_STROB_OUT lt;= 0 raquo ;; 100 = gt; DOUBLE_STROB_OUT lt;= 1 raquo ;; SINGLE_STROB_OUT lt;= 0 raquo ;; OTHERS= gt; DOUBLE_STROB_OUT lt;= 0 raquo ;; SINGLE_STROB_OUT lt;= 0 raquo ;; CASE; if; NULL; if; PROCESS STROB_OUT_drive;
Стробі читання формуються на качана імпульсу PIOX_RD_IN_drive: PROCESS (CLK, State, tSTROB_IN) count: std_logic_vector (2 downto 0); CLK event and CLK= 0 thentSTROB_IN= 0 laquo ; then count:= 111 raquo ;;- TSTROB_IN ознака качана генераціїcount= 000 then NULL; count:=count - 1; if; count IS 110 = gt; DOUBLE_STROB_IN lt;= 1 laquo ;; SINGLE_STROB_IN lt;= 0 laquo ;; 101 = gt; DOUBLE_STROB_IN lt;= 0 laquo ;; SINGLE_STROB_IN lt;= 1 laquo ;; 100 = gt; DOUBLE_STROB_IN lt;= 1 laquo ;; SINGLE_STROB_IN lt;= 0 laquo ;; OTHERS= gt; DOUBLE_STROB_IN lt;= 0 laquo ;; SINGLE_STROB_IN lt;= 0 '; CASE; NULL; if; PROCESS STROB_IN_drive;
Кінцевій автомат відстежує фази ОБРОБКИ пакету даних: PROCESS (CLK, sPIOX_RD, sPIOX_WR, Reset, State, aclr) StatePrepare: std_logic_vector (1 downto 0);- Наступний стан автомата
Скиданов стану автоматаReset= 1 thenaclr= 1 then PIOX_ERR lt;= 0 raquo ;; else NULL; end if; _IN lt;= 0 raquo ;; lt;= 00 raquo ;;:= 00 raquo ;; CLK event AND CLK= 0 thensPIOX_RD= 0 thenState IS 00 raquo ; = gt; tSTROB_IN lt;= 1 laquo ;;:= 00 raquo ;; 01 = gt; tSTROB_IN lt;= 1 laquo ;; N= 00000000 then StatePrepare:= 00 raquo ;; _ ERR lt;= 0 laquo ;; StatePrepare:= 10 raquo ;; if; 10 = gt; tSTROB_IN lt;= 1 laquo ;; N= 00000001 then StatePrepare:= 00 raquo ;; _ ERR lt;= 0 laquo ;; StatePrepare:= 10 raquo ;; if; 11 = gt; _ERR lt;= 1 laquo ;; lt;= 1 laquo ;;:= 00 raquo ;; OTHERS= gt; NULL; CASE; sPIOX_WR= 0 thenState IS 00 = gt; StatePrepare:= 01 raquo ;; 01 = gt; if N= 00000000 then StatePrepare:= 00 raquo ;; _ ERR lt;= 0 laquo ;; StatePrepare:= 11 raquo ;; if; 11 = gt; N= 00000001 then StatePrepare:= 00 raquo ;; _ ERR lt;= 0 laquo ;; StatePrepare:= 11 raquo ;; if; 10 = gt; PIOX_ERR lt;= 1 laquo ;;:= 00 raquo ;; lt;= 1 '; OTHERS= gt; NULL; CASE;
Оскількі обидвоє нуля Вже відалені в LineUp в else - випадок коли обидвоє 1 State lt;=StatePrepare;- Сменить стан lt;= 0 raquo ;; _ IN lt;= 0 raquo ;; if; NULL; if;- Main if_a lt;=tSTROB_IN; _b lt;=sPIOX_RD; PROCESS MAIN; AUTOMAT