似乎世界已经决定了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幻灯片彩色非常可怕,但是它可以很好地说明区别: