Как использовать цикл while в VHDL
В предыдущем уроке мы узнали, как использовать цикл For-Loop для перебора целочисленного диапазона. Но что, если нам нужно более детальное управление циклом, чем просто фиксированный диапазон целых чисел? Для этого мы можем использовать цикл while.
Цикл While будет продолжать перебирать заключенный код до тех пор, пока выражение, которое он проверяет, оценивается как true
. . Таким образом, цикл While подходит для ситуаций, когда вы заранее точно не знаете, сколько итераций потребуется.
Эта запись в блоге является частью серии учебных пособий по основам VHDL.
Синтаксис цикла While:
while <condition> loop
end loop;
<condition>
является логическим true
или false
. Это также может быть выражение, которое оценивается как true
. или false
. Условие оценивается перед каждой итерацией цикла, и цикл будет продолжаться, только если условие true
.
Пример выражения true
если i
меньше 10:
i < 10
Пример выражения true
если i
не 10:
i /= 10
Пример выражения true
если i
больше или равно 0 и меньше 2
8
=256:
i >= 0 and i < 2**8;
Реляционные операторы:
= | равно |
/= | не равно |
< | меньше |
<= | меньше или равно |
> | больше, чем |
>= | больше или равно |
Логические операторы:
нет а | true, если а неверно |
а и б | true, если а и б верны |
а или б | true, если а или б верны |
а нанд б | true, если а или б неверно |
а ни б | true, если а и б являются ложными |
а исключающее или б | true, если ровно один из a или б верны |
а xnor б | true, если а и б равны |
Упражнение
В этом видеоуроке мы научимся использовать переменную для управления циклом While:
Окончательный код, который мы создали в этом руководстве:
entity T05_WhileLoopTb is end entity; architecture sim of T05_WhileLoopTb is begin process is variable i : integer := 0; begin while i < 10 loop report "i=" & integer'image(i); i := i + 2; end loop; wait; end process; end architecture;
Вывод в консоль симулятора, когда мы нажали кнопку запуска в ModelSim:
VSIM 2> run # ** Note: i=0 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
Анализ
Мы создали целочисленную переменную i
и присвоили ему начальное значение 0. Мы использовали выражение в цикле While, которое верно до тех пор, пока i
меньше 10. Поскольку мы увеличивали i
на 2 в каждой итерации, последнее число, которое было напечатано, было 8.
На следующей итерации i < 10
оценивается как false
потому что 10 не меньше 10. После завершения цикла программа попала в wait;
где он остановился на бесконечность.
Вывод
- Цикл While будет продолжаться до тех пор, пока условие равно
true
. - Условие оценивается перед каждой итерацией цикла While.
- Переменные можно объявлять и использовать внутри процесса.
Пройдите базовый тест VHDL — часть 1 »
или
перейдите к следующему руководству »
VHDL
- Как мы используем молибден?
- Как создать список строк в VHDL
- Как остановить симуляцию в тестовом стенде VHDL
- Как создать ШИМ-контроллер на VHDL
- Как генерировать случайные числа в VHDL
- Как использовать процедуру в процессе в VHDL
- Как использовать нечистую функцию в VHDL
- Как использовать функцию в VHDL
- Как создать конечный автомат на VHDL
- Как использовать шлифовальный станок