亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

如何使用最常见的 VHDL 类型:std_logic

VHDL 中最常用的类型是 std_logic .将此类型视为单个位,即由单个物理线路承载的数字信息。 std_logicinteger 让我们对设计中的资源进行更细粒度的控制 type,我们在之前的教程中一直在使用。

通常,我们希望数字接口中的线具有值 '1''0' .这两个值是位(二进制数字)可以具有的唯一值。但实际上,物理数字信号可以处于多种状态,std_logic type 可以很好地模拟。因此它是VHDL中最常用的类型。

这篇博文是基本 VHDL 教程系列的一部分。

std_logic type 可以有以下值:

‘1’ 逻辑1
‘0’ 逻辑 0
‘Z’ 高阻抗
‘W’ 信号弱,分不清是0还是1
‘L’ 弱0,下拉
‘H’ 弱1,上拉
'-' 无所谓
‘U’ 未初始化
‘X’ 未知,多个驱动程序

对于应该为单个二进制值建模的类型,这似乎有很多不同的状态。别担心,我们不会在本教程系列中使用所有这些类型。我们将使用 '1''0' 当然。我们还将看到 'U''X' ,这将帮助我们发现设计中的错误。其他值是高级 VHDL 功能,可用于建模通信,例如 I 2 C 设备,或用于创建三态总线。

如果多个进程试图向一个信号写入不同的值,我们说它有多个驱动程序 .如果一个 std_logic 信号有多个驱动程序,它不会是编译或运行时错误,至少在模拟器中不会。那是因为 std_logic 是一个已解析的类型 ,意味着它的值将由一个解析函数来确定。

std_logic 的值 两个驱动的信号将根据这个分辨率表来确定:

U X 0 1 Z W L H
U X X 1 1 1 1 1 X 1
U X 0 X 0 0 0 0 X 0
U U U U U U U U U U
U X X X X X X X X X
U X 0 1 Z W L H X Z
U X 0 1 W W W W X W
U X 0 1 L W L W X L
U X 0 1 H W W H X H
U X X X X X X X X

运动

在本视频教程中,我们将学习如何使用声明和显示 std_logic 波形中的信号:

我们在本教程中创建的最终代码:

library ieee;
use ieee.std_logic_1164.all;

entity T10_StdLogicTb is
end entity;

architecture sim of T10_StdLogicTb is

    signal Signal1 : std_logic := '0';
    signal Signal2 : std_logic;
    signal Signal3 : std_logic;

begin

    process is
    begin

        wait for 10 ns;
        Signal1 <= not Signal1;

    end process;

    -- Driver A
    process is
    begin

        Signal2 <= 'Z';
        Signal3 <= '0';
        wait;

    end process;

    -- Driver B
    process(Signal1) is
    begin

        if Signal1 = '0' then
            Signal2 <= 'Z';
            Signal3 <= 'Z';
        else
            Signal2 <= '1';
            Signal3 <= '1';
        end if;

    end process;


end architecture;

按下运行后ModelSim中的波形窗口,并在时间轴上放大:

光标位于重复信号周期另一部分的波形:

分析

该练习演示了 VHDL 的解析功能如何与 std_logic 配合使用 类型。在处理数字逻辑时,以波形研究时间线通常更实用 而不是使用打印输出。因此,我们在本次练习中使用了 ModelSim 波形来检查信号值。

第一个进程和Signal1 仅用于更改第三个进程在 Signal2 上驱动的值 和 Signal3 .

第二个进程,驱动程序 A,将尝试驱动 'Z'Signal2 , 和一个 '0'Signal3 不断。

第三个进程,驱动程序 B,将在驱动 '1' 之间交替 和 'Z' 到两个 Signal2Signal3 .

我们在波形截图中看到 Signal1'0' 之间变化 和 '1' ,因为只有一个进程试图驱动这个信号。我们还可以看到,多个驱动信号是按照VHDL代码注释贴的解析表解析的:

信号 司机A 驱动程序 B 结果
信号2 ‘Z’ ‘Z’ ‘Z’
信号2 ‘Z’ ‘1’ ‘1’
信号3 ‘0’ ‘Z’ ‘0’
信号3 ‘0’ ‘1’ ‘X’

外卖

转到下一个教程 »


VHDL

  1. 最常见的 3D 打印工作流程瓶颈——以及如何解决它们
  2. 最常见的汽车冷却系统问题
  3. 如何充分利用您的数据
  4. 如何在 VHDL 中创建链接列表
  5. 如何在 VHDL 中的进程中使用过程
  6. 如何在 VHDL 中使用不纯函数
  7. 如何在 VHDL 中使用函数
  8. 如何在 VHDL 中使用过程
  9. 如何在 VHDL 中使用端口映射实例化
  10. 如何在工作场所安全使用发动机提升机
  11. 起重机事故的最常见原因(以及如何避免)
  12. a286最常见的应用