Освоение циклов For в VHDL: практическое руководство
В предыдущем уроке мы изучали создание бесконечного цикла с помощью оператора loop и выхода из него с помощью exit. А что, если цикл должен выполняться определенное число раз? For-цикл — самое простое решение.
For-цикл итерируется по фиксированному диапазону целых чисел или перечисляемых значений. Текущее значение итерации автоматически доступно внутри цикла через неявно объявленную константу.
Эта статья входит в серию базовых уроков VHDL.
Синтаксис
for <constant> in <range> loop -- тело цикла 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
- Как молибден формирует современную промышленность: применение, преимущества и динамика поставок
- Создание списков строк в VHDL: лучшие практики и пример
- Корректное завершение симуляции VHDL-тестбенча
- Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
- Генерация случайных чисел в VHDL: от Uniform к OSVVM
- Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
- Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
- Освоение функций VHDL: практическое руководство по эффективному дизайну
- Проектирование конечного автомата в VHDL: практический пример светофора
- Освоение техник шлифовального станка для режущих инструментов: практическое руководство