![]() |
1
1
我将您的示例代码称为1、2、3和4。 1)例1是正确的。这是一种可行的方法,以一种分层的方式连接端口。 2)确保您会有编译/合成错误,特别是输出端口的编译/合成错误。 实际上,您将有多个驱动程序(实例化组件的每个输出端口)影响顶级实体的同一个信号/端口。在模拟中也很容易看到,因为您将看到在该端口出现“X”(表示同一信号有多个驱动程序)。请注意,多个输入端口可以连接到单个驱动程序(例如,顶部实体的相同输入端口、相同信号等) 3)部分正确!您遇到了与示例2中相同的问题,即多个驱动程序作用于同一信号。 4)这绝对是错误的!。您没有定义要绑定到的端口或信号 实体更改后更新: 1)仍然正确,实体端口可以用这种方式作为(隐式)信号。您可以将顶部实体想象为2个子组件的容器,其中您将组件的管脚“焊接”到顶部实体/容器的管脚(焊接材料提供了电气连续性) 2)当inout端口用作输入时,这可能是正常的,但当您尝试将其用作输出时,可能会出现问题。对于如何描述它们的组件有很大的依赖性。如果组件使用弱逻辑值('L'&'H'),那么如果驱动强逻辑值('0'&'1'),那么它可能表现正常。最好使用中间信号端(可能是某种mux/demux)来选择/引导数据到/从适当的内部组件。 3)从纯互连的角度来看,这是可以的。但是,从功能的角度来看,您必须确保始终有一个组件作为驱动程序,另一个组件作为接收器。否则,您将在内部信号上有未定义的值,或者由于多个驱动程序而有“X”。但是,对于地址信号,没有人在驱动它,所以它总是“U”(未定义)。你需要一些东西(顶级实体中的端口、进程等)这个si驱动某种类型的值。 4)和以前一样,这是不正确的。组件的端口未连接到任何内容。请注意,VHDL(但对verilog同样有效)是 描述 语言;你试着描述一个实际的电路(就像一个电路板上的芯片)。就像在实际电路中,你需要某种电线将芯片的一个管脚连接到另一个集成电路的另一个管脚,然后在VHDL/verilog中,你需要一个等效的“对象”来实现互连。因此,你需要定义这个对象(在这种情况下是信号),然后描述它的行为(在这种情况下,将两个组件的两个端口绑定在一起)。 我希望这次能清楚一点 |