0

问题:

  1. 是否有比(关于我的情况)signed更合适的“超类型”?unsignedstd_logic_vector

  2. 可以将输入定义为整数(子类型)还是将其定义为位向量更好?(整数方法是否有任何问题)

  3. 我什么时候应该对实体的输入/输出使用已解决或未解决的逻辑?

    • 已解决总线驱动程序(因为“高 Z 驱动程序”),否则未解决?
    • 始终已解决,因此可以驱动/使用总线作为输入(这似乎是错误的,因为我什么时候会使用未解决的呢?)

实际案例:

我正在声明一个实体,并且想知道输入和输出的正确类型。假设我正在构建一个动态宽度相等。它比较两个输入的前 n 位是否相等。

实体定义将是:

entity comparisonDynWidth is
    generic(
        width       : positive;
        min_width   : positive;
            -- when the tools suport vhdl2008 enough
            -- reason for both signed/unsigned => std_logic inputs
        --function compareFunc (x: in std_logic_vector; y: in std_logic_vector)  return std_logic 
    );
    port (
        left, right : in  std_logic_vector(width-1 downto 0);
        widthControl: in  natural range 0 to width-min_width;
        result      : out std_logic / std_ulogic ??
    );

我选择 std_logic_vector 作为输入,因为我希望它看起来像一个通用less than比较器的端口,对于哪些符号很重要,哪些可以有signedunsigned输入。因为我更容易将宽度定义为我这样做的整数。

4

2 回答 2

1
  1. std_logic_vector 在您的情况下是一个不错的选择(在大多数情况下,在实体中,因为它最能代表硬件情况......例如使用“U”和“Z”等)

  2. 只要它不是顶级实体,就可以在实体中使用整数。在顶级实体中,建议独占使用 std_logic(_vector)。

  3. 无论如何,大多数工具都会报告多驱动程序的情况……因此可以使用已解析的类型。

于 2013-04-08T12:49:12.730 回答
1

有没有比 std_logic_vector 更合适的“超类型”签名和无符号(关于我的情况)?

不确定你的意思,但你别无选择 -signed并且unsigned在标准中定义。

可以将输入定义为整数(子类型)还是将其定义为位向量更好?(整数方法是否有任何问题)

如果超出范围,整数将标记错误。向量 (signedunsigned) 将环绕。哪个是“正确的”取决于您想要什么以及如果您想要使用整数编码显式环绕的感觉。

我什么时候应该对实体的输入/输出使用已解决或未解决的逻辑?

如果你坚持:

  • 仅对顶级 IO 端口使用已解析类型(即设备的实际引脚)
  • 在内部使用未解析的类型

您将能够在细化时通过详细的错误消息捕获涉及多个驱动程序的信号的错误。X这可能比在仿真时在波形中追踪s 更好。

如今,大多数技术内部都没有内部三态总线,因此您不能拥有多个驱动程序,因此设备内部不需要解析信号。IO 引脚(几乎?)总是具有三态驱动程序,因此使用已解析类型是合适的,并且“Z”的驱动可用于推断该行为。

于 2013-04-08T15:30:09.893 回答