Текст программной части на VHDL

Страницы работы

Содержание работы

Приложение 1. Текст программной части на VHDL.

library IEEE;

use IEEE.STD_LOGIC_1164.all;    

use IEEE.STD_LOGIC_ARITH.all;

use IEEE.MATH_REAL.all;

entity DWS is

port (

-- ВХОДЫ

LOADPIC            : in  UNSIGNED  (7 downto 0) := ("00000000");-- вход последовательной загрузки RGB

CONTROL          : in  UNSIGNED  (3 downto 0) := ("0000");                            -- вход управления процессором

RESET                 : in  STD_LOGIC := '1';                                 -- сброс (1->0)

CLK                     : in  STD_LOGIC := '0';                                                -- тактирование (0->1)

OUTBUSY          : in  STD_LOGIC := '1';                                 -- (1)-внешн. готов принять выходные данные;          LOAD                  : in  STD_LOGIC              := '0';                    -- признак загрузки

-- ВЫХОДЫ

NEXTCOLOR     : out STD_LOGIC             := '0';                    -- цвет загружен можно загружать следующий

UNLOADPIC      : out UNSIGNED  (7 downto 0) := ("00000000");-- последовательный выход счетчик+RGB

INBUSY              : out STD_LOGIC := '0';                                -- (1)-готов принять входные данные; (0)-нет

ERROR                : out STD_LOGIC             := '0';                    -- произошла ошибка

UNLOAD                          : out STD_LOGIC             := '1'        -- признак выгрузки

);             

end DWS;

architecture MAIN of DWS is

type KEEPER is array( INTEGER range 0 to 197120) of UNSIGNED  (7 downto 0);

type InfoStore is array (INTEGER range 0 to 20480)  of STD_LOGIC;

begin 

process(RESET,CLK,OUTBUSY,CONTROL,LOADPIC)

variable RRStore                             : KEEPER;                                                                      -- Хранилище RED

variable GRStore                             : KEEPER;                                                                      -- Хранилище GREEN

variable BRStore                             : KEEPER;                                                                      -- Хранилище BLUE

variable WaterMark                       : InfoStore;                                                                     --Хранилище ЦВЗ

variable WR                      : KEEPER;                                                       -- Хранилище СЖАТОГО RED

variable WG                      : KEEPER;                                                       --Хранилище СЖАТОГО GREEN

variable WB                      : KEEPER;                                                       -- Хранилище СЖАТОГО BLUE

variable FlagReg                             : UNSIGNED  (14 downto 0) := ("000000000000000");- ФЛАГОВЫЙ РЕГИСТР   

variable Counter1                           : INTEGER   range 0 to 3 :=0;--пересчет в равноконтрольную. систему

variable MIDDLE                            : UNSIGNED  (7 downto 0);           -- записываемый водяной знак

variable POSITION                         : INTEGER;                                       -- в какой квадрат записываем  

--+++++++++++++ определение среднего значения и его положения +++++++++++++++++

procedure MaxPos(x,y,z : UNSIGNED  (7 downto 0); WM : STD_LOGIC )  is

variable TMin,TMid,TMax            : UNSIGNED  (7 downto 0);

variable res, MID,Sigma                 : INTEGER;

begin

TMax := x; res := 1;

if (y > x) and (y > z) then

TMax := y; res := 2;

elsif (z > x) and (z > y) then

TMax := z; res := 3;                                                     

end if;

if res = 1 then

if y > z then

TMid := y; TMin := z; POSITION := 2;

else

TMid := z; TMin := y; POSITION := 3;

end if;

elsif res = 2 then

if x > z then

TMid := x; TMin := z; POSITION := 1;

else

TMid := z; TMin := x; POSITION := 3;

end if;

else

if x > y then

TMid := x; TMin := y; POSITION := 1;

else

TMid := y; TMin := x; POSITION := 2;

end if;                                               

end if;

Sigma := INTEGER(CONV_INTEGER(Tmax-Tmin)/7);

if WM = '0' then

Sigma := INTEGER(CONV_INTEGER(TMid)-Sigma+(Sigma/4));

else  

Sigma := INTEGER(CONV_INTEGER(TMid)+(Sigma/4));

end if;

MIDDLE := CONV_UNSIGNED(Sigma,8); 

end;    

----+++++++++ определение среднего значения и его положения +++++++++++++++++++++

procedure PutSign(g:Integer)  is

variable  counter : INTEGER;

begin

--+++++++++++++++++++ для красного ++++++++++++++++++++

counter := 0;

--большой квадрат

for i in 0 downto 127 loop

for j in 0 downto 127 loop

MaxPos(WR(128+i*256+j),WR(32768+i*256+j),WR(32896+i*256+j),  WaterMark(counter));

if     POSITION = 1 then WR(128+i*256+j)   := MIDDLE;

elsif  POSITION = 2 then WR(32768+i*256+j) := MIDDLE;

elsif  POSITION = 3 then WR(32896+i*256+j) := MIDDLE;

end if;

counter := counter + 1; 

end loop;

end loop;

--малый квадрат

for i in 0 downto 63 loop

for j in 0 downto 63 loop

MaxPos(WR(64+i*256+j),WR(16384+i*256+j),WR(16448+i*256+j),  WaterMark(counter));

if     POSITION = 1 then WR(64+i*256+j)    := MIDDLE;

elsif  POSITION = 2 then WR(16384+i*256+j) := MIDDLE;

Похожие материалы

Информация о работе

Тип:
Написанные программы на языках программирования
Размер файла:
87 Kb
Скачали:
0