Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


END PROCESS;




--- первый шаг коррекции – коррекция ЧОСТ по знаку делимого

RG_O: PROCESS (CLK, RST)

BEGIN

IF RST = '1' THEN

R_OST<=SIGNED(CONST016);

ELSIF CLK = '1' AND CLK'EVENT THEN

IF LAST2 = '1' THEN

IF ZF = '0' AND VF = '1' THEN -- (Остаток!=0) И

-- (Знак(ДM)!= Знак(ЧОСТ)

IF FF = '0' THEN -- Если (Знак(ДT)!= Знак(ДM)

R_OST<= CH_OST - SIGNED(DT);

ELSE -- Если (Знак(ДT == Знак(ДM)

R_OST<= CH_OST + SIGNED(DT);

END IF;

ELSE R_OST<= CH_OST;

END IF;

END IF;

END IF;

END PROCESS;

--- второй шаг коррекции – коррекция частного

RG_OO: PROCESS (CLK, RST)

BEGIN

IF RST = '1' THEN

R_CHASTN<=SIGNED(CONST016);

ELSIF CLK = '1' AND CLK'EVENT THEN

IF LAST3 = '1' THEN

IF (FF = '0' AND SDM = '0') OR -- (ДM>0) И (ДT<0)

(FF = '1' AND SDM = '1' AND ZZF = '1') OR -- (ДM<0) И (ДT<0) И

-- (ЧОСТ=0)

(FF = '0' AND SDM = '1' AND ZZF = '0') -- (DM<0) И (DT>0) И

-- (CH_OSTATOK!=0)

THEN

R_CHASTN<= SIGNED(DM) + 1; -- КОРРЕКЦИЯ ЧАСТНОГО

ELSE

R_CHASTN<= SIGNED(DM);

END IF;

END IF;

END IF;

END PROCESS;

-- OPREDEL. TZN

zss:SS <= NOT (DA(INT15) XOR DB(INT15)); --- признак равенства знаков ДМ и ДТ

zsn:SN <= NOT (SDT XOR ZCH_OST(INT15)); --- признак равенства знаков ДТ и ЧОСТ

zvf:VF <= SDM XOR CH_OST(INT15); --- признак неравенства знаков ДМ и ЧОСТ

zff:FF <= NOT (SDM XOR SDT); -- признак равенства знаков ДМ и ДТ

-- Сдвиг частичного остатка

VCH_OST <= SIGNED(ZCH_OST(INT15-1 DOWNTO 0)) & DM(INT15);

YY <= X"FFFF" WHEN DA(INT15) = '1' ELSE CONST016;

-- Мультиплексор выходной шины

DP <= STD_LOGIC_VECTOR(R_CHASTN(INT15 DOWNTO 0)) WHEN OUTHL = '1' -- частное

ELSE STD_LOGIC_VECTOR(R_OST(INT15 DOWNTO 0)); -- остаток

SF<= ZF;

SSF <= VF;

--- признак CH_OST=0

ZF<='1' WHEN CH_OST(INT15 DOWNTO 0) = SIGNED(CONST016) ELSE '0';

--- признак R_OST=0

ZZF<='1' WHEN R_OST(INT15 DOWNTO 0) = SIGNED(CONST016) ELSE '0';

TRIBus: FOR i IN 0 TO INT15 GENERATE

TRiBuffer: TRi PORT MAP (DP(i), OE, DY(i));

END GENERATE TRIBus;

End COP;

-------- Управляющий автомат деления

LIBRARY ieee;

USE ieee.std_logic_1164.all;

--USE IEEE.STD_LOGIC_arith.ALL;

--USE IEEE.STD_LOGIC_signed.ALL;

ENTITY mcu_uad IS

PORT(

CLK, RST, START : in STD_ULOGIC;

LAB, SHIFT, LAST1, LAST2, LAST3, RDY : out STD_ULOGIC

);

End mcu_uad;

ARCHITECTURE CUA OF mcu_uad IS

TYPE STATES IS (S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16,S17,S18,S19,S20,FINISH);

SIGNAL ST : STATES;--

BEGIN

STATE: PROCESS (CLK, RST)

BEGIN

IF RST = '1' THEN

ST<=FINISH;

ELSIF CLK = '1' AND CLK'EVENT THEN

CASE ST IS

WHEN S1 => ST<= S2;

WHEN S2 => ST<= S3;

WHEN S3 => ST<= S4;

WHEN S4 => ST<= S5;

WHEN S5 => ST<= S6;

WHEN S6 => ST<= S7;

WHEN S7 => ST<= S8;

WHEN S8 => ST<= S9;

WHEN S9 => ST<= S10;

WHEN S10 => ST<= S11;

WHEN S11 => ST<= S12;

WHEN S12 => ST<= S13;

WHEN S13 => ST<= S14;

WHEN S14 => ST<= S15;

WHEN S15 => ST<= S16;

WHEN S16 => ST<= S17;

WHEN S17 => ST<= S18;

WHEN S18 => ST<= S19;

WHEN S19 => ST<= S20;

WHEN S20 => ST<= FINISH;

WHEN FINISH => IF START='1' THEN ST<= S1;

ELSE ST<=null; END IF;

END CASE;

END IF;

END PROCESS;

LAB<='1' WHEN ST=S1 ELSE '0';

SHIFT<='0' WHEN ST=S1 OR ST=FINISH OR

ST=S18 OR ST=S19 OR ST=S20

ELSE '1';

LAST1<='1' WHEN ST=S17 ELSE '0';

-- S18 - free

LAST2<='1' WHEN ST=S19 ELSE '0';

LAST3<='1' WHEN ST=S20 ELSE '0';

RDY<='1' WHEN ST=FINISH ELSE '0';

End CUA;

 


Поделиться:

Дата добавления: 2015-04-11; просмотров: 90; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты