由于我是 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;
在最后一种情况下,每个生成都需要一个唯一的信号 - 这可以通过在生成声明区域中声明它来完成:
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(
...
);