问题:
是否有更合适的"超类型" signed
和unsigned
比std_logic_vector
(关于我的情况)?
可以将输入定义为(子类型)整数,还是将其定义为位向量更好? (整数方法是否存在任何问题)
我应该何时对实体的输入/输出使用已解决或未解析的逻辑?
实际案例:
我宣布一个实体,并且想知道输入和输出的正确类型。 让我们假设我构建的动态宽度相等。它比较了两个输入的前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
比较器一样的端口,签名很重要,哪些可以有signed
和unsigned
输入。
因为我更容易将宽度定义为整数,所以我这样做了。
答案 0 :(得分:1)
std_logic_vector在您的情况下是一个不错的选择(在大多数情况下,在实体中,因为它最好地代表硬件情况......例如使用'U'和'Z'等等)
只要实体不是顶层实体,就可以在实体中使用整数。在顶级实体中,建议独占使用std_logic(_vector)。
大多数工具无论如何报告多驱动程序情况......因此,使用已解决的类型是可以的。
答案 1 :(得分:1)
是否有更适合的超级型#34;签名和未签名比 std_logic_vector(关于我的情况)?
不确定您的意思,但您别无选择 - 标准中定义了signed
和unsigned
。
将输入定义为(子类型)整数还是更好 将它定义为bitvector? (整数是否存在任何问题 的方法)
如果超出范围,整数将标记错误。向量(signed
和unsigned
)将环绕。这是"正确"取决于你想要什么,以及如果你想用整数编码显式环绕的感觉。
何时应该为输入/输出使用已解决或未解析的逻辑 关闭一个实体?
如果坚持:
您将能够在详细信息中捕获涉及信号上多个驱动程序的错误,并在详细信息时提供详细的错误消息。这可能比在模拟时追踪波形中的X
更好。
目前大多数技术内部都没有内部三态总线,因此您无法拥有多个驱动程序,因此设备内部无需解析信号。 IO引脚(几乎?)总是具有三态驱动器,因此使用已解析类型是合适的,并且驱动一个' Z'可用于推断该行为。