{"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-01-19T14:31:30","modified_gmt":"2026-01-19T14:31:30","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_82_2 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>This article provides getting-started instructions for first-time users of the imperix ACG SDK. It focuses on the typical workflow associated with the simulation and automated code generation intended for <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>The article focuses on developing code for the controllers&#8217; CPU. Information regarding the implementation of programmable logic to the devices&#8217; FPGA is given in <a href=\"https:\/\/imperix.com\/doc\/help\/fpga-development-on-imperix-controllers\">PN169<\/a>. Similarly, users interested in writing C\/C++ code manually (as opposed to using code generation) should refer to a separate article about 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>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><strong>Pre-requisites<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Working with Matlab requires requires Simulink, Matlab Coder, Simulink Coder, and Embedded Coder. Similarly, Working with PLECS requires PLECS Coder. These software should be installed first. Related instructions 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 should be installed first. Related instructions 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 freely installed, but a license is required for executing the run-time 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>The&nbsp;<a href=\"https:\/\/imperix.com\/software\/acg-sdk\">ACG SDK<\/a>&nbsp;is a Software Development Kit (SDK) for use as a complement to Matlab Simulink or PLEXIM PLECS, enabling engineers to program imperix controllers directly from these softwares. It includes:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 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 only used in offline simulation mode and contains simulation models of imperix's power products (e.g. power modules, filters, motors, etc.).<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 BBOS <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 as well as the necessary SDK have been previously installed and properly configured. If needed, specific instructions are given in <a href=\"https:\/\/imperix.com\/doc\/help\/installation-guide-acg-sdk\">Installation guide for the ACG SDK<\/a>.<\/div>\n\n\n\n<p>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 will support both offline simulation and code generation:\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> in order 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>:\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 <a href=\"https:\/\/imperix.com\/doc\/help\/fpga-development-on-imperix-controllers\">FPGA development on imperix controllers<\/a>. This requires the installation of the Vivado Design Suite, which can be used with a free license on all imperix controllers. High-Level Synthesis (HLS) workflows are also supported and relevant documentation can be found in <a href=\"https:\/\/imperix.com\/doc\/implementation\/high-level-synthesis-for-fpga\">High-Level Synthesis for FPGA developments<\/a>.<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"PN133:InstallationguideforimperixACGSDK-Productdescription\"><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>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>Essentially, three options are available:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Most users prefer starting <strong>from an example<\/strong> found on the imperix <a href=\"https:\/\/imperix.com\/doc\/filter-results?note-type=example\">knowledge base<\/a>, which offer 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, leveraging a basic template is recommended, notably as it implements a clean separation of 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>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 contains the part that represents 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 the model configuration as well as some global system parameters.<\/li>\n\n\n\n<li>The <strong>plant<\/strong> subsystem contains the model of the system to be controlled, as opposed to the controller side. 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>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 is strongly recommended as a support to the 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>With Simulink or PLECS, application-level control algorithms can be easily developed similarly 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 blocks leading to a non-deterministic execution in real time are not supported (this is notably the case of some optimization algorithms, which feature a non-predictable convergence time).<\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">Imperix products are equally supported in Simulink and PLECS.<\/div>\n\n\n\n<p>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>, containing 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. or even <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>, containing 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 given 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>With the imperix ACG SDK, a unique Simulink or PLECS model (i.e. a single file) can be used for both simulation (offline, on the computer) and code generation (i.e. the production of a binary executable, for use in real time on a controller). There are hence two possible&nbsp;<strong>model execution purpose<\/strong>s:<\/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 from and going in the&nbsp;<em>Plant<\/em>  subsystem are ignored and replaced by the analog inputs and the digital inputs\/outputs of the real hardware.<\/li>\n<\/ul>\n\n\n\n<p>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. In order 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 only contain a simulation model and do not infer any code during code generation.<\/li>\n<\/ul>\n\n\n\n<p>In Simulink, the selection of the&nbsp;<strong>model execution purpose<\/strong>&nbsp;can be made in the <a href=\"https:\/\/imperix.com\/doc\/software\/config-control-task-configuration\">CONFIG<\/a> block (see below). In PLECS, both simulation (Ctrl+T) or code generation (Ctrl+alt+B) can be launched without having to make such a selection first.<\/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>To accurately represent real-world operation, where the control implementation (the content of the Controller subsystem) is executed within a CPU interrupt routine, that portion of the model must be simulated using a discrete time step that corresponds to the interrupt execution frequency. By contrast, the rest of the model (the content of the Plant subsystem) is best represented using continuous-time signals to accurately simulate physical electrical dynamics.<\/p>\n\n\n\n<p>The peripheral blocks from the Control library, located within the Controller subsystem, 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>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<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>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 modelled in the Control library blocks, whereas the plant is accurately modelled 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>It is therefore highly recommended to first test and validate the control implementation in simulation, as this significantly reduces the time required for experimental validation in the laboratory.<\/p>\n\n\n\n<p>For readers seeking a deeper understanding, additional information on the various delays involved in the algorithm execution, as modelled in the simulation environment, is provided in <a href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\">Control delay identification<\/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>Once validated in offline simulation, the control code can be generated automatically for deployment on an imperix controller. This procedure utilizes automated code generation tools from Simulink or PLECS, which leverage the target-specific drivers embedded within each peripheral block of the Control library.<\/p>\n\n\n\n<p>The build procedure varies slightly between Simulink and PLECS environment. The exact procedures are detailed in <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">PN138<\/a>, but it is 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<p>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 architectures.<\/p>\n\n\n\n<p>At the end of a successful build, an executable file (.elf) is generated to be flashed 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>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>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. Connected targets are normally auto-detected by the Cockpit software and appear in the user interface without requiring manual configuration.<\/p>\n\n\n\n<p>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 these essential procedures 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>Once the code is running, interacting with the running code is primarily managed through Cockpit, where the operator must explicitly <em>enable PWM outputs<\/em> to physically generate gating signals, even though the control algorithm runs continuously upon launch. Users can monitor and alter defined variables in real-time using modules like the <em>Scope<\/em>, <em>Rolling Plot<\/em>, or <em>Variables <\/em>module, and can 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 class=\"wp-block-heading\" id=\"PN134:GettingstartedwithACGSDKonSimulink-Furtherreadings\"><span class=\"ez-toc-section\" id=\"Further-readings\"><\/span>Further readings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>It is highly recommended to read the following 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<\/a>&nbsp;guides the reader through offline simulation using ACG SDK and Simulink.<\/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 ACG SDK and PLECS.<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">Programming and operating imperix controllers<\/a> addresses how to deploy the control code onto an imperix controller.<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\">Cockpit user guide (PN300)<\/a> gives a full guide on how to use Cockpit monitoring software.<\/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 associated with the simulation and automated&#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 v27.3 - 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-01-19T14:31:30+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=\"12 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-01-19T14:31:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/getting-started-with-acg-sdk\"},\"wordCount\":2309,\"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-01-19T14:31:30+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-01-19T14:31:30+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":"12 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-01-19T14:31:30+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk"},"wordCount":2309,"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-01-19T14:31:30+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":82,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/38395\/revisions"}],"predecessor-version":[{"id":39357,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/38395\/revisions\/39357"}],"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}]}}