何时在VHDL中通过BIT使用STD_LOGIC


9

使用之间有什么区别:

ENTITY MyDemo is 
    PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo; 

ENTITY MyDemo is 
    PORT(X: IN BIT; F: OUT BIT );
END MyDemo; 

在STD_LOGIC上使用BIT有什么限制,反之亦然?他们完全可以互换吗?我知道,如果定义了STD_LOGIC,则无法将其与BIT_Vector一起使用来访问数组中的元素。但我似乎看不出有什么区别。


Answers:


9

Bit预定义类型,只能具有0或值1。的Bit类型是一种理想化的值。

type Bit is ('0', '1');

std_logicstd_logic_1164软件包的一部分,可在数字系统内提供更逼真的信号建模。它可以具有九个不同的值。通常,你的代码中,将只使用01Z(高Z)。但是,在测试平台中对系统建模时,U(未初始化)和X(未知)也非常有用。

    -------------------------------------------------------------------    
    -- logic state system  (unresolved)
    -------------------------------------------------------------------    
    TYPE std_ulogic IS ( 'U',  -- Uninitialized
                         'X',  -- Forcing  Unknown
                         '0',  -- Forcing  0
                         '1',  -- Forcing  1
                         'Z',  -- High Impedance   
                         'W',  -- Weak     Unknown
                         'L',  -- Weak     0       
                         'H',  -- Weak     1       
                         '-'   -- Don't care
                       );

--    attribute ENUM_ENCODING of std_ulogic : type is "U D 0 1 Z D 0 1 D";

    -------------------------------------------------------------------    
    -- *** industry standard logic type ***
    -------------------------------------------------------------------    
    SUBTYPE std_logic IS resolved std_ulogic;

std_logic_1164软件包还提供了转换功能以转换std_logicBit


5

大多数人使用std_logic。这允许u(未定义),x(未知)和z(高阻抗),而该位不允许。尽管您可能永远不会在芯片中处于三态,因此不需要zu对于查找丢失的复位很有用。x对于查找多个驱动程序很有用。


7
我认为您提到X查找多个驱动程序的有用性很有趣。std_logic确实是VHDL的行业标准类型,但它也是VHDL最被滥用的功能之一。std_logic是一个已解析的信号,这意味着在有多个驱动器的情况下,可以使用一个函数来解析信号的值。但是在大多数情况下,多个驱动程序是一个错误。通过使用诸如此类的未解析类型std_ulogic,编译器会将其标记为错误。
trondd 2012年

@trondd:关于的要点std_ulogic。但是请记住,许多核心将被编写,std_logic因此您可能会看到其中的一些。
Brian Carlton

1
std_logic确实是周围最常见的类型;我只是在争辩说它的使用并不符合最初的意图:多状态信号建模。对于内部设计,我们通常只考虑10和一个驱动程序。请参阅electronics.stackexchange.com/questions/17524/…,以获取有关该主题的详尽讨论。
trondd 2012年

5

std_logic 具有解析功能

std_logic除了1和之外0,它不仅具有更多有用的状态,还定义了解析功能。

解析功能是VHDL语言的概念。它是与一种类型相关联的函数,它确定了当该类型的多个值应用于单个信号时会发生什么。语法为:

SUBTYPE std_logic IS resolved std_ulogic;

std_ulogic的未解析版本(因此有用程度大大降低)在哪里std_logic

特别是,这暗示着类似的好东西,01导致X

library ieee;
use ieee.std_logic_1164.all;

entity std_logic_tb is
end std_logic_tb;

architecture behav of std_logic_tb is
    signal s0 : std_logic;
begin
    s0 <= '0';
    s0 <= '1';
    process
    begin
        wait for 1 ns;
        assert s0 = 'X';
        wait;
    end process;
end behav;

根据我们的理解X,这是将多个不兼容的值应用于单根导线的状态,这具有直观的意义。

std_logic 还知道如何根据LRM上存在的表格来解析每对可能的输入信号对。

bit 另一方面,它没有解析功能,如果我们在以上示例中使用了解析功能,则会导致GHDL 0.34上的模拟错误。

可能的值std_logic是一个不错的选择,因为它们已由IEEE 1164标准化并处理了许多常见的用例。


0

std_logicbit丰富,并且基本上应该在大多数时间使用。

还有一个布尔类型,与bit一样,具有两个值。它是比较的结果类型,通常是用于选择常量的IF [bool]或WHEN [bool]之后的预期类型:constant ENABLE_DEBUG_INTERFACE : boolean := true;

对于大型阵列,内存,可以使用std_logic首选位的地方是。在优化模拟器时,与std_logic相比,位在模拟器的内存中占据的面积较小。如果您的设计实例化1 GB的RAM,则可能很重要。

对于非常大的设计,例如从综合后门级网表自动生成的内容,它也可能更快。

当然,性能方面不是语言的一部分,而是取决于VHDL仿真器的实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.