Line 23... |
Line 23... |
|
|
--! Libreria de definicion de senales y tipos estandares, comportamiento de operadores aritmeticos y logicos.\n Signal and types definition library. This library also defines
|
--! Libreria de definicion de senales y tipos estandares, comportamiento de operadores aritmeticos y logicos.\n Signal and types definition library. This library also defines
|
library ieee;
|
library ieee;
|
--! Paquete de definicion estandard de logica. Standard logic definition pack.
|
--! Paquete de definicion estandard de logica. Standard logic definition pack.
|
use ieee.std_logic_1164.all;
|
use ieee.std_logic_1164.all;
|
|
--! Se usaran en esta descripcion los componentes del package arithpack.vhd.\n It will be used in this description the components on the arithpack.vhd package.
|
|
use work.arithpack.all;
|
|
|
--! La entidad opcoder es la etapa combinatoria que decodifica la operacion que se va a realizar.
|
--! La entidad opcoder es la etapa combinatoria que decodifica la operacion que se va a realizar.
|
|
|
--! \n\n
|
--! \n\n
|
--! Las entradas a esta descripción son: los vectores A,B,C,D, las entradas opcode y addcode. Las salidas del decodificador, estarán conectadas a las entradas de los 6 multiplicadores de una entidad uf. Los operandos de los multiplicadores, también conocidos como factores, son las salida m0f0, m0f1 para el multiplicador 1 y así hasta el multiplicador 5. Básicamente lo que opera aquí en esta descripción es un multiplexor, el cual selecciona a través de opcode y addcode qué componentes de los vectores se conectaran a los operandos de los multiplicadores.
|
--! Las entradas a esta descripción son: los vectores A,B,C,D, las entradas opcode y addcode. Las salidas del decodificador, estarán conectadas a las entradas de los 6 multiplicadores de una entidad uf. Los operandos de los multiplicadores, también conocidos como factores, son las salida m0f0, m0f1 para el multiplicador 1 y así hasta el multiplicador 5. Básicamente lo que opera aquí en esta descripción es un multiplexor, el cual selecciona a través de opcode y addcode qué componentes de los vectores se conectaran a los operandos de los multiplicadores.
|
entity opcoder is
|
entity opcoder is
|
|
generic (
|
|
fastmux : string:= "NO"
|
|
)
|
port (
|
port (
|
Ax,Bx,Cx,Dx,Ay,By,Cy,Dy,Az,Bz,Cz,Dz : in std_logic_vector (17 downto 0);
|
Ax,Bx,Cx,Dx,Ay,By,Cy,Dy,Az,Bz,Cz,Dz : in std_logic_vector (17 downto 0);
|
m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : out std_logic_vector (17 downto 0);
|
m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : out std_logic_vector (17 downto 0);
|
|
|
opcode,addcode : in std_logic
|
opcode,addcode : in std_logic
|
Line 50... |
Line 55... |
--! \n\n
|
--! \n\n
|
--! Por ejemplo para ver la tabla de verdad del m0f0, consultar el registro (línea) m0 y el atributo (columna) f0.\n
|
--! Por ejemplo para ver la tabla de verdad del m0f0, consultar el registro (línea) m0 y el atributo (columna) f0.\n
|
|
|
architecture opcoder_arch of opcoder is
|
architecture opcoder_arch of opcoder is
|
|
|
|
signal aycy,bzdz,azcz,bydy,bxdx,axcx: std_logic_vector(17 downto 0);
|
|
|
begin
|
begin
|
--! Proceso que describe las 2 etapas de multiplexores.
|
--! Proceso que describe las 2 etapas de multiplexores.
|
--! Proceso que describe las 2 etapas de multiplexores. Una corresponde al selector addcode, que selecciona con que operadores realizará la operación producto cruz, es decir, seleccionará si realiza la operación AxB ó CxD. En el caso del producto punto, esta etapa de multiplexación no tendrá repercusión en el resultado de la deocdificación de la operación. La otra etapa utiliza el selector opcode, el cual decide si usa los operandos decodificados en la primera etapa de multiplexores, en el caso de que opcode sea 1, seleccionando la operación producto cruz, o por el contrario seleccionando una decodificación de operadores que lleven a cabo la operación producto punto.
|
--! Proceso que describe las 2 etapas de multiplexores. Una corresponde al selector addcode, que selecciona con que operadores realizará la operación producto cruz, es decir, seleccionará si realiza la operación AxB ó CxD. En el caso del producto punto, esta etapa de multiplexación no tendrá repercusión en el resultado de la deocdificación de la operación. La otra etapa utiliza el selector opcode, el cual decide si usa los operandos decodificados en la primera etapa de multiplexores, en el caso de que opcode sea 1, seleccionando la operación producto cruz, o por el contrario seleccionando una decodificación de operadores que lleven a cabo la operación producto punto.
|
|
|
|
originalMuxGen:
|
|
if fastmux="NO" generate
|
|
|
procOpcoder:
|
procOpcoder:
|
process (Ax,Bx,Cx,Dx,Ay,By,Cy,Dy,Az,Bz,Cz,Dz,opcode,addcode)
|
process (Ax,Bx,Cx,Dx,Ay,By,Cy,Dy,Az,Bz,Cz,Dz,opcode,addcode)
|
variable scoder : std_logic_vector (1 downto 0);
|
variable scoder : std_logic_vector (1 downto 0);
|
begin
|
begin
|
scoder := opcode & addcode;
|
scoder := opcode & addcode;
|
Line 107... |
Line 117... |
|
|
|
|
|
|
|
|
end process procOpcoder;
|
end process procOpcoder;
|
|
end generate originalMuxGen;
|
|
fastMuxGen:
|
|
if fastmux="YES" generate
|
|
mux0 : fastmux (ay,cy,addcode,aycy);
|
|
mux1 : fastmux (bz,dz,addcode,bzdz);
|
|
mux2 : fastmux (az,cz,addcode,azcz);
|
|
mux3 : fastmux (by,dy,addcode,bydy);
|
|
mux4 : fastmux (bx,dx,addcode,bxdx);
|
|
mux5 : fastmux (ax,cx,addcode,axcx);
|
|
|
|
-- Segunda etapa de multiplexores
|
|
muxa : fastmux (ax,aycy,opcode,m0f0);
|
|
muxb : fastmux (bx,bzdz,opcode,m0f1);
|
|
muxc : fastmux (ay,azcz,opcode,m1f0);
|
|
muxd : fastmux (by,bydy,opcode,m1f1);
|
|
muxe : fastmux (az,azcz,opcode,m2f0);
|
|
muxf : fastmux (bz,bxdx,opcode,m2f1);
|
|
muxg : fastmux (cx,axcx,opcode,m3f0);
|
|
muxh : fastmux (dx,bzdz,opcode,m3f1);
|
|
muxi : fastmux (cy,axcx,opcode,m4f0);
|
|
muxj : fastmux (dy,bydy,opcode,m4f1);
|
|
muxk : fastmux (cz,aycy,opcode,m5f0);
|
|
muxl : fastmux (dz,bxdx,opcode,m5f1);
|
|
end generate
|
|
|
|
|
end opcoder_arch;
|
end opcoder_arch;
|
|
|
No newline at end of file
|
No newline at end of file
|