如何在 VHDL 中使用 For 循环
在上一个教程中,我们学习了使用 loop
创建无限循环 陈述。我们还学习了如何使用 exit
跳出循环 陈述。但是,如果我们希望循环迭代一定次数怎么办? For-Loop 是完成此任务的最简单方法。
For-Loop 允许您迭代固定范围的整数或枚举项。属于当前迭代的项目将通过隐式声明的常量在循环内可用。
这篇博文是基本 VHDL 教程系列的一部分。
For-Loop的语法是:
for <c> in <r> loop
end loop;
<c>
是在循环内可用的常量的任意名称。 <r>
是循环将迭代的整数范围或枚举值。整数范围可以递增也可以递减。
递增范围的 VHDL 代码,包括从 0 到 9 的所有 10 个数字:
0 to 9
递减范围的 VHDL 代码,包括从 9 到 0 的所有 10 个数字:
9 downto 0
仅包含数字 0 的范围的 VHDL 代码:
0 to 0
完全没有任何数字的空范围的 VHDL 代码:
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-Loop 在终止之前迭代了十次。 i
的值 在仿真时间 0 时将 10 次打印到模拟器控制台。循环内部没有等待语句,因此循环完成所需的时间为零。最后,程序在 wait;
处无限暂停 .
我们学习了如何使用 integer'image()
将整数转换为字符串 ,我们使用了 &
将两个字符串连接在一起的字符。
外卖
- For-Loop 可以迭代递增或递减的整数范围
- 递增范围用
to
表示 , 以及由downto
递减的范围 - 可以使用
integer'image()
将整数转换为字符串 - 可以使用字符串连接字符
&
连接两个字符串
转到下一个教程 »
VHDL