gpt4 book ai didi

port - VHDL - 端口映射 - 将组件的不同端口映射到不同的实体

转载 作者:行者123 更新时间:2023-12-04 22:50:50 28 4
gpt4 key购买 nike

我已经在一个 VHDL 项目上工作了几个星期,并且在功能方面一切都进行得非常顺利。我可以对我的 DE0-nano FPGA 开发板进行仿真和编程,以检查我正在做的事情是否有效,并且确实有效。但是,随着项目的快速扩展,我开始担心源代码的可读性。

就我的经验而言,我是一名电子工程专业的大学生,并且已经学习了许多电子类(class),但我对 VHDL 完全是个菜鸟。 (虽然我可以说我对 VHDL 的了解在过去几周里有了很大的增长)

问题:

我的问题是我有几个组件,我想将它们的端口单独映射到不同的高级实体中。假设您有一个 adder.vhd,那么我想提供来自operandA.vhd 的操作数A 和来自operandB.vhd 的操作数B,这意味着我想将adder.vhd 的端口A 映射到operandA.vhd,并将 adder.vhd 的端口 B 放入operandB.vhd。

我目前使用的解决方案是按照实体的层次顺序映射信号,如果operandB.vhd 完全隐藏在operandA.vhd 之外的另一个级别,我将信号一直映射到最高级别的实体这是必需的,然后返回到 adder.vhd,在单个端口映射中同时指定端口 A 和 B,我认为这是必需的。

但是,我发现这个解决方案非常困惑,因为它在我的高级实体中积累了仅用于路由目的的信号。更重要的是,继续 adder.vhd 类比,我希望几个实体提供操作数 A 或 B(在不同的时间,我不会在相同的输入端口上驱动不同的值)所以应用当前的解决方案意味着我'也会有许多近乎重复的作业。

还有其他解决方案吗?我找不到任何关于此的文档,我担心这是语言的硬约束,但我可能不知道嘎嘎,因为我刚刚开始 VHDL。

这也可能是我的设计错误,因为我更习惯于实际的电子设计而不是 VHDL 电路描述。将一个组件的端口连接到一堆其他不同的组件是很自然的,但可能不是 VHDL 的工作方式。

说明性框图:

我目前在做什么:http://i.stack.imgur.com/CJVjg.gif
enter image description here

我想做的事:http://i.stack.imgur.com/hrNwF.gif
enter image description here

示例代码:

--  ********************************************
--
-- TOP-LEVEL ENTITY, in a file topLevel.vhd

entity topLevel is
port
(
-- Any ports, not useful for the problem at hand
);
end entity topLevel ;

architecture topLevel_Architecture of topLevel is

-- HERE : I have to accumulate signals just to get my data from the two subEntityA & B to computeFromAB.
--
-- I can't just map subEntityA and subEntityB as low-level entites into computeFromAB, as they provide data
-- that I need elsewhere in the circuit. Well, I could do that but then I'd still have to get the "otherSignalFromX"
-- through the same method.
--
-- I'd rather directly map SEPARATELY (if that's possible)
-- - operandA & operandB into computeFromAB
-- - otherSignalFromA & otherSignalFromB into topLevel

-- The signals I use to get my data from subEntityA and subEntityB to computeFromAB
SIGNAL operandA : std_logic_vector(7 downto 0) := ( others => '0' ) ;
SIGNAL operandB : std_logic_vector(7 downto 0) := ( others => '0' ) ;

-- Other signals that I do not need to get to computeFromAB
SIGNAL otherSignalFromA : std_logic ;
SIGNAL otherSignalFromB : std_logic ;

begin

-- PORT MAP : subEntityA.vhd
subEntityA : entity work.subEntityA
PORT MAP(
-- The first signal I'd like to get through to computeFromAB
operandA => operandA,
-- Other signals
otherSignalFromA => otherSignalFromA
);

-- PORT MAP : subEntityB.vhd
subEntityB : entity work.subEntityB
PORT MAP(
-- The second signal I'd like to get through to computeFromAB
operandB => operandB,
-- Other signals
otherSignalFromB => otherSignalFromB
);

-- PORT MAP : computeFromAB.vhd
computeFromAB : entity work.computeFromAB
PORT MAP(
-- The "useful" signals
operandA => operandA,
operandB => operandB
);


-- PROCESSES, ETC, OF TOPLEVEL ENTITY

end topLevel_Architecture ;



-- ********************************************
--
-- OPERAND A ENTITY, in a file subEntityA.vhd

entity subEntityA is
port
(
-- The first signal I'd like to get through to computeFromAB
operandA : OUT std_logic_vector(7 downto 0)
-- Other signals
otherSignalFromA : OUT std_logic ;
);
end entity subEntityA ;

-- ARCHITECTURE, PROCESSES OF subEntityA



-- ********************************************
--
-- OPERAND B ENTITY, in a file subEntityB.vhd

entity subEntityB is
port
(
-- The second signal I'd like to get through to computeFromAB
operandB : OUT std_logic_vector(7 downto 0)
-- Other signals
otherSignalFromB : OUT std_logic ;
);
end entity subEntityB ;

-- ARCHITECTURE, PROCESSES OF subEntityB


-- ********************************************
--
-- COMPUTATION FROM OPERANDS A & B ENTITY, in a file computationFromAB.vhd

entity computeFromAB is
port
(
operandA : IN std_logic_vector(7 downto 0) ;
operandB : IN std_logic_vector(7 downto 0)
);

-- ARCHITECTURE, PROCESSES OF computeFromAB

感谢阅读,感谢您提供的任何意见。

编辑 1:感谢您删除“字典”标签,不知道它为什么在那里。

编辑 2:添加了一些示例代码,但我不确定它是否有帮助

编辑 3:添加说明性框图

最佳答案

为什么不直接包装实体 一个 + + 计算来自Ab 共同创造实体AB .然后路由其他信号A 其他信号B 通过顶层进入实体C .这个想法是创建整洁的子模块来包装和隐藏其他模块。如果您以后需要复制一些逻辑,这也很有帮助。

可能是信号和设计变得有点复杂,但这通常表明最初的想法过于复杂。因此,每当您对自己的代码感到困惑时,就是时候回到笔和纸上,重新思考您实际想要完成的事情;)

同样在某些时候,您不再确定某些信号来自哪里以及应该去哪里。那是你诅咒你的信号命名约定的时候——如果你有的话——并想出一些更合理的东西。

将 100 多个模块添加到您的顶级实体中,您就会开始了解顶级集成商在项目中的感受以及为什么其中一些人有严重的心理问题。

关于port - VHDL - 端口映射 - 将组件的不同端口映射到不同的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35973784/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com