Poniższy "kod" wciąga mi 76 makroceli w CPLD, dlaczego tak się dzieje? Praktycznie to są 2 multipleksery, jeden licznik 17 bitowy i rejestr przesuwny też 17 bitowy, wydawało mi się że max. ok 40 makrocel pujdzie a tu taka niespodzianka.
entity main is
Port (
M_CLK : in STD_LOGIC; DATA_CLK : in STD_LOGIC; DATA_IN: in STD_LOGIC; MEM_C : in STD_LOGIC; DIAG0 : out STD_LOGIC; ADDR_1: out STD_LOGIC_VECTOR (16 downto 0); ADDR_2: out STD_LOGIC_VECTOR (16 downto 0); DATA_1: inout STD_LOGIC_VECTOR (7 downto 0); DATA_2: inout STD_LOGIC_VECTOR (7 downto 0); DATA_OUT: out STD_LOGIC_VECTOR (7 downto 0) );
end main;
architecture Behavioral of main is
signal counter: STD_LOGIC_VECTOR (16 downto 0); signal addr_shift_reg: STD_LOGIC_VECTOR (16 downto 0);
begin
ADDR_1 <= counter when MEM_C='1' else addr_shift_reg; ADDR_2 <= counter when MEM_C='0' else addr_shift_reg; DATA_OUT <= DATA_1 when MEM_C='1' else DATA_2;
process(M_CLK) begin
if (M_CLK'event and M_CLK='1') then counter<=counter+1; end if;
end process;
process(DATA_CLK) begin
if (DATA_CLK'event and DATA_CLK='1') then
addr_shift_reg<=addr_shift_reg(15 downto 0)&DATA_IN;
end if;
end process;
end Behavioral;