Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Автоматизация проектирования радиоэлектронных устройств связи..pdf
Скачиваний:
12
Добавлен:
15.11.2022
Размер:
5.53 Mб
Скачать

d (1)

<=

d (0);

xor

s;

d(2)

<=

d (1)

d (3)

<=

d (2);

xor

s;

d(4)

<=

d(3)

vo <= kl xor r (14) ; end if;

end if; end process;

end behaviour;

2. Описание на языке VHDL последовательной реализации декодера ГСК (11,7,3)

LIBRARY ieee;

USE ieee.std__logic__1164 .all;

ENTITY decoder_ll_7_3 IS

PORT (

v:IN STD_LOGIC;

u:OUT STD__LOGIC;

— er :OUT STD_LOGIC; clr: IN STD_LOGIC; elk: IN STD_LOGIC

);

END decoder_ll_7__3 ;

ARCHITECTURE beh OF decoder_ll_7_3 IS

 

 

 

 

 

BEGIN

 

 

 

 

 

 

 

 

 

 

 

PROCESS(elk)

 

 

 

 

 

 

 

 

 

 

VARIABLE ent: INTEGER RANGE 0 TO 20;

 

 

 

 

 

VARIABLE d: STD_LOGIC_VECTOR(0 TO 20);

 

 

 

 

 

VARIABLE s: STD_LOGIC_VECTOR(0 TO 3);

 

 

 

 

 

BEGIN

 

 

 

 

 

 

 

 

 

 

 

IF (clr=10 1) THEN

 

 

 

 

 

 

 

 

 

ent:=0;

 

 

 

 

 

 

 

 

 

 

— er<='O';

 

 

 

 

 

 

 

 

 

 

ELSIF rising_edge(elk) THEN

 

 

 

 

 

 

 

ent:=cnt+l;

 

 

 

 

 

 

 

 

 

 

IF (cnt>=2 AND cnt<=12) THEN

 

 

 

 

 

 

d(cnt):=v;

 

 

 

 

 

 

 

 

 

 

ELSIF

(cnt=13) THEN

 

 

 

 

 

 

 

 

— синдром:

xor

d(2)

xor

d (4)

xor

d (5)

xor

d (6) ;

 

 

s(0):= d (9)

xor

d (8)

s (1):= d (10)

xor

d(2)

xor

d (3)

xor

d (5)

xor

d (6)

s (2):= d (11)

xor

d (2)

xor

d (3)

xor

d (4)

xor

d (6)

xor

d (7)

s (3 ) := d (12)

xor

d (2)

xor

d (3)

xor

d (4)

xor

d (5)

xor

d (7)

xor

d (8) ;

 

 

8);

 

 

 

 

 

 

 

d (13

TO 19):= d (2 TO

 

 

 

 

 

 

 

— синдромное декодирование:

 

CASE

s

IS

 

 

 

 

 

 

нет

ошибок:

=>

d (13 TO

19):«d(2 TO

8)

 

WHEN

"0000"

 

в 1 разряде:

=>

d (13):=not

d (2);

 

 

WHEN

"1111"

 

 

в 2 разряде:

=>

d (14):*not

d (3);

 

 

 

WHEN

"0111"

 

 

— в 3 разряде:

=>

d (15):=not

d (4);

 

 

 

WHEN

"1011"

 

 

— в 4 разряде:

=>

d (16):=not

d (5);

 

 

 

WHEN

"1101"

 

 

— в 5 разряде:

=>

d (17):=not

d (6);

 

 

 

WHEN

"1110"

 

 

— в 6 разряде:

=>

d (18):=not d(7);

 

 

 

WHEN

"ООН"

 

 

— в 7 разряде:

=>

d (19):=not

d (8);

 

 

 

WHEN

"0101"

 

 

— в 8 разряде:

=>

d (13 TO

19):=d(2 TO

8)

 

 

WHEN

"1000"

 

— в 9 разряде:

=>

d (13 TO

19):=d(2 TO

8)

 

WHEN

"0100"

 

в 10

разряде:

d (13 TO

19):=d(2 TO

8)

 

WHEN

"0010"

=>

 

в 11

разряде:

d (13 TO

19):=d(2 TO

8)

 

 

WHEN

"0001"

=>

 

— в ост. случаях

d (13 TO

19):=d(2 TO

8)

 

 

WHEN

OTHERS

=>

 

END CASE;

 

 

 

 

 

u<=d(13);

 

 

 

 

 

ELSIF (cnt>=14 AND cnt<=19) THEN

 

 

u<=d(cnt);

 

 

 

 

 

END

IF;

 

THEN

 

 

 

 

 

IF

cnt=20

 

 

 

 

 

 

u<='01;

 

 

 

 

 

 

cnt:=1;

 

 

 

 

 

 

END

IF;

 

 

 

 

 

 

 

END

IF;

 

 

 

 

 

 

 

END PROCESS;

END

Описание на языке VHDL устройств управления декодером неукороченного кода ЦСК

— controll library ieee;

use ieee.std_logic_1164.all;

entity decoder_controll is port (

d:in integer range 0 to 2*15-1;

q:out std_logic

) ;

end decoder_controll;

architecture behaviour of decoder_controll is begin

q <= '0' when d<15 else '1' end behaviour;

— control2 library ieee;

use ieee.std_logic_1164.all;

entity decoder_control2 is port (

d:in integer range 0 to 2*15-1;

q: out std_logic

) ;

end decoder_control2;

architecture behaviour of decoder_control2 is begin

q <= '1' when d=0 else '0' end behaviour;

LIBRARY

ieee;

 

USE ieee.std_logic_1164.all;

ENTITY decoder_red IS

 

PORT (

 

 

IN STD_LOGIC;

elk, vi:

controll,control2,reset: IN STD_LOGIC;

vo,

delete:

OUT STD_LOGIC) ;

END decoder_red;

 

ARCHITECTURE behaviour OF decoder_red IS

signal kl,s,del,ok:std_logic;

signal

d:

std_logic_vector(0 to 4);

signal

r:

std__logic_vector (0 to 12);

begin

<=

*1 1 when (controll='1') and (d="11010") else 'O';

kl

ok

<=

'1' when

селектора:

 

настройка

(d="10101")or

(d="00001,,)or

(d=M00010")or (d=,,00100") or (de"01000")or (d=*n10000n)or

(d=,,01011")or

(d="10110f,)or

(d=,,00111")or

(d=,,01110,,)or

(d=,,11100,,)or

(d-n10011n)or

(d=,,01101,,) else 'O';

del <= '1' when (control2='1') and not(d="00000") else

'O';

s <= (vi xor d (4)) and not(kl); process (elk,reset)

begin

if reset='0' then d <= "00000";

vo <= 'O';

r <= "0000000000000"; elsif rising_edge(elk) then

delete <= del and not ok; if del='l’ then

d <= "00000"; vo <= 'O';

r <= "0000000000000";

else

— reg--------------

r (0) <- vi;

for j in 1 to 12 loop r(j) <= r(j-l);

end loop;

d (0)

<=

s ;

 

 

d(l) <= d(0) xor vi;

d(2)

<=

d (1)

xor

s;

d (3)

<=

d (2);

xor

d (4)

d (4)

<=

d (3)

vo <= kl xor r (12); end if;

end if; end process;

end behaviour;