Использование generi c для типа в объекте порта в VHDL 93 - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть тип, объявленный в пакете, который я использую в сущности порта:

Пакет:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

package ports_type is
    constant N: positive := 3;
    type t_ports_types is array(0 to N-1) of std_logic_vector (N-1 downto 0);    
end package ports_type;

Модуль:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.ports_type.all;

entity ports is
    generic (
        N : positive := 3
    );
    port(
        inp     : in t_ports_types;
        outp    : out std_logic_vector(N-1 downto 0)
    );
end ports;

architecture Behavioral of ports is

begin

    process(inp)
        variable result : std_logic;
    begin
        for y in 0 to N-1 loop
            result := '0';
            for x in 0 to N-1 loop
                result := result or inp(x)(y);
            end loop;
            outp(y) <= result;
        end loop;
    end process; 

end Behavioral;

Проблема заключается в что мне нужно вручную изменить значение N в пакете, что является проблемой, если я хочу создать экземпляр объекта портов в другом модуле, например:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.ports_type.all;

entity ports_top is
    generic (
        N : positive := 3
    );
    Port ( 
        A       : in std_logic_vector(N-1 downto 0);
        B       : in std_logic_vector(N-1 downto 0);
        C       : in std_logic_vector(N-1 downto 0);
        Outp    : out std_logic_vector(N-1 downto 0)
    );
end ports_top;

architecture Behavioral of ports_top is

    signal s_ports : t_ports_types;

begin

    s_ports(0) <= A;
    s_ports(1) <= B;
    s_ports(2) <= C;

    ports_0: entity work.ports(Behavioral)
        generic map (
            N => N
        )
        port map(
            inp => s_ports,
            outp => Outp
        );

end Behavioral;

Цель состоит в том, чтобы изменить только N в верхнем модуле, а не в упаковке. Это возможно с vhdl'93? Спасибо за помощь.

...