Как использовать цикл For в VHDL
В предыдущем уроке мы научились создавать бесконечный цикл с помощью loop
утверждение. Мы также узнали, как выйти из цикла с помощью exit
утверждение. Но что, если мы хотим, чтобы цикл повторялся определенное количество раз? Цикл For-Loop — самый простой способ сделать это.
Цикл For-Loop позволяет перебирать фиксированный диапазон целых чисел или перечисляемых элементов. Элемент, принадлежащий текущей итерации, будет доступен внутри цикла через неявно объявленную константу.
Эта запись в блоге является частью серии учебных пособий по основам VHDL.
Синтаксис цикла For-Loop:
for <c> in <r> loop
end loop;
<c>
произвольное имя константы, которая будет доступна внутри цикла. <r>
представляет собой диапазон целых чисел или перечисляемых значений, по которым будет проходить цикл. Целочисленный диапазон может увеличиваться или уменьшаться.
Код VHDL для возрастающего диапазона, включающего все 10 чисел от 0 до 9:
0 to 9
Код VHDL для уменьшающегося диапазона, включающего все 10 чисел от 9 до 0:
9 downto 0
Код VHDL для диапазона, включающего только число 0:
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. Внутри цикла нет инструкции ожидания, поэтому для завершения цикла требуется нулевое время. Наконец, программа переходит в бесконечную паузу на wait;
.
Мы научились преобразовывать целое число в строку с помощью integer'image()
. , и мы использовали &
символ для соединения двух строк вместе.
Вывод
- Цикл For-Loop может перебирать увеличивающийся или уменьшающийся целочисленный диапазон
- Увеличивающийся диапазон обозначается
to
, и уменьшение диапазона наdownto
- Целое число можно преобразовать в строку с помощью
integer'image()
. - Две строки можно соединить с помощью символа конкатенации строк
&
.
Перейти к следующему руководству »
VHDL
- Как мы используем молибден?
- Как создать список строк в VHDL
- Как остановить симуляцию в тестовом стенде VHDL
- Как создать ШИМ-контроллер на VHDL
- Как генерировать случайные числа в VHDL
- Как использовать процедуру в процессе в VHDL
- Как использовать нечистую функцию в VHDL
- Как использовать функцию в VHDL
- Как создать конечный автомат на VHDL
- Как использовать шлифовальный станок