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

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

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY coder_ll_7_3 IS

PORT (

u:IN STD_LOGIC;

v:OUT STD_LOGIC; clr: IN STD_LOGIC; elk: IN STD_LOGIC

);

END coder_ll_7_3;

ARCHITECTURE beh OF coder_ll_7_3 IS

 

 

 

 

 

 

 

 

 

 

BEGIN

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PROCESS(elk)

 

 

 

 

 

 

 

 

 

 

 

 

 

VARIABLE ent: INTEGER RANGE 0 TO IN­

 

 

 

 

 

 

 

 

 

VARIABLE d: STD_LOGIC_VECTOR(0 TO 19);

 

 

 

 

 

 

 

 

BEGIN

(clr=’O') THEN

ent:=0;

 

 

 

 

 

 

 

 

 

 

IF

 

 

 

 

 

 

 

 

 

 

ELSIF falling_edge(elk) THEN

 

 

 

 

 

 

 

 

 

 

 

ent:=cnt+l;

cnt<=7) THEN d(cnt):=u;

 

 

 

 

 

 

 

IF (ent>—1 AND

 

 

 

 

 

 

 

— операторы кодирования:

xor

d (3)

xor

d(4)

xor

 

ELSIF

(cnt=8) THEN

d(8):=d(l)

 

d (5) ;

THEN

d(9):=d(l)

xor

d(2)

xor

d (4)

xor

 

ELSIF

(cnt=9)

 

d (5)

xor d (7);

THEN

d(10):=d(l)

xor

d(2)

xor

d (3)

xor

 

ELSIF

(cnt=10)

 

d (5)

xor d (6);

THEN

d (11):= d (1)

xor

d(2)

xor

d (3)

xor

 

ELSIF

(cnt—11)

 

d (4)

xor d(6)

xor d(7);

 

 

 

 

 

 

 

 

 

 

 

END IF;

 

 

 

 

 

 

 

 

 

 

 

 

 

v<=d(ent);

 

 

 

 

 

 

 

 

 

 

 

 

END

if cnt=19 then cnt:=0; end if;

 

 

 

 

 

 

 

 

 

 

IF;

 

 

 

 

 

 

 

 

 

 

 

 

 

END PROCESS;

END beh;

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

1.Неукороченный код:

library

ieee;

 

use ieee.std_logic_1164.all;

entity coder_control is

port (

 

такта:

--номер

d:

in

integer range 0 to 2*15-1;

— сигнал

управления:

q:out std_logic

) ;

end coder_control;

architecture behaviour of coder_control is begin

q <= '1' when d<10 else 'O'; end behaviour;

2.Укороченный код:

library ieee;

use ieee.std_logic_1164.all;

entity coder_control is port (

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

q:out std_logic

) ;

end coder_control;

architecture behaviour of coder_control is begin

q <= '1' when d<8 else 'O'; end behaviour;

Описание на языке VHDL кодера ЦСК по h{x)

LIBRARY ieee;

USE ieee.std_logic_1164.all

ENTITY coder_h IS

 

 

PORT (

IN

STD_LOGIC;

elk, u:

control, reset:

IN

STD_LOGIC;

v:

OUT

STD LOGIC);

END coder_h;

 

 

ARCHITECTURE behaviour OF coder_h IS

signal d: std_logic_vector(9 downto 0); signal s: std_logic;

begin

вынесенные

сумматоры:

s

<= u when control=,0' else

 

d(0)

xor

d (2) xor d (5) xor d(6) xor

 

d (8)

xor

d (9);

v<= d (0) ;

сдвиговый регистр: process (elk,reset) begin

if reset='0' then

d <= "0000000000";

elsif falling_edge(elk) then d (9) <= s;

for j in 8 downto 0 loop d(j) <= d(j+l);

end loop; end if;

end process; end behaviour;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY decoder IS

 

 

 

PORT (

vi:

 

 

 

 

IN STD_LOGIC;

elk,

 

 

 

 

controll,control2,reset: IN STD_LOGIC;

vo,

delete:

 

 

 

OUT STD_LOGIC);

END decoder;

 

 

 

 

 

 

ARCHITECTURE behaviour OF decoder IS

signal

kl,s,del:

 

std_logic;

— триггеры делителя:

 

signal

d:

 

std_logic_vector(0 to 4);

— ячейки

регистра:

 

 

signal

r:

 

std_logic_vector(0 to 14);

begin

 

 

 

селектора:

— настройка

kl <= '1• when (controll=‘1') and (d="00001")

 

else

'O';

 

 

 

— сигнал

стирания:

 

 

del

<=

'1' when

(control2='1 *) and not(d="00000")

 

else

’О 1;

 

 

 

delete

<=

del;

 

and not(kl);

s <=

(vi

xor d (4))

process

 

(elk,reset)

begin

асинхронный

сброс:

 

 

if

reset='0'

then

 

 

 

d

<=

"00000";

 

 

 

vo

<=

'O';

 

 

 

 

r <=

"000000000000000";

 

elsif rising_edge(elk) then

 

 

 

— сброс по окончании декодирования:

 

 

 

if

del='1'

then

 

 

 

 

d <=

"00000";

 

 

 

 

vo

<=

'O';

 

 

 

 

r <=

"000000000000000";

else

регистр сдвига:

г(0) <= vi;

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

end loop;

— делитель на базе РЛЛОС: d (0) <= s;