R
rajan
Guest
Dear colleagues,
I have a LUT (look-up-table) designed as an array (of switch cells) with the
GENERATE statement. I would like to know if there is any other method, which
is better than the method I applied below. However, the synthesis of the
code below doesn´t give a problem, but I want to know if we can improve it
further, or can put it another way.
ENTITY lut_cells IS
PORT (w_lut : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
en_lut: OUT STD_LOGIC_VECTOR (4 DOWNTO 0);
s_zero : IN STD_LOGIC);
END lut_cells;
ARCHITECTURE rtl OF lut_cells IS
TYPE store_t IS ARRAY (0 TO 4) OF STD_LOGIC_VECTOR (0 TO 7);
CONSTANT map_sig: store_t :=
("1001000",
"1101100",
"1111110",
"1111110");
TYPE en_store IS ARRAY (0 TO 4) OF STD_LOGIC_VECTOR (0 TO 7);
SIGNAL fec_map: en_store;
SIGNAL wire : STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
--------------- switch cells ------------------
enables:
FOR i IN 4 DOWNTO 0 GENERATE
switches:
FOR j IN 7 DOWNTO 0 GENERATE
switch_s0 :
IF map_sig(i)(j) = '0' GENERATE
s0 : sw1 PORT MAP (
D0 => s_zero,
D1 => wire(j),
Z => fec_map(i)(j));
END GENERATE switch_s0;
switch_s1 :
IF map_sig(i)(j) = '1' GENERATE
s1 : sw2 PORT MAP (
D0 => s_zero,
D1 => wire(j),
Z => fec_map(i)(j)
);
END GENERATE switch_s1;
END GENERATE;
-- enables --
en_lut(i) <= fec_map(i)(0) OR fec_map(i)(1) OR fec_map(i)(2) OR
fec_map(i)(3)
OR fec_map(i)(4) OR fec_map(i)(5) OR
fec_map(i)(6) OR fec_map(i)(7) ;
END GENERATE;
END rtl;
I have a LUT (look-up-table) designed as an array (of switch cells) with the
GENERATE statement. I would like to know if there is any other method, which
is better than the method I applied below. However, the synthesis of the
code below doesn´t give a problem, but I want to know if we can improve it
further, or can put it another way.
ENTITY lut_cells IS
PORT (w_lut : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
en_lut: OUT STD_LOGIC_VECTOR (4 DOWNTO 0);
s_zero : IN STD_LOGIC);
END lut_cells;
ARCHITECTURE rtl OF lut_cells IS
TYPE store_t IS ARRAY (0 TO 4) OF STD_LOGIC_VECTOR (0 TO 7);
CONSTANT map_sig: store_t :=
("1001000",
"1101100",
"1111110",
"1111110");
TYPE en_store IS ARRAY (0 TO 4) OF STD_LOGIC_VECTOR (0 TO 7);
SIGNAL fec_map: en_store;
SIGNAL wire : STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
--------------- switch cells ------------------
enables:
FOR i IN 4 DOWNTO 0 GENERATE
switches:
FOR j IN 7 DOWNTO 0 GENERATE
switch_s0 :
IF map_sig(i)(j) = '0' GENERATE
s0 : sw1 PORT MAP (
D0 => s_zero,
D1 => wire(j),
Z => fec_map(i)(j));
END GENERATE switch_s0;
switch_s1 :
IF map_sig(i)(j) = '1' GENERATE
s1 : sw2 PORT MAP (
D0 => s_zero,
D1 => wire(j),
Z => fec_map(i)(j)
);
END GENERATE switch_s1;
END GENERATE;
-- enables --
en_lut(i) <= fec_map(i)(0) OR fec_map(i)(1) OR fec_map(i)(2) OR
fec_map(i)(3)
OR fec_map(i)(4) OR fec_map(i)(5) OR
fec_map(i)(6) OR fec_map(i)(7) ;
END GENERATE;
END rtl;