何时在 VHDL 中使用 STD_LOGIC 而不是 BIT

电器工程 视频文件
2022-01-09 10:36:00

使用有什么区别:

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 一起使用来访问数组中的元素。但我似乎看不出有什么区别。

4个回答

Bit预定义类型,只能有值0or 1Bit类型是一个理想化的值

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

std_logic是该std_logic_1164软件包的一部分,可在数字系统中提供更逼真的信号建模。它能够有九个不同的值。通常在您的代码中,您只会使用01Z(High-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.

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

std_logic有解析功能

除了and之外,它不仅std_logic有更多有用的状态,而且还定义了一个解析函数。10

分辨率函数是 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标准化并处理许多常见用例。

相关:https ://stackoverflow.com/questions/12504884/what-is-the-purpose-of-the-std-logic-enumerated-type-in​​-vhdl

std_logicbit更丰富,基本上应该大部分时间都在使用。

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

bit优于std_logic的一个地方是大型数组、内存。在优化模拟器时, bit 在模拟器内存​​中占用的区域比std_logic少。如果您的设计实例化 1 GB 的 RAM,这可能很重要。

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

当然,这个性能方面不是语言的一部分,它取决于 VHDL 模拟器的实现。