Вы находитесь на странице: 1из 5

C.

2 ) comparador de tres números (mas próximos “A”)


LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY comparador IS

PORT (AX: IN STD_LOGIC_VECTOR (3 DOWNTO 0);

BX: IN STD_LOGIC_VECTOR (3 DOWNTO 0);

A0,A1,A2,A3: INOUT STD_LOGIC;

B0,B1,B2,B3: INOUT STD_LOGIC;

SA,SB: IN STD_LOGIC;

ASB,BSA,ASIB: OUT STD_LOGIC;

AMB,BMA,AIB: OUT STD_LOGIC);

END comparador;

ARCHITECTURE comparacion OF comparador IS

BEGIN

WITH AX SELECT

A3 <= '1' WHEN "1011",

'1' WHEN "1100",

'0' WHEN OTHERS;

WITH AX SELECT

A2 <= '1' WHEN "0111",

'1' WHEN "1000",

'1' WHEN "1001",

'1' WHEN "1010",

'0' WHEN OTHERS;

WITH AX SELECT
A1 <= '1' WHEN "0101",

'1' WHEN "0110",

'1' WHEN "1001",

'1' WHEN "1010",

'0' WHEN OTHERS;

WITH AX SELECT

A0 <= '1' WHEN "0100",

'1' WHEN "0110",

'1' WHEN "1000",

'1' WHEN "1010",

'1' WHEN "1100",

'0' WHEN OTHERS;

WITH BX SELECT

B3 <= '1' WHEN "1011",

'1' WHEN "1100",

'0' WHEN OTHERS;

WITH BX SELECT

B2 <= '1' WHEN "0111",

'1' WHEN "1000",

'1' WHEN "1001",

'1' WHEN "1010",

'0' WHEN OTHERS;

WITH BX SELECT

B1 <= '1' WHEN "0101",

'1' WHEN "0110",

'1' WHEN "1001",


'1' WHEN "1010",

'0' WHEN OTHERS;

WITH BX SELECT

B0 <= '1' WHEN "0100",

'1' WHEN "0110",

'1' WHEN "1000",

'1' WHEN "1010",

'1' WHEN "1100",

'0' WHEN OTHERS;

--compara signos

PROCESS (SA,SB,A3,A2,A1,A0,B3,B2,B1,B0)

BEGIN

IF (SA = SB AND A3 = B3 AND A2=B2 AND A1=B1 AND A0=B0)

THEN

AMB <= '0'; BMA <= '0'; AIB <= '1';

END IF;

IF ((SA>SB)OR(SA=SB AND A3<B3)OR

(SA=SB AND A3=B3 AND A2<B2)OR

(SA=SB AND A3=B3 AND A2=B2 AND A1<B1)OR

(SA=SB AND A3=B3 AND A2=B2 AND A1=B1 AND A0<B0))THEN

AMB <= '0'; BMA <= '1'; AIB <= '0';

END IF;

IF ((SA<SB)OR(SA=SB AND A3>B3)OR

(SA=SB AND A3=B3 AND A2>B2)OR

(SA=SB AND A3=B3 AND A2=B2 AND A1>B1)OR

(SA=SB AND A3=B3 AND A2=B2 AND A1=B1 AND A0>B0))


THEN

AMB <= '1'; BMA <= '0'; AIB <= '0';

END IF;

END PROCESS;

END comparacion;

d.1) Detector y corrector de errores

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_arith.ALL;
USE IEEE.STD_LOGIC_unsigned.ALL;

ENTITY corrector IS
PORT(A3,A2,A1,A0,ER: IN STD_LOGIC;
F1,F2,F3,F4,F5,F6,F7: OUT STD_LOGIC);
END corrector;

ARCHITECTURE corregir OF corrector IS


SIGNAL B1,B2,B3,B4,B5,B6,B7: STD_LOGIC;
SIGNAL C1,C2,C3: STD_LOGIC;
SIGNAL D1,D2,D3,D4,D5,D6,D7: STD_LOGIC;
SIGNAL Z: STD_LOGIC_VECTOR (2 DOWNTO 0);
BEGIN
--TRANSMICION

B1<=B2 XOR B5 XOR B6;


B2<=A0;
B3<=B2 XOR B4 XOR B5;
B4<=A1;
B5<=A2;
B6<=A3;
B7<=B4 XOR B5 XOR B6;

-- RECEPCION
C3 <= B7 XOR B4 XOR B5 XOR B6;
C2 <= B3 XOR B2 XOR B4 XOR B5;
C1 <= B1 XOR B2 XOR B5 XOR B6;
-- CODIFICACION
Z<=(C3 & C2 & C1);

---CODIFICADOR
WITH Z SELECT
D1 <= '1' WHEN "001",
'0' WHEN OTHERS;
WITH Z SELECT
D2 <= '1' WHEN "010",
'0' WHEN OTHERS;
WITH Z SELECT
D3 <= '1' WHEN "011",
'0' WHEN OTHERS;
WITH Z SELECT
D4 <= '1' WHEN "100",
'0' WHEN OTHERS;
WITH Z SELECT
D5 <= '1' WHEN "101",
'0' WHEN OTHERS;
WITH Z SELECT
D6 <= '1' WHEN "110",
'0' WHEN OTHERS;
WITH Z SELECT
D7 <= '1' WHEN "111",
'0' WHEN OTHERS;

--CORRECCION

F1 <= B1 XOR D1;


F2 <= B2 XOR D2;
F3 <= B3 XOR D3;
F4 <= B4 XOR D4;
F5 <= B5 XOR D5;
F6 <= B6 XOR D6;
F7 <= B7 XOR D7;

END corregir;

Вам также может понравиться