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

理解 VHDL 中信号与变量的区别

上一教程探讨了如何在进程内声明变量。变量适合局部算法工作,但无法在进程外被看到。当需要与其他设计部分共享值时,应使用信号。

信号声明在架构的声明区域——即 architecture <architecture_name> of <entity_name> is 与 begin 关键字之间。

本文属于基础 VHDL 教程系列。

声明信号的语法:
signal <name> : <type>;

信号可选带初始值:
signal <name> : <type> := <initial_value>;

练习

本视频教程教你如何声明信号,并发现变量与信号的核心区别。

本教程创建的最终代码:

entity T06_SignalTb is end entity;
architecture sim of T06_SignalTb is
  signal MySignal : integer := 0;
begin
  process is
    variable MyVariable : integer := 0;
  begin
    report "*** Process begin ***";
    MyVariable := MyVariable + 1;
    MySignal <= MySignal + 1;
    report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal);
    MyVariable := MyVariable + 1;
    MySignal <= MySignal + 1;
    report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal);
    wait for 10 ns;
    report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal);
  end process;
end architecture;

ModelSim 仿真控制台输出:

VSIM 2> run
# ** Note: *** Process begin ***
# Time: 0 ns Iteration: 0 Instance: /t06_signaltb
# ** Note: MyVariable=1, MySignal=0
# Time: 0 ns Iteration: 0 Instance: /t06_signaltb
# ** Note: MyVariable=2, MySignal=0
# Time: 0 ns Iteration: 0 Instance: /t06_signaltb
# ** Note: MyVariable=2, MySignal=1
# Time: 10 ns Iteration: 0 Instance: /t06_signaltb
# ** Note: *** Process begin ***
# Time: 10 ns Iteration: 0 Instance: /t06_signaltb
# ** Note: MyVariable=3, MySignal=1
# Time: 10 ns Iteration: 0 Instance: /t06_signaltb
# ** Note: MyVariable=4, MySignal=1
# Time: 10 ns Iteration: 0 Instance: /t06_signaltb
# ** Note: MyVariable=4, MySignal=2
# Time: 20 ns Iteration: 0 Instance: /t06_signaltb ...

分析

我们创建了初始值均为 0 的信号和变量。尽管在进程中对它们做相同操作,控制台输出揭示了截然不同的行为。关键差异:

示例中,MySignal 前两次递增因在 wait for 10 ns; 前被覆盖而丢失。后续递增在挂起后出现,符合预期行为。

要点

进入下一教程 »


VHDL

  1. 北斗卫星导航系统全解析:如何区别于GPS与全球竞争格局
  2. 云计算 vs 传统计算:实战对比与选择指南
  3. 掌握VHDL有符号与无符号类型:实战洞察
  4. VHDL变量详解:实用示例与可靠设计规则
  5. VHDL 字符串列表创建:最佳实践与示例
  6. 优雅结束 VHDL 测试平台仿真
  7. VHDL 实现 PWM 控制器:设计、仿真与 FPGA 演示
  8. VHDL 生成随机数:从均匀分布到 OSVVM
  9. 利用进程内过程简化VHDL状态机设计
  10. 使用VHDL不纯函数提升FSM可读性与可维护性
  11. 掌握VHDL函数:高效设计实战指南
  12. 用VHDL设计有限状态机:红绿灯实战范例