为什么要使用 std_logic 而不是 std_ulogic 来进行植入?

问题描述 投票:0回答:1

我知道

std_logic
std_ulogic
的解析子类型,并允许您通过多个源驱动信号。

如果我理解正确的话,即使使用

std_logic
也无法实现包含多个驱动程序的设计。因此,出于实施目的,
std_logic
std_ulogic
没有优势。

当仿真包含多个驱动器的设计时,使用

std_ulogic
会报错,但使用
std_logic
没问题,并且多驱动信号的值根据驱动器的值确定。

我有点理解,当您只想模拟设计时,使用解析类型可能有一些优势,但我认为在实现设计时没有任何理由使用

std_logic
而不是
std_ulogic

如果我误解了什么,请纠正我,有人可以解释为什么

std_logic
更常用吗?

vhdl fpga
1个回答
0
投票

IEEE标准VHDL语言参考手册(Std 1076-2008)说:

G.2.11 使用 STD_ULOGIC 与 STD_LOGIC

在决定使用已解析信号还是未解析信号类型时,需要考虑许多因素:

a) 使用解析类型时模拟器的运行速度是否比使用未解析类型时慢,或者模拟器是否针对 STD_LOGIC 数据类型进行了优化?
b) 一个信号有多少个来源?

按顺序考虑每一项,如下:

在没有其他考虑的情况下,未解析信号类型和已解析信号类型之间的选择应取决于信号是仅具有一个源,还是具有多个源。在前一种情况下,标量信号应为 STD_ULOGIC 类型,因为在分析或阐述期间可以检测到多个源的无意连接。同样,出于同样的原因,矢量信号应为 STD_ULOGIC_VECTOR 类型。在后一种情况下,标量信号应为 STD_LOGIC 类型,矢量信号应为 STD_LOGIC_VECTOR 类型。

同样的注意事项也适用于端口,无论端口连接的实际信号如何。输入端口可以是未解析的或已解析的类型,因为源问题不相关。具有一个内部源的输出或双向端口应为 STD_ULOGIC 或 STD_ULOGIC_VECTOR 类型。具有多个内部源的输出或双向端口应为 STD_LOGIC 或 STD_LOGIC_VECTOR 类型。解析内部源贡献的值以确定端口驱动的值。由于STD_LOGIC是STD_ULOGIC的子类型,因此这些类型的端口和信号可以自由互连。同样,由于 STD_LOGIC_VECTOR 是 STD_ULOGIC_VECTOR 的子类型,因此这些向量类型的端口和信号可以自由互连。

因此,强烈建议尽可能使用

STD_ULOGIC

经常使用

STD_LOGIC
最可能的原因是懒惰。开发人员,尤其是初学者,往往会想得不够多。第二个最可能的原因是缺乏知识。

其他语言也一样。 C 程序懒惰地使用

int
float
,只是因为方便。

无论如何,你早点犯错的想法是正确的。然而,与往常一样,现实是另一头野兽。我希望有一个警告选项来标记不必要的

STD_LOGIC
使用。

© www.soinside.com 2019 - 2024. All rights reserved.