Mi circuito tiene una cuadrícula de 32 x 8 D flip flops. cada fila debe producir un vector de 32 bits que contenga los valores Q de los D-ff's, que luego se envían a un MUX 8x1. El siguiente código es cuando intento generar correctamente las chancletas D de 32 x 8 y probar si puedo obtener un vector de ellas (el vector I0 de 32 bits).
el circuito para el que estoy tratando de escribir la implementación se puede ver en la figura publicada en esta pregunta: enlace
library ieee;
use ieee.std_logic_1164.all;
entity REG is
port (
CLK : in std_logic;
WRT_REG_NUM : in std_logic_vector(2 downto 0);
WRT_DATA : in std_logic_vector(31 downto 0);
READ_REG_A : in std_logic_vector(2 downto 0);
READ_REG_B : in std_logic_vector(2 downto 0);
PORT_A : out std_logic_vector(31 downto 0);
PORT_B : out std_logic_vector(31 downto 0)
);
end REG;
architecture BEHV_32x8_REG of REG is
-- decoder component
component DCDR
port (
I_in : in std_logic_vector(2 downto 0);
O_out : out std_logic_vector(7 downto 0)
);
end component;
-- D flip flop component
component D_FF
port (
D_in : in std_logic;
CLK : in std_logic;
Q_out : out std_logic;
QN_out : out std_logic -- Q not
);
end component;
-- MUX copmonent
component MUX
port (
S_in : in std_logic_vector(2 downto 0);
I7, I6, I5, I4, I3, I2, I1, I0 : in std_logic_vector(31 downto 0);
O_out : out std_logic_vector(31 downto 0)
);
end component;
-- internal signals used
signal I_in : std_logic_vector(2 downto 0);
signal O_out : std_logic_vector(7 downto 0);
signal CLK_vals : std_logic_vector(7 downto 0);
signal I0 : std_logic_vector(31 downto 0);
signal QN_out : std_logic_vector(31 downto 0);
begin
-- decoder instance
DCDR1 : DCDR port map(I_in, O_out);
GEN_D_FF1:
for ROW in 0 to 7 generate
GEN_D_FF2:
for COL in 0 to 31 generate
DFF_X : D_FF port map(WRT_DATA(COL), CLK_vals(ROW), I0(COL), QN_out(COL));
end generate GEN_D_FF2;
end generate GEN_D_FF1;
DCDR_AND : process
begin
I_in <= WRT_REG_NUM;
for I in 0 to 7 loop
CLK_vals(I) <= O_out(I) and CLK;
end loop;
wait for 10 ns;
end process DCDR_AND;
end BEHV_32x8_REG;
EDITAR: agregar una captura de pantalla de una ejecución de simulación
Cuando simulo el código anterior en ModelSim, no obtengo ningún resultado para I0. ¿Dónde está mi diseño defectuoso? ¿Estoy violando alguna de las mejores prácticas de VHDL? Suponiendo que puedo lograr que esto funcione correctamente, ¿cómo podría obtener 8 vectores de 32 bits diferentes (de cada fila de flip flops) para enviarlos a los MUX?
¡Aprecio cualquier consejo que reciba!