{"id":38395,"date":"2025-12-15T14:36:53","date_gmt":"2025-12-15T14:36:53","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=38395"},"modified":"2026-05-13T12:00:00","modified_gmt":"2026-05-13T12:00:00","slug":"getting-started-with-acg-sdk","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk","title":{"rendered":"Getting started with the imperix ACG SDK"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 ez-toc-wrap-right-text counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#Product-description\" >Product description<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#Typical-workflow\" >Typical workflow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#Developing-a-SimulinkPLECS-model\" >Developing a Simulink\/PLECS model<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#1-Opening-an-existingnew-model\" >1. Opening an existing\/new model<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#2-Implementing-the-control-algorithms\" >2. Implementing the control algorithms<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#3-Modeling-and-simulating-the-system\" >3. Modeling and simulating the system<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#4-Tuning-the-control-algorithms\" >4. Tuning the control algorithms<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#5-Generating-real-time-code\" >5. Generating real-time code<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#Programming-the-hardware-controller\" >Programming the hardware controller<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#1-Flashing-the-code\" >1. Flashing the code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#2-Interacting-with-the-target\" >2. Interacting with the target<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\/#Further-readings\" >Further readings<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">This article provides getting-started instructions for first-time users of the imperix <a href=\"\/software\/acg-sdk\/\">ACG SDK<\/a>. It focuses on the typical workflow for simulation and automated code generation with <a href=\"https:\/\/imperix.com\/products\/power-electronic-controllers\/\">imperix controllers<\/a>. It notably addresses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Product presentation:<\/strong> What the ACG SDK is, and what pieces of software it contains.<\/li>\n\n\n\n<li><strong>Resources:<\/strong> How the imperix blocksets can be used and how the files are typically organized.<\/li>\n\n\n\n<li><strong>Simulation:<\/strong> How to effectively run accurate offline simulations.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The article focuses on developing code for the controllers&#8217; CPU. Information on implementing programmable logic on the devices&#8217; FPGAs is provided in <a href=\"https:\/\/imperix.com\/doc\/help\/fpga-development-on-imperix-controllers\">PN169<\/a>. Similarly, users interested in writing C\/C++ code manually (rather than using code generation) should refer to a separate article on the <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-cpp-sdk\/installation-and-utilisation-of-cpp-sdk\">CPP SDK<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended articles related to the ACG workflow are shown below. A series of video tutorials is also available with similar content.<\/p>\n\n\n\n<style>\n  .tech-table {\n    border-collapse: collapse;\n    width: 100%;\n    max-width: 800px;\n    color: #000;\n  }\n\n  .tech-table th {\n    text-align: left;\n    font-weight: bold;\n    font-style: italic;\n    padding: 6px;\n    font-size: 18px;\n  }\n\n  \/* The first column header is empty in the image *\/\n  .tech-table th:f<style>\n  .tech-table {\n    border-collapse: collapse;\n    width: 100%;\n    max-width: 800px;\n    color: #000;\n  }\n\n  .tech-table th {\n    text-align: left;\n    font-weight: bold;\n    padding: 6px;\n    font-size: 18px;\n  }\n\n  .tech-table th:first-child {\n    width: 20%;\n  }\n\n  .tech-table td {\n    background-color: #f2f2f2;\n    padding: 8px;\n    vertical-align: top;\n    border: 4px solid white;\n  }\n\n  \/* UPDATED PN styling *\/\n  .pn-code {\n    color: #d32f2f;\n    display: inline;\n    margin-left: 6px;\n    font-weight: normal;\n    white-space: nowrap;\n  }\n\n  \/* UPDATED Video styling *\/\n  .video-code {\n    color: #d32f2f;\n    display: inline;\n    margin-left: 6px;\n    font-weight: normal;\n    white-space: nowrap;\n  }\n  .video-code::before {\n  content: \"\ud83c\udfac \";\n  }\n\n.cell-highlight {\n  outline: 3px solid #d32f2f;\n  outline-offset: -4px;\n}\n<\/style>\n\n<table class=\"tech-table\">\n  <thead>\n    <tr>\n      <th>Step<\/th>\n      <th>Documentation<\/th>\n      <th><\/th>\n      <th>Videos<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>1. Software installation<\/td>\n      <td colspan=\"2\">\n        Installation guide for the ACG SDK\n        <a href=\"https:\/\/imperix.com\/doc\/help\/installation-guide-acg-sdk\" class=\"pn-code\">PN133<\/a>      <\/td>\n      <td>\n        N\/A\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>2. Getting started<\/td>\n      <td colspan=\"2\"  class=\"cell-highlight\">\n        Getting started with the ACG SDK\n        <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\" class=\"pn-code\">PN134<\/a> \n      <td>\n        Create the model\n        <a href=\"https:\/\/www.youtube.com\/watch?v=8TBpIigcN2w\" class=\"video-code\">Video 1<\/a>\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>3. Running simulations<\/td>\n      <td>\n        Simulation essentials with Simulink\n        <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-simulink\" class=\"pn-code\">PN135<\/a> \n      <\/td>\n      <td>\n        Simulation essentials with PLECS\n        <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\" class=\"pn-code\">PN137<\/a>       \n      <td>\n        Simulate it\n        <a href=\"https:\/\/www.youtube.com\/watch?v=HklMDtAADUU\" class=\"video-code\">Video 2<\/a>\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>4. Device programming<\/td>\n      <td colspan=\"2\">\n        Programming and operating imperix controllers\n        <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\" class=\"pn-code\">PN138<\/a> \n      <\/td>\n      <td rowspan=\"2\">\n        Generate code\n        <a href=\"https:\/\/www.youtube.com\/watch?v=6dGeExgX-rE\" class=\"video-code\">Video 3<\/a>\n      <\/td>\n    <\/tr>\n\n    <tr>\n      <td>5. Monitoring<\/td>\n      <td colspan=\"2\">\n        Cockpit user guide\n        <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\" class=\"pn-code\">PN300<\/a>\n      <\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pre-requisites<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Working with MATLAB requires Simulink, MATLAB Coder, Simulink Coder, and Embedded Coder. Similarly, working with PLECS requires PLECS Coder. Instructions for installing these software tools are given in <a href=\"https:\/\/imperix.com\/doc\/help\/installation-guide-acg-sdk\">PN133<\/a>.<\/li>\n\n\n\n<li>The ACG SDK can be installed freely, but a license is required to execute the runtime code on a controller. More information on licensing is given in <a href=\"https:\/\/imperix.com\/doc\/help\/software-licensing\">PN160<\/a>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Product-description\"><\/span>Product description<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<a href=\"https:\/\/imperix.com\/software\/acg-sdk\">ACG SDK<\/a>&nbsp;is a Software Development Kit (SDK) that complements MATLAB\/Simulink or PLEXIM\/PLECS. It enables engineers to program imperix controllers directly from these software tools. It includes:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<ul class=\"wp-block-list\">\n<li style=\"border-style:none;border-width:0px\">A<strong> Control library<\/strong> for Simulink and PLECS. This blockset contains precise simulation models of the controller peripherals (used in offline simulation mode) as well as configuration methods for the same peripherals (used in code generation mode).<br><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"121\" class=\"wp-image-38241\" style=\"width: 700px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_ctrl-1.png\" alt=\"\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_ctrl-1.png 865w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_ctrl-1-300x52.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_ctrl-1-768x133.png 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/li>\n\n\n\n<li>A <strong>Power library<\/strong> for Simulink and PLECS. This blockset is used only in offline simulation mode and contains simulation models of Imperix's power products (e.g., power modules, filters, motors). In Simulink, both Simscape Electrical and Specialized Power Systems are supported.<br><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"74\" class=\"wp-image-38242\" style=\"width: 700px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_power-1.png\" alt=\"\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_power-1.png 865w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_power-1-300x32.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/Blocks_power-1-768x82.png 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/li>\n\n\n\n<li>All additional necessary software and tools, such as compilers and scripts.<\/li>\n\n\n\n<li>The embedded <strong>operating system<\/strong> for the controllers.<\/li>\n\n\n\n<li>The standard <strong>FPGA firmware<\/strong>.<\/li>\n\n\n\n<li>The <strong>Cockpit<\/strong> monitoring software. It enables real-time interaction and monitoring of the physical converter by providing access to the model variables and all the signals measured by the programmable controllers.<br><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"438\" class=\"wp-image-37847\" style=\"width: 700px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/cockpit_screenshot1.png\" alt=\"\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/cockpit_screenshot1.png 640w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/11\/cockpit_screenshot1-300x188.png 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Typical-workflow\"><\/span>Typical workflow<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">It is assumed that the base software and the necessary SDK have been installed and properly configured. If needed, specific instructions are given in the <a href=\"https:\/\/imperix.com\/doc\/help\/installation-guide-acg-sdk\">Installation guide for the ACG SDK<\/a>.<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Regardless of the programming environment, the development typically proceeds as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Developing a <strong>Simulink or PLECS model<\/strong> that supports both offline simulation and code generation, according to the following typical steps:\n<ol class=\"wp-block-list\">\n<li>Opening an existing example from the knowledge base, creating an empty Simulink\/PLECS file, or starting from an empty imperix template.<\/li>\n\n\n\n<li>Implementing the control algorithms using standard Simulink\/PLECS blocks as well as dedicated hardware blocks from the imperix <em>Control library<\/em>.<\/li>\n\n\n\n<li>Modeling and simulating the complete system using the imperix <em>Power library<\/em> to support the pre-validation of the control algorithms during offline simulations.<\/li>\n\n\n\n<li>Tuning of the implemented control using offline simulations.<\/li>\n\n\n\n<li>Generating and compiling code directly from within Simulink or PLECS.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Using <strong>Cockpit<\/strong>, corresponding to the following steps:\n<ol class=\"wp-block-list\">\n<li>Connecting to the target hardware - i.e. the controller - and flashing the generated runtime code.<\/li>\n\n\n\n<li>Launching the code and executing all further interactions with the hardware, such as real-time debugging, parameter tuning, monitoring and logging.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\"><strong>FPGA development<\/strong>: For advanced users interested in developing custom logic for the FPGA, specific documentation and examples are available in the <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-fpga-control-development?currentThread=getting-started-with-fpga-programming\">Getting started with FPGA programming<\/a> guide. This requires installing the Vivado Design Suite, which can be used with a free license on all imperix controllers.<\/div>\n\n\n\n<h2 id=\"PN133:InstallationguideforimperixACGSDK-Productdescription\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Developing-a-SimulinkPLECS-model\"><\/span>Developing a Simulink\/PLECS model<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">During this first phase, the control software (i.e., the set of control algorithms) is developed, and its behavior is tested in an offline simulation before deployment on the controller. There are essentially five steps:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1-Opening-an-existingnew-model\"><\/span>1. Opening an existing\/new model<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Essentially, three options are available:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Most users prefer to start&nbsp;with<strong> an example<\/strong> from the imperix <a href=\"https:\/\/imperix.com\/doc\/filter-results?note-type=example\">knowledge base<\/a>, which offers the benefit of being pre-configured and generally reasonably close to the final application. Once downloaded, the example file can be copied or renamed (as long as the rules for MATLAB file naming are observed).<\/li>\n\n\n\n<li>Starting <strong>from an empty file<\/strong> is also possible. However, with Simulink, using a basic template is recommended because it provides a clean separation between the controller and plant (see below). The imperix base template is always located in <code>[installation_path]\\user_template\\imperix_template.slx<\/code><\/li>\n\n\n\n<li><strong>Existing models can be adapted<\/strong> to support both simulation and code generation. In PLECS, this is trivial. However, in Simulink, a good understanding of the software's configuration is necessary. Further information is given in <a href=\"https:\/\/imperix.com\/doc\/help\/starting-from-blank-simulink-model\">PN143<\/a>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The vast majority of examples available on the <a href=\"https:\/\/imperix.com\/doc\/filter-results?note-type=example\">knowledge base<\/a> are organized with two main subsystems:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>controller<\/strong> subsystem includes the control implementation, which can be simulated or used to generate real-time code. This subsystem also contains the <a href=\"https:\/\/imperix.com\/doc\/software\/config-control-task-configuration\">CONFIG<\/a> block, which is responsible for model configuration and certain global hardware parameters.<\/li>\n\n\n\n<li>The <strong>plant<\/strong> subsystem contains the model of the system to be controlled, whereas the controller side contains the controller. This is typically the model of the power system itself (e.g. converter, sources, grid, machine, sensors,\u2026).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A typical arrangement of the overall model is shown below:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"472\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/Simulink-PLECS-model-components-1-1024x472.png\" alt=\"\" class=\"wp-image-37889\" style=\"width:591px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/Simulink-PLECS-model-components-1-1024x472.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/Simulink-PLECS-model-components-1-300x138.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/Simulink-PLECS-model-components-1-768x354.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/09\/Simulink-PLECS-model-components-1.png 1058w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Typical organization of Simulink (or PLECS) files for use with imperix controllers.<\/figcaption><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">The plant subsystem is optional but strongly recommended for pre-validation of the implemented control algorithms.<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2-Implementing-the-control-algorithms\"><\/span>2. Implementing the control algorithms<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With Simulink or PLECS, application-level control algorithms can be easily developed, similar to any other simulation model, thanks to numerous pre-existing blocks. Indeed, both Simulink and PLECS are specifically designed to enable automated code generation from the vast majority of their blocks. In practice, only the few blocks that lead to non-deterministic execution in real time are not supported (this is notably the case for some optimization algorithms, which feature a non-predictable convergence time).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In addition to the standard blocksets, the ACG SDK provides two libraries specifically for imperix products:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>Control library<\/strong> contains target peripheral blocks, i.e.,<span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\"> functions and resources specific to imperix control equipment, such as <a href=\"https:\/\/imperix.com\/doc\/software\/analog-data-acquisition\">ADC<\/a>, <a href=\"https:\/\/imperix.com\/doc\/software\/pulse-width-modulator\">PWM<\/a>, <a href=\"https:\/\/imperix.com\/doc\/software\/general-purpose-inputs\">GPI<\/a>\/<a href=\"https:\/\/imperix.com\/doc\/software\/general-purpose-outputs\">GPO<\/a>, etc., as well as <a href=\"https:\/\/imperix.com\/doc\/help\/real-time-communication-protocols\">communication options<\/a>.<\/span> These blocks are typically used on the controller side of a Simulink\/PLECS model.<\/li>\n\n\n\n<li>The <strong>Power library<\/strong> contains simulation models for individual imperix power products - such as the <a href=\"https:\/\/imperix.com\/doc\/software\/half-bridge-module\">PEB<\/a> modules - or system-level components like the <a href=\"https:\/\/imperix.com\/doc\/software\/motor-testbench\">motor test bench<\/a> or the <a href=\"https:\/\/imperix.com\/doc\/software\/programmable-inverter\">programmable inverter<\/a>. These blocks are typically used on the plant side of a Simulink\/PLECS model. Specific getting-started instructions are provided in <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-imperix-power-library\">Getting Started with the Power Library<\/a>.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">In Simulink, the libraries can be accessed by selecting any imperix block in the model and pressing Ctrl+L.<br>In PLECS, pressing Ctrl+L can be done at any time.<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3-Modeling-and-simulating-the-system\"><\/span>3. Modeling and simulating the system<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With the imperix ACG SDK, a unique Simulink or PLECS model (i.e., a single file) can be used for both simulation (offline, on a computer) and code generation (i.e., the production of a binary executable for real-time use on a controller). There are hence two possible&nbsp;<strong>model execution purposes<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In&nbsp;<strong>Simulation&nbsp;<\/strong>mode, the complete Simulink\/PLECS model is simulated, including both the&nbsp;<em>Controller<\/em> and the&nbsp;<em>Plant&nbsp;<\/em>subsystems. The model uses the configured solver parameters (see below).<\/li>\n\n\n\n<li>In&nbsp;<strong>Automated Code Generation<\/strong>&nbsp;mode, C++ code is automatically generated by the Simulink\/PLECS Coder engine. All signals coming to and from the&nbsp;<em>Plant<\/em> subsystem are ignored and replaced by the analog and digital inputs\/outputs of the real hardware.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">As such:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>Controller subsystem<\/strong> is useful for both&nbsp;offline simulation and code generation. To support this, each block of the Control library contains two subsystems:\n<ul class=\"wp-block-list\">\n<li>One for simulation (offline) that holds an accurate model to simulate the controller hardware itself (e.g., execution delays, driver latencies).<\/li>\n\n\n\n<li>One for code generation (runtime) that translates data flows and parameters from the graphical model directly into calls to the underlying C\/C++ hardware driver routines.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>The <strong>Plant subsystem<\/strong> is only considered during&nbsp;offline simulation. As such, blocks from the Power library contain only a simulation model and do not generate any code during code generation.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In Simulink, the <strong>model execution purpose<\/strong>&nbsp;can be selected in the <a href=\"https:\/\/imperix.com\/doc\/software\/config-control-task-configuration\">CONFIG<\/a> block (see below). In PLECS, both simulation (Ctrl+T) and code generation (Ctrl+Alt+B) can be launched without first making such a selection.<\/p>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"621\" height=\"212\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/ACG_config.png\" alt=\"Model execution purpose\" class=\"wp-image-112\" style=\"width:409px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/ACG_config.png 621w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/ACG_config-300x102.png 300w\" sizes=\"auto, (max-width: 621px) 100vw, 621px\" \/><figcaption class=\"wp-element-caption\">Selectable model execution purpose, thanks to the CONFIG block.<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Control discretization and sampling<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To accurately represent real-world operation, where the control implementation is executed within a CPU interrupt routine, that portion of the model must be simulated with a discrete time step corresponding to that interrupt execution rate. By contrast, the rest of the model (the content of the Plant subsystem) is best represented by continuous-time signals to accurately simulate physical electrical dynamics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The peripheral blocks from the Control library (such as ADC and PWM) serve as the essential interface between these two domains. Their integrated simulation models ensure that sampling instants, carrier phase shifts, execution times, and various hardware delays are accurately modeled.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To ensure accurate modeling and valid offline simulation, these mechanisms must be well understood. Because their implementations vary, users should consult the environment-specific documentation to ensure accurate modeling in either Simulink or PLECS. Further details are provided in the following dedicated pages:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-simulink\">Simulation essentials with Simulink (PN135)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\">Simulation essentials with PLECS (PN137)<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Users interested in learning more about how imperix controllers operate can refer to <a href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\">PN261<\/a>. More details on their firmware architecture and the FPGA-based resources are also provided in <a href=\"https:\/\/imperix.com\/doc\/help\/architecture-of-imperix-controllers\">PN253<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4-Tuning-the-control-algorithms\"><\/span>4. Tuning the control algorithms<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The simulation models provide realistic results because the relevant dynamics are accurately represented in both the controller and the plant. On the controller side, effects such as computation time and driver delays are explicitly modeled in the Control library blocks, whereas the plant is accurately modeled using the Power library. This level of fidelity allows the control implementation to be validated in offline simulation and enables controller tuning even before generating the runtime code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is therefore highly recommended to first test and validate the control implementation in simulation, as this significantly reduces the time required for laboratory validation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For readers seeking a deeper understanding, additional information on the interrupt-based control execution is given in <a href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\">PN261<\/a>. The common sampling configurations are also presented in <a href=\"https:\/\/imperix.com\/doc\/help\/timing-configuration-on-imperix-controllers\">PN259<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5-Generating-real-time-code\"><\/span>5. Generating real-time code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once validated in an offline simulation, the control code can be automatically generated for deployment on an imperix controller. This procedure uses automated code-generation tools from Simulink or PLECS that leverage the target-specific drivers embedded in each peripheral block of the Control library.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The build procedure varies slightly between the Simulink and PLECS environments. The exact procedures are detailed in <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">PN138<\/a>, but are as simple as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On Simulink, set the Model execution purpose to \"Automated Code Generation\" in the CONFIG block, select the right controller generation in the \"Code gen.\" tab, and build the model (Ctrl+B shortcut).<\/li>\n\n\n\n<li>On PLECS, in the Coder &gt; Coder option window, select the right target generation from the target list, and click the \"Build\" button.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-warning\" role=\"alert\">If Simulink throws the error <strong>\"Dot indexing\u00a0is\u00a0not\u00a0supported for variables of this type,\"<\/strong> this generally means that no compiler is adequately installed. Suitable instructions can be found on <a data-type=\"link\" data-id=\"https:\/\/ch.mathworks.com\/matlabcentral\/fileexchange\/52848-matlab-support-for-mingw-w64-c-c-fortran-compiler\" href=\"https:\/\/ch.mathworks.com\/matlabcentral\/fileexchange\/52848-matlab-support-for-mingw-w64-c-c-fortran-compiler\">their website<\/a>. The whole integration process of the imperix ACG SDK is also documented in detail in <a href=\"https:\/\/imperix.com\/doc\/help\/installation-guide-acg-sdk\">PN133<\/a>.<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">This process translates the graphical model into C++ code and compiles it with target-specific drivers for peripherals like ADCs and PWM modules. It is mandatory to specify the controller generation (Gen 3 vs. Gen 4) during this stage, as the compilation must account for hardware-specific instructions and unique memory architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the end of a successful build, an executable (.elf) is generated for flashing onto the controller, as described in the subsequent section.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Programming-the-hardware-controller\"><\/span>Programming the hardware controller<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After the code is generated from the Simulink or PLECS model, the next steps are:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1-Flashing-the-code\"><\/span>1. Flashing the code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">As introduced in <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">PN138<\/a>, to flash the code onto an imperix hardware controller, users must first establish a connection between the host PC and the target(s) using an Ethernet cable. The connection can be direct (point-to-point) or through an Ethernet local network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When Cockpit is launched, it automatically creates a new project with the executable path pre-filled. Deployment is achieved by clicking \"Link target\" and selecting the desired target from the list of detected targets. The code is then automatically downloaded and launched on the selected target. More details on this  procedure are provided in <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">PN138<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2-Interacting-with-the-target\"><\/span>2. Interacting with the target<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once the code is running, interaction is primarily managed through Cockpit, where the operator must explicitly <em>enable PWM outputs<\/em> to generate gating signals, even though the control algorithm runs continuously upon launch. Users can monitor and modify defined variables in real time using modules such as the <em>Scope<\/em>, <em>Rolling Plot<\/em>, or <em>Variables <\/em>module, and tune parameters without stopping execution. Comprehensive instructions on using these tools can be found in the <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\">Cockpit user guide<\/a>.<\/p>\n\n\n\n<h2 id=\"PN134:GettingstartedwithACGSDKonSimulink-Furtherreadings\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Further-readings\"><\/span>Further readings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After a first code has been generated and tested, it is highly recommended to read the following pages, which provide tips and tricks specific to the employed software environment:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-simulink\">Simulation essentials with Simulink<\/a>&nbsp;guides the reader through offline simulation using <strong>Simulink<\/strong>.<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\">Simulation essentials with PLECS<\/a>&nbsp;guides the reader through offline simulation using <strong>PLECS<\/strong>.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This article provides getting-started instructions for first-time users of the imperix ACG SDK. It focuses on the typical workflow for simulation and automated code generation&#8230;<\/p>\n","protected":false},"author":2,"featured_media":39361,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[12,3],"tags":[],"software-environments":[103,104],"provided-results":[],"related-products":[50,31,32,92,166,110],"guidedreadings":[],"tutorials":[122,152,132,126,131,124,125,148,123,127,128],"user-manuals":[177],"coauthors":[63],"class_list":["post-38395","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-getting-started-acg-sdk","category-help","software-environments-matlab","software-environments-plecs","related-products-acg-sdk","related-products-b-board-pro","related-products-b-box-rcp","related-products-b-box-micro","related-products-b-box-rcp-3-0","related-products-tpi","tutorials-active-front-end-afe","tutorials-active-power-filter","tutorials-back-to-back-three-phase-converter-with-grid-tied-lcl-filter","tutorials-current-controlled-buck-converter","tutorials-direct-torque-control-of-a-permanent-magnet-synchronous-motor","tutorials-field-oriented-control","tutorials-grid-following-inverter-gfli","tutorials-isop-operation-with-isolated-dc-dc-converter","tutorials-neutral-point-clamped-inverter-npc","tutorials-parallel-operation-of-grid-forming-inverters","tutorials-single-phase-totem-pole-pfc-rectifier","user-manuals-getting-started-with-acg-sdk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Getting started with the ACG SDK - imperix<\/title>\n<meta name=\"description\" content=\"This article is a quick-start guide for programming imperix controllers using the ACG SDK kit on Simulink or PLECS.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting started with the ACG SDK - imperix\" \/>\n<meta property=\"og:description\" content=\"This article is a quick-start guide for programming imperix controllers using the ACG SDK kit on Simulink or PLECS.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-15T14:36:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-13T12:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/feature_image_2025.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"334\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Julien Orsinger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Orsinger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk\"},\"author\":{\"name\":\"Julien Orsinger\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/65ef663818eab76f53cc627ab80e0a51\"},\"headline\":\"Getting started with the imperix ACG SDK\",\"datePublished\":\"2025-12-15T14:36:53+00:00\",\"dateModified\":\"2026-05-13T12:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk\"},\"wordCount\":2273,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/feature_image_2025.png\",\"articleSection\":[\"Getting started with ACG SDK\",\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk\",\"name\":\"Getting started with the ACG SDK - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/feature_image_2025.png\",\"datePublished\":\"2025-12-15T14:36:53+00:00\",\"dateModified\":\"2026-05-13T12:00:00+00:00\",\"description\":\"This article is a quick-start guide for programming imperix controllers using the ACG SDK kit on Simulink or PLECS.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/feature_image_2025.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/feature_image_2025.png\",\"width\":500,\"height\":334},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Knowledge base\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Product notes\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/category\\\/help\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Getting started with the imperix ACG SDK\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"name\":\"imperix\",\"description\":\"power electronics\",\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/imperix.com\\\/doc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\",\"name\":\"imperix\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"width\":350,\"height\":120,\"caption\":\"imperix\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/65ef663818eab76f53cc627ab80e0a51\",\"name\":\"Julien Orsinger\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g6545a7220411572e799ad58574cce259\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g\",\"caption\":\"Julien Orsinger\"},\"description\":\"Julien is a senior power electronics engineer. On the knowledge base, he is acting as the editorial manager and is therefore the co-author of numerous articles on a broad variety of topics.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/julien-orsinger-640ab2129\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/orsinger\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Getting started with the ACG SDK - imperix","description":"This article is a quick-start guide for programming imperix controllers using the ACG SDK kit on Simulink or PLECS.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk","og_locale":"en_US","og_type":"article","og_title":"Getting started with the ACG SDK - imperix","og_description":"This article is a quick-start guide for programming imperix controllers using the ACG SDK kit on Simulink or PLECS.","og_url":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk","og_site_name":"imperix","article_published_time":"2025-12-15T14:36:53+00:00","article_modified_time":"2026-05-13T12:00:00+00:00","og_image":[{"width":500,"height":334,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/feature_image_2025.png","type":"image\/png"}],"author":"Julien Orsinger","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julien Orsinger","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk"},"author":{"name":"Julien Orsinger","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/65ef663818eab76f53cc627ab80e0a51"},"headline":"Getting started with the imperix ACG SDK","datePublished":"2025-12-15T14:36:53+00:00","dateModified":"2026-05-13T12:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk"},"wordCount":2273,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/feature_image_2025.png","articleSection":["Getting started with ACG SDK","Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk","url":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk","name":"Getting started with the ACG SDK - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/feature_image_2025.png","datePublished":"2025-12-15T14:36:53+00:00","dateModified":"2026-05-13T12:00:00+00:00","description":"This article is a quick-start guide for programming imperix controllers using the ACG SDK kit on Simulink or PLECS.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/feature_image_2025.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/12\/feature_image_2025.png","width":500,"height":334},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Knowledge base","item":"https:\/\/imperix.com\/doc\/"},{"@type":"ListItem","position":2,"name":"Product notes","item":"https:\/\/imperix.com\/doc\/category\/help"},{"@type":"ListItem","position":3,"name":"Getting started with the imperix ACG SDK"}]},{"@type":"WebSite","@id":"https:\/\/imperix.com\/doc\/#website","url":"https:\/\/imperix.com\/doc\/","name":"imperix","description":"power electronics","publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imperix.com\/doc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/imperix.com\/doc\/#organization","name":"imperix","url":"https:\/\/imperix.com\/doc\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","width":350,"height":120,"caption":"imperix"},"image":{"@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/65ef663818eab76f53cc627ab80e0a51","name":"Julien Orsinger","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g6545a7220411572e799ad58574cce259","url":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g","caption":"Julien Orsinger"},"description":"Julien is a senior power electronics engineer. On the knowledge base, he is acting as the editorial manager and is therefore the co-author of numerous articles on a broad variety of topics.","sameAs":["https:\/\/www.linkedin.com\/in\/julien-orsinger-640ab2129\/"],"url":"https:\/\/imperix.com\/doc\/author\/orsinger"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/38395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=38395"}],"version-history":[{"count":92,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/38395\/revisions"}],"predecessor-version":[{"id":48630,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/38395\/revisions\/48630"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/39361"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=38395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=38395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=38395"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=38395"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=38395"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=38395"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=38395"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=38395"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=38395"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=38395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}