VHDL 中的条件端口映射

问题描述 投票:0回答:1

由于我是 VHDL 新手,因此我很乐意帮助我解决这个坏男孩问题。 我将实现一个我不知道是否可能的逻辑。 假设我要实例化 10 个处理器。

entity Processor is
    Port (
        Input : in integer;
        -- other ports
        );
end Processor;

architecture Behavioral of Processor is
    -- architecture implementation
begin
    -- processor logic here
end Behavioral;

我的处理器有一个整数输入,我必须将其分配给端口映射字段中的信号 但我希望它是有条件的。 如果满足条件,则将信号处理器的输入加10。 如果不满足条件,请包含信号 20。

ENTITY Interconnection_Network IS
END Interconnection_Network;

ARCHITECTURE Behavioral OF Interconnection_Network IS
    signal Condition : boolean := true;

    COMPONENT Processor IS

        PORT (
            
            input : IN INTEGER;
            -- other ports
        );
    END COMPONENT;


BEGIN

    Processor_Gen : FOR proc IN 0 TO 9 GENERATE
        Processor_Instance : Processor
       
        PORT MAP(
          if <condition> then
            input => 10;
        else
            input =>20;
        );
    END GENERATE Processor_Gen;
END Behavioral;

我该怎么做?

这些行不通

ENTITY Interconnection_Network IS
END Interconnection_Network;

ARCHITECTURE Behavioral OF Interconnection_Network IS
    signal Condition : boolean := true;

    COMPONENT Processor IS
        PORT (
            input : IN INTEGER
        );
    END COMPONENT;

BEGIN
    Processor_Gen : FOR proc IN 0 TO 5 GENERATE
        Processor_Instance : Processor
        PORT MAP(
            input => (IF Condition THEN 10 ELSE 20 END IF)
        );
    END GENERATE Processor_Gen;
END Behavioral;

ENTITY Interconnection_Network IS
END Interconnection_Network;

ARCHITECTURE Behavioral OF Interconnection_Network IS
    signal Condition : boolean := true;

    COMPONENT Processor IS
        PORT (
            input : IN INTEGER
        );
    END COMPONENT;

    signal InputValue : INTEGER;

BEGIN
    Processor_Gen : FOR proc IN 0 TO 5 GENERATE
        PROCESS
        BEGIN
            IF Condition THEN
                InputValue <= 10;
            ELSE
                InputValue <= 20;
            END IF;
        END PROCESS;

        Processor_Instance : Processor
        PORT MAP(
            input => InputValue
        );
    END GENERATE Processor_Gen;
END Behavioral;

vhdl hardware
1个回答
0
投票

在最后一种情况下,每个生成都需要一个唯一的信号 - 这可以通过在生成声明区域中声明它来完成:

ARCHITECTURE Behavioral OF Interconnection_Network IS
    signal Condition : boolean := true;

    COMPONENT Processor IS
        PORT (
            input : IN INTEGER
        );
    END COMPONENT;


BEGIN
    Processor_Gen : FOR proc IN 0 TO 5 GENERATE
         signal InputValue : INTEGER;
    BEGIN
        PROCESS
        BEGIN
            IF Condition THEN
                InputValue <= 10;
            ELSE
                InputValue <= 20;
            END IF;
        END PROCESS;

        Processor_Instance : Processor
        PORT MAP(
            input => InputValue
        );
    END GENERATE Processor_Gen;
END Behavioral;

或者,由于这是一个常量值,您可能应该将其作为通用值而不是端口来执行。泛型是常量,允许在其输入上使用表达式。虽然目前没有 VHDL 语法可以做到这一点,但您可以调用自己的函数,这将是:

        Processor_Instance : Processor
        GENERIC MAP(
            input => InputValue
        )
        PORT MAP(
            ...
        );
© www.soinside.com 2019 - 2024. All rights reserved.