掌握 VHDL For 循环:实用指南
上一教程探讨了如何用 loop 语句创建无限循环并用 exit 退出。若需循环固定次数怎么办?For 循环是最直接的解决方案。
For 循环遍历固定整数范围或枚举项。当前迭代值通过隐式声明的常量自动在循环内可用。
本文属于基础 VHDL 教程系列。
语法
for <constant> in <range> loop
-- loop body
end loop;
<constant> 是用户定义的循环计数器名,<range> 可以是整数范围(升序或降序)或枚举值集合。
整数范围
- 升序范围:
0 to 9– 迭代 0,1,2,…,9。 - 降序范围:
9 downto 0– 迭代 9,8,7,…,0。 - 单值:
0 to 0– 仅迭代 0。 - 空范围:
0 to -1– 循环体从不执行。
示例代码
entity T04_ForLoopTb is end entity;
architecture sim of T04_ForLoopTb is
begin
process is
begin
for i in 1 to 10 loop
report "i=" & integer'image(i);
end loop;
wait;
end process;
end architecture;
仿真输出 (ModelSim)
VSIM 2> run # ** Note: i=1 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=3 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=5 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=7 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=9 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=10 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
分析
For 循环恰好执行十次迭代,在仿真时间 0 打印计数器值。因循环内无 wait,整个循环瞬间完成。最后的 wait; 让进程无限暂停,这是测试平台常见模式。
我们还演示了两个基本字符串操作:
integer'image(i)– 将整数转为字符串。&– 连接两个字符串。
关键要点
- For 循环可遍历升序 (
to) 和降序 (downto) 范围。 - 整数用
integer'image()转字符串。 - 字符串拼接用
&运算符。
进入下一教程学习更深入的 VHDL 概念。
VHDL