什么时候使用什么类型

时间:2013-04-08 10:22:26

标签: vhdl

问题:

  1. 是否有更合适的"超类型" signedunsignedstd_logic_vector(关于我的情况)?

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

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

    • 解决了公交车司机(因为"高Z驾驶员")否则未解决?
    • 总是解决所以总线可以被驱动/用作输入(这似乎是错误的,因为我什么时候才能使用未解决的?)
  4. 实际案例:

    我宣布一个实体,并且想知道输入和输出的正确类型。 让我们假设我构建的动态宽度相等。它比较了两个输入的前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输入。 因为我更容易将宽度定义为整数,所以我这样做了。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

  

是否有更适合的超级型#34;签名和未签名比   std_logic_vector(关于我的情况)?

不确定您的意思,但您别无选择 - 标准中定义了signedunsigned

  

将输入定义为(子类型)整数还是更好   将它定义为bitvector? (整数是否存在任何问题   的方法)

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

  

何时应该为输入/输出使用已解决或未解析的逻辑   关闭一个实体?

如果坚持:

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

您将能够在详细信息中捕获涉及信号上多个驱动程序的错误,并在详细信息时提供详细的错误消息。这可能比在模拟时追踪波形中的X更好。

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