Professional Documents
Culture Documents
com
1 registro de 8 bit
ALU de 8 operaciones
A: REG y B: INMEDIATO
OP ALU
000 FA + B
001 FA - B
010 FA
011 FB
100 FA AND B
101 FA XOR B
110 FROR A
111 FROL A
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY PROCESADOR IS
PORT( CLK:IN STD_LOGIC;
OP:IN BIT_VECTOR(2 DOWNTO 0);
W:IN STD_LOGIC;
INM:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
C0,Z:OUT STD_LOGIC);
END PROCESADOR;
COMPONENT REGISTRO_R0
PORT(DATO:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
A:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
W:IN STD_LOGIC;
CLK:IN STD_LOGIC);
END COMPONENT;
COMPONENT ALU
PORT(A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
OP:IN BIT_VECTOR(2 DOWNTO 0);
C0,Z:OUT STD_LOGIC;
F:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
BEGIN
U0:REGISTRO_R0 PORT MAP(X1,X0,W,CLK);
U1:ALU PORT MAP(X0,INM,OP,C0,Z,X1);
END BEHAVIORAL;
lonely113 http://lonely113.blogspot.com
Component ALU
LIBRARY IEEE;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ALU IS
PORT(A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
OP:IN BIT_VECTOR(2 DOWNTO 0);
C0,Z:OUT STD_LOGIC;
F:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ALU;
BEGIN
TA<='0' & A;
TB<='0' & B;
PROCESS(TA,TB,OP)
BEGIN
CASE OP IS
WHEN "000"=>TC<=TA+TB;
WHEN "001"=>TC<=TA-TB;
WHEN "010"=>TC<=TA;
WHEN "011"=>TC<=TB;
WHEN "100"=>TC<=(TA AND TB);
WHEN "101"=>TC<=(TA XOR TB);
WHEN "110"=>TC(6 DOWNTO 0)<=A(7 DOWNTO 1);
TC(7)<=A(0);
WHEN "111"=>TC(7 DOWNTO 1)<=A(6 DOWNTO 0);
TC(0)<=A(7);
END CASE;
END PROCESS;
END ALGORITMO;
lonely113 http://lonely113.blogspot.com
Component REGISTRO_R0
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY REGISTRO_R0 IS
PORT(DATO:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
A:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
W:IN STD_LOGIC;
CLK:IN STD_LOGIC);
END REGISTRO_R0;
BEGIN
PROCESS(CLK)
BEGIN
IF CLK='1' AND CLK'EVENT THEN
IF W='1' THEN
A<=DATO;
END IF;
END IF;
END PROCESS;
END ALGORITMO;