Розробка комірки функціонального обміну на ПЛІС

ПЛІС сімейства FLEX10K: загальні відомості. Радіоелектронний пристрій, в склад якого входить комірка інформаційного обміну. Технічні вимоги до комірки інформаційного обміну. Мова опису апаратури цифрових систем VHDL. Розрахунок надійності комірки.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид дипломная работа
Язык украинский
Дата добавления 08.09.2014
Размер файла 4,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Затримка вихідного сигналу регістру ЕВР щодо такту

 

0.2

tIOCOMB

Затримка комбінаційних схем ЕВР

 

0.0

tIOSU

Час установки регістра ЕВР

2.8

 

tIOH

Час утримання даних регістра ЕВР

1.0

 

tIOCLR

Затримка скидання регістра ЕВР

 

1.0

tOD1

Затримка сигналу від вихідного буфера до виводу, VCCIO = 3.3 В, slew rate = off

 

2.6

tOD2

Затримка сигналу від вихідного буфера до виводу, VCCIO = 2.5 В, slew rate = off

 

4.9

tOD3

Затримка сигналу від вихідного буфера до виводу, slew rate = on

 

6.3

tXZ

Затримка сигналу у вихідному буфері після сигналу заборони виходу

 

4.5

tZX1

Затримка сигналу у вихідному буфері після сигналу дозволу виходу, VCCIO = 3.3 В, slew rate = off

 

4.5

tZX2

Затримка сигналу у вихідному буфері після сигналу дозволу виходу, VCCIO = 2.5 В, slew rate = off

 

6.8

tZX3

Затримка сигналу у вихідному буфері після сигналу дозволу виходу, slew rate = on

 

8.2

tINREG

Затримка в буфері ЕВР

 

6.0

tIOFD

Затримка в ланцюзі зворотного зв'язку регістра ЕВР

 

3.1

tINCOMB

Затримка сигналу від вхідного буфера ЕВР до ГМС

 

3.1

tEABDATA1

Затримка даних або адреси ВБП до комбінаційного виходу ВБП

 

1.5

tEABDATA2

Затримка даних або адреси ВБП до реєстрового виходу ВБП

 

4.8

tEABWE1

Затримка даних ВБП щодо сигналу дозволу запису до комбінаційного виходу ВБП

 

1.0

tEABCLK

Затримка тактового імпульсу на регістрі ВБП

 

1.0

tEABCO

Затримка виходу ВБП щодо тактового імпульсу

 

0.5

tEABBYPASS

Затримка в ланцюзі обходу регістра ВБП

 

1.5

tEABSU

Час установки регістра ВБП

1.5

 

tEABCH

Тривалість високого рівня тактового сигналу регістру ВБП

4.0

 

tEABCL

Тривалість низького рівня тактового сигналу регістру ВБП

5.8

 

tAA

Час утримання адреси

 

8.7

tWP

Тривалість імпульсу записи ВБП

5.8

 

tWDSU

Час установки даних до запису

1.6

 

tWDH

Час утримання даних при сигналі записи в ВБП

0.3

 

tWASU

Час установки адреси

0.5

 

twAH

Час утримання адреси

1.0

 

tWO

Затримка даних на виході ВБП щодо сигналу дозволу запису

 

5.0

tDD

Затримка даних від входу до виходу ВБП

 

5.0

tEABOUT

Затримка даних на виході ВБП

 

0.5

tEABAA

Час доступу адреси ВБП

 

13.7

tEABRCCOMB

Тривалість циклу асинхронного читання з ВБП

13.7

 

tEABRCREG

Тривалість циклу синхронного читання з ВБП

9.7

 

tEABWP

Тривалість імпульсу записи ВБП

5.8

 

tEABWCCOMB

Тривалість циклу асинхронної записи в ВБП

7.3

 

tEABWCREG

Тривалість циклу синхронного запису в ВБП

13.0

 

tEABDD

Затримка даних від входу до виходу ВБП

 

10.0

tEABDATACO

Затримка даних на виході ВБП щодо такту

 

2.0

tEABDATASU

Час установки адреси чи даних у вхідному регістрі ВБП

5.3

 

tEABDATAH

Час утримання адреси чи даних на вході ВБП

0.0

 

tEABWESU

Час установки сигналу WE

5.5

 

tEABWESH

Час утримання сигналу WE

0.0

 

tEABWDSU

Час установки вхідних даних ВБП без використання вхідного регістра

5.5

 

tEABWDH

Час утримання вхідних даних ВБП без використання вхідного регістра

0.0

 

tEABWASU

Час установки адреси ВБП без використання вхідного регістра

2.1

 

tEABWAH

Час утримання адреси ВБП без використання вхідного регістра

0.0

 

tEABWO

Затримка даних на виході ВБП щодо сигналу дозволу запису

 

9.5

tSAMELAB

Затримка даних в ЛМС

 

0.6

tSAMEROW

Затримка передачі даних усередині однієї і тієї ж рядки ГМС

 

3.6

tSAMECOLUMN

Затримка передачі даних усередині одного і тогож ГМС

 

0.9

tDIFFROW

Затримка передачі даних по стовпці з одного рядка ГМС на іншу

 

4.5

tTWOROWS

Затримка передачі даних з одного рядка ГМС на іншу

 

8.1

tLEPERIPH

Затримка керуючого сигналу

 

3.3

tLABCARRY

Затримка перенесення в наступний ЛБ

 

0.5

tLABCASC

Затримка каскадирования в наступний ЛБ

 

2.7

tDIN2IOE

Затримка поширення з виділеного виведення до входу управління ЕВР

 

4.8

tDIN2LE

Затримка поширення з виділеного виведення до входу управління ЛБ або ВБП

 

2.6

tDCLK2IOE

Затримка поширення тактового сигналу з виділеного виведення до входу тактирования ЕВР

 

3.4

tDCLK2LE

Затримка поширення тактового сигналу з виділеного виведення до входу тактирования ЛБ або ВБП

 

2.6

tDIN2DATA

Затримка поширення даних з виділеного виведення до входу ЛБ або ВБП

 

4.3

tDPR

Тестова затримка регістр - регістр через 4 ЛЕ, 3 ряду і 4 ЛМС

 

16.1

tINSU

Час установки глобального тактового імпульсу

5.5

 

tINH

Час утримання даних щодо глобального тактового імпульсу

0.0

 

tOUTCO

Час затримки вихідних даних щодо глобального тактового імпульсу

2.0

6.7

tISUBIDIR

Час установки двонаправленого висновку щодо глобального тактового імпульсу

4.5

 

tINHBIDIR

Час утримання двонаправленого висновку щодо глобального тактового імпульсу

0.0

 

tOUTCOBIDIR

Час затримки вихідних даних на двунаправленном висновку щодо глобального тактового імпульсу

2.0

6.7

tXZBIDIR

Затримка переходу вихідного буфера в третій стан

 

10.0

tZXBIDIR

Затримка переходу вихідного буфера з третього стану

 

10.0

Додаток 2

Додаток 3

Розроблена программа

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

use IEEE.std_logic_arith.all;

ENTITY PIOX_PackDecode IS

PORT

(

aclr : IN STD_LOGIC;

Скидання кінцевого автомата

PIOX_DATA_IN : IN STD_LOGIC_VECTOR(15 DOWNTO 0); -- вхідні лінії піо

PIOX_DATA_OUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); -- вихідні лінії піо

aPIOX_WR : IN STD_LOGIC;

-- сигнал управління на піо (не синхронні) (запис)

sPIOX_RD : IN STD_LOGIC;

-- сигнал управління на піо(синхронний) (читання)

sPIOX_WR : IN STD_LOGIC;

-- сигнал управління на піо (синхронний) (запис)

ADDR : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

-- адреса з заголовка пакета DATA_IN : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

-- дані для пакета

DATA_OUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);

-- дані з пакета

PIOX_ERR : OUT STD_LOGIC; -- помилка пакета (невірний формат пакета) скидається успішної обробкою пакета і сигналом aclr (початковій установки)

BORDER : OUT STD_LOGIC;

-- границі пакета

DOUBLE_STROB_OUT: OUT STD_LOGIC; -- парні строби запису в пам'ять

SINGLE_STROB_OUT: OUT STD_LOGIC; -- одиночний стрибає запису в регістр

DOUBLE_STROB_IN: OUT STD_LOGIC; -- парні строби читання з пам'яті

SINGLE_STROB_IN: OUT STD_LOGIC; -- одиночний стрибає читання з регістра

PACK_SUM : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);

-- cумма даних пакету з регістра GR_SUM

10011000=0x98

CLK: IN STD_LOGIC;

-- F = 20 МГц

-- debug

-- VEC8 : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);

-- VEC2 : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);

deb_a : OUT STD_LOGIC;

deb_b : OUT STD_LOGIC

);

END PIOX_PackDecode;

ARCHITECTURE AUTOMAT OF PIOX_PackDecode IS

signal State : STD_LOGIC_VECTOR(1 downto 0);

-- поточний стан автомата

signal N : std_logic_vector (7 downto 0);

-- номер оброблюваного слова з пакету

signal ssUnion: STD_LOGIC;

- Обедіненіе Вирівняність стробов PIOX_WR і PIOX_RD

signal Reset: STD_LOGIC;

- Складання aclr і SelfReset

signal SelfReset: STD_LOGIC;

- Скидання при некоректному пакеті

signal tSTROB_IN: STD_LOGIC;

- Сигнал служить ознакою генерації парних стробов

signal tData_Out: std_logic_vector (15 downto 0);

- Дані на PIOX в момент PIOX_WR

signal tADD: STD_LOGIC;

- Затримка кордонів пакета BORDER для ПРОХОДЖЕННЯ всіх стробов

tSTROB_OUT

signal tBORDER: STD_LOGIC;

- Кордон інф. частини пакета - провісник сигналу заняття RAM

signal HOLD_sPIOX_WR: STD_LOGIC;

- Затриманий сигнал PIOX_WR використовується для визначення запис / читання в змішаному сигналі ssUnion існує в позитивній області, ті не як PIOX_WR

signal Delay_sPIOX_RD: STD_LOGIC;

- Затриманий сигнал PIOX_RD

signal tPACK_SUM: STD_LOGIC_VECTOR (15 DOWNTO 0);

signal tADDR: STD_LOGIC_VECTOR (7 DOWNTO 0);

signal C_SIGN: STD_LOGIC;

BEGIN

- V1 <= Reset;

- V2 <= SelfReset;

ADDR <= tADDR;

PACK_SUM <= tPACK_SUM;

DATA_OUT <= tDATA_OUT;

ssUnion <= sPIOX_RD AND sPIOX_WR;

- Об'єднання потрібно, так як підрахунок кількості слів йде і в записі і в читанні

Reset <= (SelfReset and (NOT (sPIOX_WR AND sPIOX_RD))) or aclr;

- Скидання відбувається по aclr або помилково протоколу, скидання помилково протоколу утримується до кінця імпульсу PIOX_RD / WR викликав його; після скидання поновлюється і Selfeset звільняється

BORDER <= tBORDER OR tADD;

- Межі пакета формуються від кінця заголовка пакета до кінця останнього слова пакета + час на формування імпульсів запису

PIOX_DATA_OUT <= DATA_IN;

- Просто наскрізне проходження

- Затриманий сигнал PIOX_RD для виділення переднього фронту в імпульсі PIOX_RD

Delay_sPIOX_RD_drive: PROCESS (sPIOX_RD, CLK)

BEGIN

if CLK'event and CLK = '0 'then

Delay_sPIOX_RD <= sPIOX_RD;

else NULL;

end if;

END PROCESS Delay_sPIOX_RD_drive;

- Дані на запис дійсні в момент переднього фронту PIOX_WR

DATA_OUT_drive: PROCESS (aPIOX_WR)

BEGIN

if aPIOX_WR'event and aPIOX_WR = '1 'then

tDATA_OUT <= PIOX_DATA_IN;

else NULL;

end if;

END PROCESS DATA_OUT_drive;

- Адреса формується з заголовка пакета при записі або при читанні між пакетами

- Кількість слів безперервно відстежується для визначення меж пакета

ADDR_N_drive: PROCESS (Delay_sPIOX_RD, sPIOX_RD, State, ssUnion, HOLD_sPIOX_WR)

variable HOLD_sPIOX_RD: STD_LOGIC;

BEGIN

HOLD_sPIOX_RD: = Delay_sPIOX_RD and sPIOX_RD;

if HOLD_sPIOX_RD = '0 'and State = "00" then tADDR <= "00011000";

elsif ssUnion'event and ssUnion = '1 'then

if HOLD_sPIOX_WR = '1 'and State = "00" then

N <= tDATA_OUT (15 downto 8);

tADDR <= tDATA_OUT (7 downto 0);

if tDATA_OUT = "10011000" then NULL;

- На початку пакета лічильник скидається

else tPACK_SUM <= "0000000000000000";

end if;

- Сума підраховується в кінці запису, якщо це не запис заголовка (State = 0) і не регістр GR_sum

- При циклі читання цього регістра його значення гарантовано не змінюється

elsif State = "11" OR State = "10" OR State = "01" then

if State = "11" OR State = "10" then N <= N-1;

else NULL;

end if;

- При зверненні за адресою RG_sum рахунки не відбувається

if tADDR = "10011000" then NULL;

- У записі рахунок значень в момент aWR

elsif HOLD_sPIOX_WR = '1 'then tPACK_SUM <= tPACK_SUM + tDATA_OUT;

- При читанні в момент sRD

elsif HOLD_sPIOX_WR = '0 'then tPACK_SUM <= tPACK_SUM + DATA_IN;

end if;

else NULL;

end if;

else NULL;

end if;

END PROCESS ADDR_N_drive;

BORDER_drive: PROCESS (ssUnion, sPIOX_RD, Reset)

BEGIN

if Reset = '1 'then tBORDER <= '0';

elsif ssUnion'event and ssUnion = '1 'then

if State = "00" then

if HOLD_sPIOX_WR = '1 'then

tBORDER <= '1 ';

else NULL;

end if;

elsif State = "11" OR State = "10" then

if N = "00000001" then tBORDER <= '0 ';

else NULL;

end if;

elsif State = "01" then

if N = "00000000" then tBORDER <= '0 ';

else NULL;

end if;

else NULL;

end if;

else NULL;

end if;

END PROCESS BORDER_drive;

- Парні строби записи формуються після імпульсу PIOX_WR

STROB_OUT_drive: PROCESS (CLK, State, Reset)

variable count: std_logic_vector (2 downto 0);

BEGIN

- SPIOX змінюється по передньому фронку CLK

if Reset = '1 'then count: = "000";

tADD <= '0 ';

HOLD_sPIOX_WR <= '0 ';

DOUBLE_STROB_OUT <= '0 ';

SINGLE_STROB_OUT <= '0 ';

elsif CLK'event and CLK = '0 'then

if sPIOX_WR = '0 'then count: = "111";

elsif sPIOX_WR = '1 'AND count = "000" then NULL;

else count: = count-1;

end if;

- У першому такті nCLK залежні від нього State і count ще не змінилися і в разі якщо State = 0 вони пропускають свій такт установки і не виставляють tADD

if count = "111" and State = "000" then tADD <= '0 ';

- Якщо State не заважає tADD виставляється вже в началн PIOX_WR

elsif count = "111" then tADD <= '1 ';

- По кінцю рахунки сигнал возврвщается в початковий стан

elsif count = "000" then tADD <= '0 ';

else NULL;

end if;

- HOLD_sPIOX_WR подовжує сигнал на 8,5 тактів

if count = "000" then HOLD_sPIOX_WR <= '0 ';

elsif count = "111" then HOLD_sPIOX_WR <= '1 ';

else NULL;

end if;

- Подвійний строб для запису

if tADD = '1 'then

CASE count IS

when "110" => DOUBLE_STROB_OUT <= '1 '; SINGLE_STROB_OUT <= '1 ';

when "101" => DOUBLE_STROB_OUT <= '0 '; SINGLE_STROB_OUT <= '0 ';

when "100" => DOUBLE_STROB_OUT <= '1 '; SINGLE_STROB_OUT <= '0 ';

WHEN OTHERS => DOUBLE_STROB_OUT <= '0 '; SINGLE_STROB_OUT <= '0 ';

END CASE;

end if;

else NULL;

end if;

END PROCESS STROB_OUT_drive;

- Строби читання формуються на початку імпульсу PIOX_RD

STROB_IN_drive: PROCESS (CLK, State, tSTROB_IN)

variable count: std_logic_vector (2 downto 0);

BEGIN

if CLK'event and CLK = '0 'then

if tSTROB_IN = '0 'then count: = "111"; - TSTROB_IN ознака початку генерації

elsif count = "000" then NULL;

else count: = count-1;

end if;

CASE count IS

when "110" => DOUBLE_STROB_IN <= '1 '; SINGLE_STROB_IN <= '0 ';

when "101" => DOUBLE_STROB_IN <= '0 '; SINGLE_STROB_IN <= '1 ';

when "100" => DOUBLE_STROB_IN <= '1 '; SINGLE_STROB_IN <= '0 ';

WHEN OTHERS => DOUBLE_STROB_IN <= '0 '; SINGLE_STROB_IN <= '0 ';

END CASE;

else NULL;

end if;

END PROCESS STROB_IN_drive;

- Кінцевий автомат відстежує фази обробки пакета даних

MAIN: PROCESS (CLK, sPIOX_RD, sPIOX_WR, Reset, State, aclr)

variable StatePrepare: std_logic_vector (1 downto 0); - Наступний стан автомата

BEGIN

- Скидання стану автомата

if Reset = '1 'then

if aclr = '1 'then PIOX_ERR <= '0'; else NULL; end if;

tSTROB_IN <= '0 ';

State <= "00";

StatePrepare: = "00";

elsif CLK'event AND CLK = '0 'then

if sPIOX_RD = '0 'then

CASE State IS

WHEN "00" => tSTROB_IN <= '1 ';

StatePrepare: = "00";

WHEN "01" => tSTROB_IN <= '1 ';

if N = "00000000" then StatePrepare: = "00";

PIOX_ERR <= '0 ';

else StatePrepare: = "10";

end if;

WHEN "10" => tSTROB_IN <= '1 ';

if N = "00000001" then StatePrepare: = "00";

PIOX_ERR <= '0 ';

else StatePrepare: = "10";

end if;

WHEN "11" =>

PIOX_ERR <= '1 ';

SelfReset <= '1 ';

StatePrepare: = "00";

WHEN OTHERS => NULL;

END CASE;

elsif sPIOX_WR = '0 'then

CASE State IS

WHEN "00" => StatePrepare: = "01";

WHEN "01" => if N = "00000000" then StatePrepare: = "00";

PIOX_ERR <= '0 ';

else StatePrepare: = "11";

end if;

WHEN "11" =>

if N = "00000001" then StatePrepare: = "00";

PIOX_ERR <= '0 ';

else StatePrepare: = "11";

end if;

WHEN "10" => PIOX_ERR <= '1 ';

StatePrepare: = "00";

SelfReset <= '1 ';

WHEN OTHERS => NULL;

END CASE;

- Оскільки обидва нуля вже видалені в LineUp в else - випадок коли обидва '1 '

else State <= StatePrepare; - Змінити стан

SelfReset <= '0 ';

tSTROB_IN <= '0 ';

end if;

else NULL;

end if; - Main if

deb_a <= tSTROB_IN;

deb_b <= sPIOX_RD;

END PROCESS MAIN;

END AUTOMAT

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.