Как подружить quartus и modelsim

от admin

Использование Quartus и ModelSim

Меня всегда интересовала цифровая схемотехника, а в частности языки описания аппаратуры — HDL. У меня давно лежала в списке будущего чтения книга Дэвида М. Хэррис и Сары Л. Хэррис «Цифровая схемотехника и архитектура компьютера», воспользовавшись свободным временем на самоизоляции, я добрался до этой замечательной книги. В процессе чтения я столкнулся с некоторыми трудностями, а в частности, как именно писать и отлаживать код в Quartus Prime. В процессе поисков мне очень помог сайт marsohod.org, но вот процесс симуляции схемы на этом сайте описан с использованием встроенных средств Quartus и в современных версиях программы, этих встроенных средств нет и необходимо использовать ModelSim. Чтобы как-то систематизировать те знания, которые я получил, используя Quartus и ModelSim, я решил написать эту статью. В процессе этой статьи я в качестве примера разберу задачу из книги Дэвида М. Хэррис и Сары Л. Хэррис «Цифровая схемотехника и архитектура компьютера», а конкретно задачу 3.26 про автомат газированной воды. На протяжении статьи я покажу, как установить Quartus, создать проект, написать код и произвести его симуляцию. Всем кому это будет интересно, добро пожаловать под кат.

Постановка задачи

Вас уговорили спроектировать автомат с прохладительными напитками для офиса. Расходы на напитки частично покрывает профсоюз, поэтому они стоят всего по 5 рублей. Автомат принимает монеты в 1, 2 и 5 рублей. Как только покупатель внесет необходимую сумму, автомат выдаст напиток и сдаст сдачу. Спроектируйте конечный автомат для автомата с прохладительными напитками. Входами автомата являются 1, 2 и 5 рублей, а именно, какая из этих монет вставлена.

Предположим, что по каждому тактовому сигналу вставляется только одна монета. Автомат имеет выходы: налить газировку, вернуть 1 рубль, вернуть 2 рубля, вернуть 2 по 2 рубля. Как только в автомате набирается 5 рублей (или больше), он выставляет сигнал «НАЛИТЬ ГАЗИРОВКУ», а также сигналы, возврата соответствующей сдачи. Затем автомат должен быть готов опять принимать монеты.

Теория

Конечные автоматы или finite state machine (FSM) относятся к классу синхронных последовательных схем, которые представляют подавляющее большинство схем цифровой схемотехники. Именно таким образом следует реализовывать свои проекты (по крайней мере на первых порах). Такой способ обеспечивает повторяемость и верифицированость схемы и не зависит от отношений задержек различных элементов схемы. Правила построения синхронных последовательных схем гласят, что схема является синхронной последовательной схемой, если ее элементы удовлетворяют следующим условиям:

  • Каждый элемент схемы является либо регистром, либо комбинационной схемой.
  • Как минимум один элемент схемы является регистром.
  • Все регистры тактируются единственным тактовым сигналом.
  • В каждом циклическом пути присутствует как минимум один регистр.
Условное обозначение Описание
S0 Начальное состояние, накопленная сумма 0 руб.
S1 Накопленная сумма 1 руб.
S2 Накоплено 2 руб.
S3 Накоплено 3 руб.
S4 Накоплено 4 руб.
Условное обозначение Значение Описание
I1 01 1 руб.
I2 10 2 руб.
I5 11 5 руб.

Нарисуем диаграмму состояний нашего автомата (на диаграммах состояния автомата Мили, необходимо указывать выходные сигналы на стрелках перехода состояния, я этого делать не буду, чтобы не загромождать диаграмму, все выходные сигнала будут расписаны в таблице ниже):

image

Распишем таблицу изменения состояний и выходных сигналов:

Состояния Входные сигналы Выходные сигналы
Текущее S Следующее S’ insert Налить воды pour_water Cдача 1 руб. change1 Сдача 2 руб. change2 Сдача 2 по 2 руб. change22
S0 S1 I1 0 0 0 0
S0 S2 I2 0 0 0 0
S0 S0 I5 1 0 0 0
S1 S2 I1 0 0 0 0
S1 S3 I2 0 0 0 0
S1 S0 I5 1 1 0 0
S2 S3 I1 0 0 0 0
S2 S4 I2 0 0 0 0
S2 S0 I5 1 0 1 0
S3 S4 I1 0 0 0 0
S3 S0 I2 1 0 0 0
S3 S0 I5 1 1 1 0
S4 S0 I1 1 0 0 0
S4 S0 I2 1 1 0 0
S4 S0 I5 1 0 0 1

Практика

Установка Quartus Prime

Quartus имеет бесплатную Lite Edition, которая имеет некоторые ограничения по сравнению с профессиональной редакцией, основное ограничение это не более 10000 строк исходного кода для симуляции проекта. Скачать её, после регистрации, можно по ссылке, на момент написания статьи наиболее свежая версия была 19.1, на основе работы с этой версией я писал статью. Выбираем Lite Edition, версия 19.1, операционная система Windows (надо отметить, что существует версия Quartus для Linux и она отлично работает, проблемы возникают с ModelSim, которая 32 битная и использует старую версию библиотеки отображения шрифтов, поэтому на первых порах я рекомендую использовать Windows версию), выбираем вкладку Combined Files. Размер архива для скачки весьма большой — 5.6 Gb, учитывайте это. Разворачиваем скаченный архив и запускаем setup.bat. Установка проходит стандартным образом, используем выбор компонентов по умолчанию.

Создание проекта

Для создания нового проекта выберем File -> New Project Wizard. . Первое окно Wizard’а информационное, жмем Next, на втором окне выбираем где будет располагаться проект, его название «soda_machine» и элемент дизайна верхнего уровня «soda_machine», как на рисунке:

image

В следующем окне выбираем «Empty project». Окно добавление файлов «Add files», ничего не добавляем. Окно выбора устройства «Family, Devices & Board Settings», для реального проекта очень важное, но так как, наш проект учебный и до реального ему далеко, здесь оставляем настройки по умолчанию, как на рисунке:

image

Окно выбора настроек других инструментов «EDA Tool Settings», выбираем для симуляции проекта использовать «ModelSim-Altera» и формат «System Verilog HDL» как на рисунке:

image

Последнее окно информационное «Summary», жмем Finish.

Написание исходного кода

У нас будет два основных файла с исходным кодом, это собственно модуль soda_machine и его test bench, оба эти файла будут использовать тип данных insert_type, который описывает как мы кодируем номиналы монет и его логично выделить в отдельный файл. Но есть некоторые трудности, связанные с особенностями компиляции Quartus и ModelSim. Quartus компилирует все файлы с исходным кодом за один проход, а ModelSim каждый файл компилирует отдельно, для того, что бы при компиляции Quartus’ом не возникало переопределения типа insert_type, я использовал технику из C/C++ include guard, основанную на директивах макропроцессора. Кроме того, что бы ModelSim был уверен что тип insert_type, используемый в модуле soda_machine и в test bench’е, один и тот же, поместил его описание внутри пакета soda_machine_types. С учетом этих требований файл soda_machine_types.sv выглядит следующим образом:

Теперь собственно модуль soda_machine, находится в файле soda_machine.sv:

Каким образом будут производится кодирование состояний конечного автомата, я оставил на усмотрение Quartus. Для того что бы указать, как именно следует производить кодирование, используется атрибут (* syn_encoding = «default» *), другие варианты кодирования можно увидеть здесь.

Необходимо заметить, что в реальном проекте выходные сигналы комбинационной логики автомата Мили, необходимо сохранять в регистрах и уже с выхода регистров подавать на выход ПЛИС. Входные сигналы необходимо синхронизировать с тактовой частотой с помощью синхронизаторов, во избежании попадания в метастабильное состояние.

Для добавления файлов в проект используется File -> New «SystemVerilog HDL File» и при сохранении дать соответствующее имя. После добавления этих двух файлов, проект можно скомпилировать Processing -> Start Compilation. После успешной компиляции можно посмотреть полученную схему Tools -> Netlist Viewers -> RTL Viewer:

image

Для просмотра диаграммы состояний конечного автомата Tools -> Netlist Viewers -> State Machine Viewer

image

На вкладке Encoding видно, что Quartus применил схему кодирования «one-hot», это когда для каждого состояния используется отдельный D-триггер, причем состояние S0 кодируется 0, а не 1 как для других состояний, делается это для упрощения схемы сброса в начальное состояние. Можно заметить, что RTL Viewer показывает не совсем принципиальную схему, это скорее концепт. Для просмотра принципиальной схемы использовать Tools -> Netlist Viewrs -> Technology Map Viewer (Post-Fitting)

Симуляция

В принципе на текущий момент у нас есть схема автомата по продаже газированной воды, но необходимо убедится, что она работает правильно, для этого напишем test bench и разместим его в файле soda_machine_tb.sv:

Для проверки нашего модуля используется файл тестовых векторов soda_machine.tv:

Первые два бита это входной сигнал insert, следующие 4 бита, это наши ожидания выходных сигналов: pour_water, change1, change2, change22. Например в начале файла 5 раз подряд вставляется рублевая монета, на пятой монете, мы ожидаем появления сигнала pour_water, при этом сигналы выдачи сдачи неактивны. Файл soda_machine.tv добавляется в проект File -> New «Text File»

Для удобства работы с ModelSim добавим файл soda_machine_run_simulation.do следующего содержания:

Он запустит нашу симуляцию и выведет графики сигналов в ModelSim. Файл soda_machine_run_simulation.do добавляется в проект File -> New «Tcl script File»

Теперь настроим проект, что бы автоматически запускалась симуляция. Выбираем пункт меню Assignments -> Settings, выбираем категорию EDA Tool Settings -> Simulation. В настройках NativeLink settings выбираем Compile test bench: и нажимаем кнопку Test Benches. в открывшемся окне Test Benches нажимаем кнопку New. В открывшемся окне New Test Bench Settings заполняем поле Test bench name: soda_machine_tb и нажимаем кнопку выбора файла . в нижней части окна, выбираем наш файл soda_machine_tb.sv и нажимаем кнопку Add. Должно получиться как на рисунке:

В окне New Test Bench Settings нажимаем OK. Окно Test Benches должно получить следующий вид:
image

В окне Test Benches нажимаем OK. В NativeLink settings устанавливаем галочку Use script to set up simulation и выбираем файл soda_machine_run_simulation.do. Окно Settings
должно иметь вид:

image

В окне Settings нажимаем OK, производим компиляцию проекта Processing -> Start Compilation, производим запуск симуляции Tools -> Run Simulation Tool -> RTL Simulation. Должен запустится ModelSim и произойти симуляция проекта. Внешний вид вкладки Transcript:

image

Красной рамкой выделен вывод нашего test bench’а о количестве выполненных тестов и обнаруженных ошибках. Внешний вид вкладки Wave:

Русские Блоги

Я видел в Интернете множество людей, которые спрашивали, как использовать modelsim для моделирования. Изучив, как создать проект в modelsim и как связать библиотеку, я сдался. На самом деле я столкнулся с такой проблемой. К счастью, у меня есть руководство великого бога. Концепция моделирования позволила избежать многих обходных путей.Теперь я представлю вам совместное моделирование среды разработки FPGA и modelsim.

Так называемая среда разработки FPGA на самом деле представляет собой quartus и ise / vivado, quartus теперь имеет интегрированный установочный пакет, просто установите его напрямую, а ise / vivado по-прежнему необходимо вызывать извне.

  1. Совместное моделирование quartus и modelsim

Сначала установите интегрированный установочный пакет quartus и modelsim.Я установил quartus prime 16.0.

Затем создайте новый проект, вы можете установить Simulation на Modelsim-Altera в настройках EDA TOOL во время процесса создания нового. Как показано ниже

Или после того, как проект построен, установите Simulation на Modelsim-Altera в Assignments-> Settings-> EDA TOOL Settings. Как показано ниже

Затем установите путь к modelsim. Как правило, интегрированная среда будет настроена автоматически. На всякий случай, если вам нужно ее настроить, Инструменты-> Параметры-> Общие-> Параметры инструмента EDA-> Modelsim-Altera Нажмите здесь, чтобы просмотреть и выбрать путь к модели. На диске C. Как показано ниже

Следующим шагом является настройка связанного средства тестирования. Вы можете написать средство тестирования самостоятельно. Рекомендуется использовать quartus для его автоматического создания при условии, что вы выполните его всесторонне.

Обработка-> Пуск-> Запустить шаблон тестового стенда Записать, щелкнуть по нему, в каталоге вашего проекта будет автоматически сгенерирована папка моделирования, есть папка modelsim, а ниже находится автоматически созданный файл верхнего уровня name.vt test напильник.

После создания испытательного стенда настройте соответствующую информацию в разделе «Назначения» -> «Настройки» -> «Настройки инструмента EDA ->« Моделирование ». Как показано ниже

Выберите «Скомпилировать тестовый стенд» и нажмите «Тестовые стенды».

Автоматически генерируемый системой тестовый стенд обычно имеет имя файла верхнего уровня _vlg_tst и псевдоним i1. Его можно изменить. Обычно я меняю имя модуля тестового стенда на имя файла верхнего уровня _sim, а псевдоним экземпляра — на uut.

Время моделирования можно оставить пустым, я обычно заполняю 10 мкс, затем настраиваю путь к испытательному стенду, нажимаю добавить после настройки, а затем полностью ОК, настройка завершена.

Наконец, в quartus вызывается modelsim, Tools-> Run Simulation Tool-> RTL Simulation. Через некоторое время появится окно формы сигнала модели. Если ответа нет, вернитесь и проверьте конфигурацию.

Quartus 17.1 & ModelSim Tutorial Page

The following tutorial assumes that you using Windows and Google Chrome as your default browser. For other setups, the instructions below may not apply.

If you are using a mac, one option is to use BootCamp which enables you to dual-boot both Mac OS and Windows. You will need to download a windows ISO and obtian a valid windows key.

Make sure you have approximately 14GB of available disk space on your local disk.

Navigate to http://dl.altera.com/17.1/?edition=lite&platform=windows&download_manager=dlm3. Create an account and make sure you are signed in. Go back to the download page and under devices, uncheck all devices except for the Arria II model.

Next, disable any adblockers and click download selected Files.

If the settings in your browser are correct, the following window should show up. Click on where you want to download the setup files and press ok. Once the download is complete run QuartusLiteSetup-17.1.0.590-windows.exe. Click Next and accept the agreement.

During the setup you will need to choose an installation directory. To make things easier, it is recommended to use the default directory. If you choose a directory with spaces such as Program Files there will be an extra step at the end, but do not worry if an error message pops up when this option is selected.

Читать:
Кто относится к оперативно ремонтному персоналу ответ

If all setup files were downloaded correctly, we get the following screen. If there are more devices that is OK as long as Quartus Prime and Modelsim are checked. Press next and Quartus/Modelsim will be installed. Once the download is complete, you may delete the setup files in your download folder.

Now that the install is complete, uncheck USB Blaster II driver and launch quartus.

Fixing the error caused by changing the installation directory

In Quartus, go to Tools-> Options -> EDA Tools options (Tools in the right hand corner.). Then check if Modelsim-Alteria doesn’t have a path.

If this is the case, you will need to manually add the path to your . \modelsim_ase\win32aloem folder. See https://www.altera.com/support/support-resources/knowledge-base/solutions/rd05172013_526.html.

The end result should look something like the below but varies slightly depending on the installation directory.

Creating your first project: fibonacci_calculator

Creating a directory for the project

Start by creating a folder that will contain both the fibonacci_calculator.sv and tb_fibonacci_calculator.sv files which can be found on the class website. In this class, any file starting with tb_ is designated a testbench file. The testbench is used to run a module named fibonacci_calculator, hence the name tb_fibonacci_calculator.sv.

You can save the files into the folder by copy-and-pasting the text into Quartus as it has a built in text editor that can be accessed through File->New..

Another way to do this is to pasting the text into your favorite text-editor (Atom/Sublime-Text/TextMate/Vim/etc). All these text editors have downloadable packages that support the Verilog/SystemVerilog language (the two names are sometimes used interchangebly).

Make sure to double check the type is SystemVerilog HDL File with Quartus (left) or All Files (*.*) with a .sv extension with other text editors (right).

Now, run Quartus and navigate to File -> Create a New Project. You should get the screen below. Click Next on the introductory page.

You will be asked to select a working directory for the project. Select the folder where the fibonacci_calculator.sv and tb_fibonacci_calculator.sv are saved. Be aware that you cannot have multiple projects in the same directory. If you have a directory for this class, there should be sub-folders for each project.

The name of the project has to match the name of the top, non-testbench module in the project. For example, in the below screenshot the project name is fibonnacci_calculator because fibonacci_calculator.sv declares the module fibonacci_calculator.

Once this section is complete, select Next.

The next page asks if you want to use a previous template for your design. For most purposes this should be left as empty project. Click Next as this is the default.

The next screen allows you to add files to the project. For most cases it suffices to click Add All. After you have selected the files to add press Next. You may come back to this screen after you create the project from the homescreen by clicking Project-> Add/Remove Files.

Designing hardware relies on the capability of each FPGA. In this class, we will be using:

Family: Arria II GX

Device: EP2AGX45DF29I5

Scroll down using the arrow pointing downwards on the bottom right. Be sure to select EP2AGX45DF29I5 otherwise your area and timing numbers will be incorrect. Press Next.

Next to Simulation, under Tool Name click on ModelSim-Altera and under format click SystemVerilog HDL then press next.

On the next screen it will display a summary of your settings. Press Finish

Now that we have created the project, under Compilation Hierachy double click fibonacci_calculator. It will open the file containing the top module which in this case is fibonacci_calculator.sv.

Compiling fibonacci_calculator.sv in Quartus

Now, double click on Analysis & Synthesis under the Tasks pane. This will compile and synthesize your program(s). If there are no errors, you will see a pop-up saying the Analysis & Compilation was successful. If not, it will tell you your errors in the Messages pane at the bottom of the screen. It is good habit to just review your warnings (if any) to ensure you have no latches or other design hazards.

Running the Testbench and Displaying Signals Through ModelSim

Once the Analysis & Synthesis is successful, we can open up ModelSim to test our code. Go to Tools -> Run Simulation Tool -> RTL Simulation. Make sure that ModelSim is not already running or there will be an error.

Go to Compile—>Compile. Ensure that the Library is work and you are in your project’s directory. Many times you will have to change directories so that you are in your project’s directory. Select all SystemVerilog HDL Files that pertain to your project. This includes the testbench. Hit Compile and then Done.

If you look at the bottom in the Transcript pane, you will see that it did compile and there were no errors. The work library should have all the files you just compiled. If not, repeat the previous step. If the transcript does not show up like the below after compiling, go to Layout -> NoDesign and it should show up.

Next, double click tb_fibonacci_calculator under the work library. ModelSim will slowly load new panes to look like the below. If you do not see the Wave pane, do not worry as you will show it in later steps. You should see something similar to below.

The next step is to add signals to the wave and show the wave if it is not already present. On the left, in the sim pane, right click on the testbench file which should be the top most file. Go to Add—>To Wave—>All items in region.

In the Wave pane, you will see all the signals declared and used in the testbench.

When dealing with signals that are many bits, it is easier to see its value as an unsigned integer rather than binary. To make this conversion, right click on the signal you want, go to Radix and choose the format you want. Unsigned integer is the radix you will use for this class.

You are now ready to simulate your program. The icons boxed in the below screenshot are used to run the testbench. The first icon is Restart which will reset the simulation as if you never ran it. This is helpful to rerun the simulation without recompiling everything. The Run Length allows you to enter a specific amount of time you want the program to run for. It defaults to pico-seconds, but nano-seconds is the best time to use. The icon Run right after the Run Length is to run your program for the amount of time specified in the Run Length. If you set Run Length to be 10 ns, each time you press Run, the program will continue for 10 ns. Continue Run will run the program until it terminates. The same is true for Run -All. All the programs in this class will terminate in less than one second. If you find yourself waiting for longer than a few seconds until the program terminates, hit the Stop button and recheck your logic. you will see the below screen once your program terminates. It shows you where the program terminated. To go back to the Wave, click on the Wave tab.

You should see something like this on your Wave.

If you expand or scroll through the Transcript pane, notice the «CORRECT RESULT» text along with outputs of the tb_fibonacci_calculator.sv. The transcript plane will also show the output of any $display statements you have in your code. The below script generated by the testbench indicates that fibonacci_calculator.sv was a success.

Checking Area and Fmax Through Quartus

Now that our code is confirmed to be correct, it is useful go back to Quartus to check the Area and the clock frequency (Fmax).

Checking Fmax

Double click TimeQuest Timing Analysis under Tasks. This will run Fitter (Place & Route) as well.

In the Table of Contents of the Compilation Report expand TimeQuest Timing Analyzer. Then expand Slow 900mV 100C Model and look at Fmax Summary. The speed of your clock is given by Fmax.

Checking Area

In the Table of Contents of the Compilation Report expand Fitter and then Summary. Under Fitter Summary, double click Logic utilization. Area is the sum of Combinational ALUTS and Dedicated logic registers. In this class, you are not allowed to use Memory ALUTs.

Инструкция по работе с инструментом ModelSim Altera

1 Указание пути к инструменту симуляции ModelSim

Первым делом нужно удостовериться, что в среде разработки Quartus II указан путь к инструменту ModelSim. Для этого открываем меню Tools Options. В опциях переходим к пункту General EDA Tool options. Находим поле ModelSim-Altera, и впечатываем в него или, нажав, на кнопку с тремя точками, ищем эту директорию у себя на компьютере.

Задаём в настройках Quartus II путь к ModelSim Задаём в настройках Quartus II путь к ModelSim

Естественно, для версии Quartus, отличной от моей, у вас будет свой путь к директории win32aloem.

2 Добавление в проект модулей тестов (тестбенчей)

У вас есть проект для ПЛИС в Quartus II. Как писать тесты, или тестбенчи (testbench) – это тема для отдельной статьи. Сейчас же предположим, что ваш тестбенч уже написан. Теперь нужно указать среде разработки, какой тест вы хотите использовать при симулировании. Для этого открываем настройки через меню Assignements Settings…

В открывшемся окне настроек симуляции в поле Tool name выберем ModelSim — Altera, а в поле Format for output netlist выберем тот язык, на котором написан тестбенч. Я использую Verilog.

Настройка параметров компиляции в Quartus ii Настройка параметров компиляции в Quartus ii

Теперь в разделе EDA Tool Settings Simulation, нажимаем кнопку Test Benches… Открылось окно редактирования тестов Test Benches. Пока что мы не создали ни одного тестбенча, поэтому список пустой. Нажимаем кнопку New… В открывшемся окне New Test Bench Settings нужно задать настройки теста.

Слева от поля File name нажимаем на кнопку с тремя точками. Выбираем файл с кодом тестбенча и нажимаем Open. Теперь нажимаем кнопку Add. Тест появился в списке тестов.

Добавление тестов в проект Quartus ii Добавление тестов в проект Quartus ii

После этого в поле Top level module in test bench зададим название модуля верхнего уровня, который определён в вашем тестбенче. Имя в поле Test bench name можете вписать любое, по умолчанию оно будет автоматически создано таким же, как имя модуля.

Здесь, кстати, можно задать несколько тестов, и при компиляции проекта переключаться на нужный.

Всё, мы задали основные настройки теста. Нажимаем два раза ОК. Теперь наш тест появился в выпадающем списке тестбенчей. Ещё раз нажимаем ОК.

3 Анализ и синтез проекта в Quartus II

Если вы ещё не сделали синтез проекта, то пора это сделать. Выберите в меню Processing Start Start Analysis & Synthesis, или нажмите комбинацию клавиш Ctrl+K , или просто кликните соответствующую иконку в верхней панели.

Запускаем анализ и синтез проекта в Quartus II Запускаем анализ и синтез проекта в Quartus II

Синтезатор среды Quartus II сообщит об успешном (или нет) завершении процесса синтеза.

4 Запуск симулирования в ModelSim Altera

Можно запускать симулирование. Выбираем в меню Tools Run Simulation Tool RTL Simulation (1) или нажимаем иконку RTL Simulation в верхней панели (2).

Запуск процесса симулирования в ModelSim Altera Запуск процесса симулирования в ModelSim Altera

Запустится инструмент ModelSim, который выполнит все инструкции, прописанные в вашем тестбенче, и остановится (если вы специально указали это директивой $stop в коде теста). На экране появятся диаграммы уровней входных и выходных сигналов ПЛИС, которые вы описали в вашем проекте.

Результат симулирования входных и выходных сигналов в среде ModelSim Altera Результат симулирования входных и выходных сигналов в среде ModelSim Altera

В окне Transcript (меню View Transcript) отображаются все операции, которые производит ModelSim. Если симулирование завершилось с ошибкой, вы увидите сообщение об этом. Причём, будет указан даже номер строки в коде вашего теста, который вызвал ошибку ModelSim. Эта информация очень полезна для локализации и устранения ошибок.

Похожие публикации