Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_Ivanenko2_chastina.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
215.55 Кб
Скачать

Бібліотека:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

package CONVERTERS is

function CONVW (X :STD_LOGIC_VECTOR) return BIT_VECTOR;

function CONV (X :BIT_VECTOR) return STD_LOGIC_VECTOR;

function CONVK (X :STD_LOGIC_VECTOR (7 downto 0)) return CHARACTER;

function CONVB (X :CHARACTER) return STD_LOGIC_VECTOR;

function CONVR (X :STD_LOGIC_VECTOR) return INTEGER;

function CONV8 (X :INTEGER) return STD_LOGIC_VECTOR;

end CONVERTERS;

package body CONVERTERS is

------------------------------------------------------------------------------

-- From STD_LOGIC_VECTOR to BIT_VECTOR converter

------------------------------------------------------------------------------

function CONVW (X :STD_LOGIC_VECTOR) return BIT_VECTOR is

constant XMAP :BIT :='0';

variable RESULT :BIT_VECTOR (X'RANGE);

begin

for i in RESULT'RANGE loop

case X(i) is

when '0' | 'L' => RESULT(i) := '0';

when '1' | 'H' => RESULT(i) := '1';

when others => RESULT(i) := XMAP;

end case;

end loop;

return RESULT;

end CONVW;

------------------------------------------------------------------------------

-- From BIT_VECTOR to STD_LOGIC_VECTOR converter

------------------------------------------------------------------------------

function CONV (X :BIT_VECTOR) return STD_LOGIC_VECTOR is

variable RESULT :STD_LOGIC_VECTOR (X'RANGE);

begin

for i in RESULT'RANGE loop

case X(i) is

when '0' => RESULT(i) := '0';

when '1' => RESULT(i) := '1';

end case;

end loop;

return RESULT;

end CONV;

------------------------------------------------------------------------------

-- From STD_LOGIC_VECTOR to CHARACTER converter

------------------------------------------------------------------------------

function CONVK (X :STD_LOGIC_VECTOR (7 downto 0)) return CHARACTER is

constant XMAP :INTEGER :=0;

variable TEMP :INTEGER :=0;

begin

for i in X'RANGE loop

TEMP:=TEMP*2;

case X(i) is

when '0' | 'L' => null;

when '1' | 'H' => TEMP :=TEMP+1;

when others => TEMP :=TEMP+XMAP;

end case;

end loop;

return CHARACTER'VAL(TEMP);

end CONVK;

------------------------------------------------------------------------------

-- From CHARACTER to STD_LOGIC_VECTOR (7 downto 0) converter

------------------------------------------------------------------------------

function CONVB (X :CHARACTER) return STD_LOGIC_VECTOR is

variable RESULT :STD_LOGIC_VECTOR (7 downto 0);

variable TEMP :INTEGER :=CHARACTER'POS(X);

begin

for i in RESULT'REVERSE_RANGE loop

case TEMP mod 2 is

when 0 => RESULT(i):='0';

when 1 => RESULT(i):='1';

when others => null;

end case;

TEMP:=TEMP/2;

end loop;

return RESULT;

end CONVB;

------------------------------------------------------------------------------

-- From STD_LOGIC_VECTOR to unsigned INTEGER converter

------------------------------------------------------------------------------

function CONVR (X :STD_LOGIC_VECTOR) return INTEGER is

constant XMAP :INTEGER :=0;

variable RESULT :INTEGER :=0;

begin

for i in X'RANGE loop

RESULT:=RESULT*2;

case X(i) is

when '0' | 'L' => null;

when '1' | 'H' => RESULT :=RESULT+1;

when others => RESULT :=RESULT+XMAP;

end case;

end loop;

return RESULT;

end CONVR;

------------------------------------------------------------------------------

-- From INTEGER to 8-bit STD_LOGIC_VECTOR converter

------------------------------------------------------------------------------

function CONV8 (X :INTEGER) return STD_LOGIC_VECTOR is

constant L :INTEGER :=8; -- result's length

variable RESULT :STD_LOGIC_VECTOR (L-1 downto 0);

variable TEMP :INTEGER;

begin

if X<0 then

TEMP:=(2**RESULT'LENGTH)+X;

else

TEMP:=X;

end if;

for i in RESULT'REVERSE_RANGE loop

case TEMP mod 2 is

when 0 => RESULT(i):='0';

when 1 => RESULT(i):='1';

when others => null;

end case;

TEMP:=TEMP/2;

end loop;

return RESULT;

end CONV8;

end CONVERTERS;

Часова діаграма нашого проекту

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]