似乎世界已经决定了std_logic
(和std_logic_vector
)是表示VHDL中位的默认方式。替代方法是std_ulogic
,但无法解决。
这让我感到惊讶,因为通常情况下,您不是在描述公共汽车,所以您不需要多个驱动程序,也不需要解析信号。这样做的好处std_ulogic
是,如果您有多个驱动程序,编译器会提前警告您。
问题:这仅仅是文化/历史问题,还是使用std_logic的技术原因?
似乎世界已经决定了std_logic
(和std_logic_vector
)是表示VHDL中位的默认方式。替代方法是std_ulogic
,但无法解决。
这让我感到惊讶,因为通常情况下,您不是在描述公共汽车,所以您不需要多个驱动程序,也不需要解析信号。这样做的好处std_ulogic
是,如果您有多个驱动程序,编译器会提前警告您。
问题:这仅仅是文化/历史问题,还是使用std_logic的技术原因?
Answers:
Std_logic是std_ulogic的子类型,并且恰好具有一个额外的属性:如果有多个驱动程序,则可以解决。
无论采用哪种惯例,std_ulogic都是用于需要9值逻辑的未解析信号的正确类型。(通常,使用“位”甚至更正确-例如,在某些没有“ X”或“ U”之类的FPGA体系结构上)。
基本上,最好的办法是为作业使用正确的类型。人们往往会在模仿别人看到的别人惯用的风格时散布坏习惯,却不理解为什么。
我的历史是这样的:
我一直(大约在1999 IIRC时)就开始使用std_ulogic*
-出于您所描述的原因,这是正确的做法。
然后,我必须连接到一堆向导生成的供应商IP,这些IP std_logic
在整个接口上都有。这意味着在端口映射(用于_vector
元素)上进行了转换,我变得懒惰并转移到using std_logic*
。
但是,我似乎很少犯“双重驱动”错误,因此我没有std_ulogic
像我想的那样错过太多。drivers
当我偶尔需要时,Modelsim的命令使查找“谁在驾驶什么”变得非常容易。
*vector
端口部分仍然需要转换
我知道它的ppt幻灯片彩色非常可怕,但是它可以很好地说明区别: