{"id":23621,"date":"2025-04-18T20:40:36","date_gmt":"2025-04-18T20:40:36","guid":{"rendered":"https:\/\/liquidinstruments.com\/?p=23621"},"modified":"2025-08-29T04:40:49","modified_gmt":"2025-08-29T04:40:49","slug":"using-ip-cores-in-mcc","status":"publish","type":"post","link":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/","title":{"rendered":"Using IP cores for faster customization in Moku Cloud Compile","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row][vc_column]\n    <div data-component='call_to_action' class='vc_row-fluid cta w-full mx-auto cta-outline'>\n      <div class='flex w-full gap-4 flex-col items-center'>\n      \n        <div class='max-w-prose wpb_column vc_column_container vc_col-sm-12'>\n          <div class='vc_column-inner'>\n            \n            <p>This white paper outlines how to use IP cores in <a href=\"https:\/\/liquidinstruments.com\/moku-cloud-compile\/\" target=\"_blank\" rel=\"noopener\">Moku Cloud Compile<\/a>, including eight precompiled IP cores for common signal processing functions and custom AMD Vivado IP core integration. Each core is described with usage examples and test setups using Moku hardware.&nbsp;The document also guides users through uploading custom IPs.<\/p>\n\n          <\/div>\n        <\/div>\n        <div class=' flex flex-row gap-4 xs:flex-col'>\n          <a class=\"button relative gap-2 items-center blue filled medium  \" href=\"https:\/\/liquidinstruments.com\/moku-cloud-compile\/\" title=\"Explore Moku Cloud Compile\" target=\"\"><span class=\"flex-1\">Explore Moku Cloud Compile<\/span><\/a>\n  <a class=\"button relative gap-2 items-center blue filled medium  \" href=\"https:\/\/liquidinstruments.com\/product\/moku-pro\/\" title=\"Configure Moku:Pro\" target=\"\"><span class=\"flex-1\">Configure Moku:Pro<\/span><\/a>\n  \n  \n        <\/div>\n      <\/div>\n    <\/div>[\/vc_column][\/vc_row][vc_column][\/vc_column][vc_column_text css=&#8221;&#8221;]<\/p>\n<h2><span class=\"TextRun SCXW9813772 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW9813772 BCX0\" data-ccp-parastyle=\"heading 1\">Introduction<\/span><\/span><span class=\"EOP SCXW9813772 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559737&quot;:-20,&quot;335559738&quot;:240,&quot;335559739&quot;:120,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/h2>\n<p><span data-contrast=\"none\">Moku Cloud Compile is a powerful tool available on Moku devices. Moku FPGA-based test and measurement devices allow users to deploy custom VHDL and Verilog code to the hardware. With Moku Cloud Compile, you can extend and customize instrument functionality by integrating your own designs with existing instruments to create new capabilities made possible by Moku\u2019s unique Instrument-on-Chip architecture.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Moku Cloud Compile offers eight precompiled IP cores optimized for arithmetic, filtering, waveform generation, and correlation analysis, compatible with all Moku devices. These cores are ready to instantiate and simplify common digital signal processing tasks. <\/span><span data-contrast=\"none\">Users can also import their own IP cores created in AMD Vivado by uploading <\/span><b><span data-contrast=\"none\">.xci<\/span><\/b><span data-contrast=\"none\"> files, enabling seamless integration of custom hardware blocks into Moku Cloud Compile designs.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">This document outlines the in\/out ports, functionality, and example usage of each IP core, and provides guidance on building and testing custom designs using <\/span><a href=\"https:\/\/liquidinstruments.com\/multi-instrument-mode\/\"><span data-contrast=\"none\">Multi-Instrument Mode<\/span><\/a><span data-contrast=\"none\">. Together, these features make Moku Cloud Compile a more powerful platform for both rapid prototyping and advanced signal processing applications.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<h2><span class=\"TextRun SCXW236742301 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW236742301 BCX0\" data-ccp-parastyle=\"heading 1\">Eight pre<\/span><span class=\"NormalTextRun SCXW236742301 BCX0\" data-ccp-parastyle=\"heading 1\">compiled IP cores<\/span><\/span><span class=\"EOP SCXW236742301 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559737&quot;:2176,&quot;335559738&quot;:240,&quot;335559739&quot;:120,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/h2>\n<p class=\"NormalLight\" style=\"margin-top: 6.0pt;\"><span class=\"TextRun SCXW267409161 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW267409161 BCX0\">This section descri<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\">bes<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\"> the eight pre<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\">compiled IP cores<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\"> listed in Table 1<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\">, detailing their input and output port specifications and functionalit<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\">y<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\">. <\/span><span class=\"NormalTextRun SCXW267409161 BCX0\">Example<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\"> use cases are provided for each core. Owing to their native integration within the M<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW267409161 BCX0\"> backend, these IP cores can be instantiated directly within user designs, thereby streamlining the development process and reducing implementation overhead.<\/span><\/span><span class=\"EOP SCXW267409161 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW147413368 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW147413368 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW147413368 BCX0\"><span class=\"TextRun SCXW147413368 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW147413368 BCX0\" data-ccp-parastyle=\"caption\">1<\/span><\/span><\/span><span class=\"TextRun SCXW147413368 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW147413368 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW147413368 BCX0\" data-ccp-parastyle=\"caption\">The names and descriptions of the eight precompiled IP cores.<\/span><\/span><span class=\"EOP SCXW147413368 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<table style=\"font-weight: 400;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"9\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">No.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">IP core name<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Description<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">1<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">AddSubtract_16<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Dynamically reconfigurable adder\/subtractor module.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">2<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">CIC_Dec_3Ordx8<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Cascaded Integrator-Comb (CIC) decimator with a decimation factor of 8 and filter order of 3.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">3<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Cordic_Translate_16<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Converter that transforms 16-bit real and imaginary inputs into amplitude and phase outputs.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">4<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Counter_32<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">32-bit counter supporting up\/down counting with synchronous clear functionality.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"6\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">5<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">SineGen_48<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Sine and cosine waveform generator with a 48-bit frequency step resolution.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"7\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">6<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">FIR_Filter_7coef<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Full-rate FIR low-pass filter with fixed coefficients.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"8\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">7<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">FFT_1024<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">1,024-point fast Fourier transform (FFT) block with selectable forward or inverse transform.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"9\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">8<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">FFT_65536<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">65,536-point fast Fourier transform (FFT) block with selectable forward or inverse transform and configurable output scaling.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span class=\"TextRun SCXW218367639 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW218367639 BCX0\" data-ccp-parastyle=\"heading 2\">1. <\/span><\/span><span class=\"TextRun SCXW218367639 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW218367639 BCX0\" data-ccp-parastyle=\"heading 2\">AddSubtract_16<\/span><\/span><span class=\"EOP SCXW218367639 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:120,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/h2>\n<p><span class=\"TextRun SCXW203437876 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW203437876 BCX0\">The <\/span><\/span><span class=\"TextRun SCXW203437876 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW203437876 BCX0\">AddSubtract_16<\/span><\/span><span class=\"TextRun SCXW203437876 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW203437876 BCX0\"> module implements a dynamically configurable arithmetic unit capable of performing either addition or subtraction on two signed 16-bit inputs. Its operation is governed by the following logic:<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\">$latex S =left{ begin{array}{rl}<br \/>\nA + B  text{(add: HIGH)} \\<br \/>\nA &#8211; B  text{(add: LOW)}<br \/>\nend{array} right.$<\/p>\n<p><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\">The input and output ports of the <\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\">AddSubtract_16<\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\"> core are detailed in Table 2.<\/span> <span class=\"NormalTextRun SCXW209888438 BCX0\">Both input buses (A and B) and the output (S) are treated as signed 16-bit integers (int16). The arithmetic operation is controlled by the <\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\">add<\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\"> signal, while the <\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW209888438 BCX0\">ce<\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\"> (clock enable) signal enables or disables the <\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\">clock<\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\"> of the <\/span><span class=\"NormalTextRun SCXW209888438 BCX0\">module. When <\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW209888438 BCX0\">ce<\/span><\/span><span class=\"TextRun SCXW209888438 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209888438 BCX0\"> is held high, the module remains continuously active.<\/span><\/span><span class=\"EOP SCXW209888438 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\">Table 2: Port definitions for the AddSubtract_16 module, detailing its input and output signal interfaces.<\/p>\n<table data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"7\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"69905\">\n<p style=\"text-align: center;\">Name<\/p>\n<\/td>\n<td style=\"text-align: center;\" data-celllook=\"69905\">Direction<\/td>\n<td style=\"text-align: center;\" data-celllook=\"69905\">Description<\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"2\">\n<td data-celllook=\"4369\">A[15:0]<\/td>\n<td data-celllook=\"4369\">Input<\/td>\n<td data-celllook=\"4369\">Input A bus.<\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"3\">\n<td data-celllook=\"4369\">B[15:0]<\/td>\n<td data-celllook=\"4369\">Input<\/td>\n<td data-celllook=\"4369\">Input B bus.<\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"4\">\n<td data-celllook=\"4369\">clk<\/td>\n<td data-celllook=\"4369\">Input<\/td>\n<td data-celllook=\"4369\">Clock signal, rising edge.<\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"5\">\n<td data-celllook=\"4369\">add<\/td>\n<td data-celllook=\"4369\">Input<\/td>\n<td data-celllook=\"4369\">Controls the operation performed by AddSubtract_16.<\/p>\n<p>(HIGH = Addition, LOW=subtraction)<\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"6\">\n<td data-celllook=\"4369\">ce<\/td>\n<td data-celllook=\"4369\">Input<\/td>\n<td data-celllook=\"4369\">Active-HIGH clock enable. Set to constant high.<\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"7\">\n<td data-celllook=\"4369\">S[15:0]<\/td>\n<td data-celllook=\"4369\">Output<\/td>\n<td data-celllook=\"4369\">Output bus.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\"> <span class=\"TextRun SCXW115295849 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW115295849 BCX0\">Code 1 provides a VHDL example demonstrating<\/span><span class=\"NormalTextRun SCXW115295849 BCX0\"> how to instantiate<\/span><span class=\"NormalTextRun SCXW115295849 BCX0\"> the module and control using the 0th bit<\/span><span class=\"NormalTextRun SCXW115295849 BCX0\"> (least significant bit, LSB)<\/span><span class=\"NormalTextRun SCXW115295849 BCX0\"> of Control0. <\/span><span class=\"NormalTextRun SCXW115295849 BCX0\">The Multi-Instrument Mode configuration is illustrated in Figure 1. Test results shown in Figures 2 and 3,<\/span><span class=\"NormalTextRun SCXW115295849 BCX0\"> conducted using <\/span><span class=\"NormalTextRun SCXW115295849 BCX0\">Moku hardware<\/span><span class=\"NormalTextRun SCXW115295849 BCX0\">,<\/span><span class=\"NormalTextRun SCXW115295849 BCX0\"> confirm correct subtraction and addition behavior under varying signal conditions.<\/span><\/span><span class=\"EOP SCXW115295849 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW66376911 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW66376911 BCX0\"><span class=\"TextRun SCXW66376911 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">1<\/span><\/span><\/span><span class=\"TextRun SCXW66376911 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">The VHDL example demonstrates the instantiation of the AddSubtract_16 module, where <\/span><span class=\"SpellingError SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">OutputA<\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\"> represents the result of either <\/span><span class=\"SpellingError SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">InputA<\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\"> + <\/span><span class=\"SpellingError SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">InputB<\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\"> or <\/span><span class=\"SpellingError SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">InputA<\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\"> &#8211; <\/span><span class=\"SpellingError SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">InputB<\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">, depending on the state of the <\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\">LSB<\/span><span class=\"NormalTextRun SCXW66376911 BCX0\" data-ccp-parastyle=\"caption\"> of the Control0 register.<\/span><\/span><span class=\"EOP SCXW66376911 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>LIBRARY ieee;\r\n\r\nARCHITECTURE Behavioral OF CustomWrapper IS\r\n\r\n\tSIGNAL s_temp : STD_LOGIC_VECTOR(15 DOWNTO 0);\r\n\r\nBEGIN\r\n\r\n\tAddSubtract : AddSubtract_16\r\n\tPORT MAP(\r\n\t\tA =&gt; STD_LOGIC_VECTOR(InputA),\r\n\t\tB =&gt; STD_LOGIC_VECTOR(InputB),\r\n\t\tclk =&gt; clk,\r\n\t\t-- use Control0's 0th bit to control the operation\r\n\t\tadd =&gt; Control0(0),\r\n\t\t-- constant high clock enable\r\n\t\tce =&gt; '1',\r\n\t\tS =&gt; s_temp\r\n\t);\r\n\r\n\tOutputA &lt;= signed(s_temp);\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23808 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_1.png\" alt=\"\" width=\"421\" height=\"215\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_1.png 539w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_1-300x153.png 300w\" sizes=\"(max-width: 421px) 100vw, 421px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW53586853 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW53586853 BCX0\"><span class=\"TextRun SCXW53586853 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">1<\/span><\/span><\/span><span class=\"TextRun SCXW53586853 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">Test configuration for the AddSubtract_16 using <\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">M<\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">. In this setup, <\/span><span class=\"SpellingError SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">InputA<\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\"> and <\/span><span class=\"SpellingError SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">InputB<\/span> <span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">of Moku Cloud Compile <\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">are internally routed from the outputs of the <\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">Moku <\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">Oscilloscope, while the processed output from <\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">M<\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\"> is fed back into the Oscillo<\/span><span class=\"NormalTextRun SCXW53586853 BCX0\" data-ccp-parastyle=\"caption\">scope.<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">As shown in Figure 2,<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> t<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">he two-channel <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">embedded <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">waveform generators<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> in the <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">Moku <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">Oscilloscope<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> are configured to produce a 5<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">\u202f<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">kHz, 500<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">\u202f<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">mV sine wave and a 100<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">\u202f<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">Hz, 5<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\">\u202f<\/span><\/span><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW135933094 BCX0\">V<\/span><span class=\"SpellingError SCXW135933094 BCX0\">pp<\/span> <span class=\"NormalTextRun SCXW135933094 BCX0\">ramp signal with 90% <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">symmetry<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">. With the <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">LSB<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> of Control0 set to 0, M<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> operates in subtraction mode. The observed output on the <\/span><\/span><a class=\"Hyperlink SCXW135933094 BCX0\" href=\"https:\/\/liquidinstruments.com\/products\/integrated-instruments\/oscilloscope\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\" data-ccp-charstyle=\"Hyperlink\">Moku <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\" data-ccp-charstyle=\"Hyperlink\">Oscilloscope<\/span><\/span><\/a><span class=\"TextRun SCXW135933094 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135933094 BCX0\"> confirms the expected subtractor behavior.<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> Subsequently, <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">i<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">n Figure 3,<\/span> <span class=\"NormalTextRun SCXW135933094 BCX0\">the <\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">LSB<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> of Control0 is set to 1, configuring M<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW135933094 BCX0\"> to perform addition. The resulting output confirms the expected adder functionality.<\/span><\/span><span class=\"EOP SCXW135933094 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23676 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_2-1024x719.png\" alt=\"\" width=\"749\" height=\"526\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_2-1024x719.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_2-300x211.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_2-768x539.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_2-600x421.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_2.png 1101w\" sizes=\"(max-width: 749px) 100vw, 749px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW250517589 BCX0\"><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">2<\/span><\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">: M<\/span><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">oku Cloud Compile <\/span><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">outputs subtracted results using two input signals: a 500<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">mVpp<\/span><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">, 5<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">kHz sine wave and a 5<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">Vpp<\/span><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">, 100<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW250517589 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW250517589 BCX0\" data-ccp-parastyle=\"caption\">Hz ramp wave. With Control0(0) set to 0, the system is configured to operate in subtraction mode.<\/span><\/span><span class=\"EOP SCXW250517589 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23677 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_3-1024x721.png\" alt=\"\" width=\"767\" height=\"540\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_3-1024x721.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_3-300x211.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_3-768x541.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_3-600x423.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_3.png 1099w\" sizes=\"(max-width: 767px) 100vw, 767px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW160197593 BCX0\"><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">3<\/span><\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">Moku <\/span><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">Cloud Compile output in response to a 500<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">mV<\/span><span class=\"SpellingError SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">pp<\/span><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\"> 5<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">kHz sine wave and a 5<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">Vpp<\/span><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">,<\/span><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\"> 100<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW160197593 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW160197593 BCX0\" data-ccp-parastyle=\"caption\">Hz ramp wave. With Control0(0) set to 1, the system is configured for addition mode.<\/span><\/span><span class=\"EOP SCXW160197593 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><span class=\"TextRun SCXW1269915 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW1269915 BCX0\">It is important to note that the <\/span><\/span><span class=\"TextRun SCXW1269915 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW1269915 BCX0\">AddSubtract_16<\/span><\/span><span class=\"TextRun SCXW1269915 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW1269915 BCX0\"> module does not include a carry-out mechanism and may therefore experience overflow during arithmetic operations. Specifically, if the sum of Input A + Input B exceeds the signed 16-bit range \\([-2^{15}, 2^{15}]\\) , <span class=\"TextRun SCXW163244894 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW163244894 BCX0\">the output may exhibit a sign inversion due to overflow.<\/span><\/span><\/span><\/span><\/p>\n<p><span data-contrast=\"none\">A common method for detecting potential overflow involves monitoring the most significant bit (MSB) of the operands and the result. No overflow occurs if the inputs have opposite signs. However, if both inputs share the same sign and the output sign differs, this typically indicates an overflow condition. While this paper acknowledges the issue, a detailed discussion of overflow detection and mitigation techniques is beyond its current scope.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">The input sources are configured as a 5<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">Vpp sine wave and a 5<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V DC signal. Theoretically, this combination should produce an output waveform ranging from 2.5<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V to 7.5<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V. However, the Moku:Go hardware is limited to a \u00b15<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V input\/output range (10<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">Vpp). As a result, any portion of the output that exceeds this range will experience a sign inversion due to overflow. This behavior is illustrated in Figure 4, where the portions of the waveform that should lie between 5<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V and 7.5<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V are instead wrapped around and appear between \u22122.5<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V and \u22125<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23678 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_4-1024x721.png\" alt=\"\" width=\"727\" height=\"512\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_4-1024x721.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_4-300x211.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_4-768x540.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_4-600x422.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_4.png 1107w\" sizes=\"(max-width: 727px) 100vw, 727px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW237744048 BCX0\"><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">4<\/span><\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">The addition of a 5<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">Vpp<\/span><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">, <\/span><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">1<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">kHz sine wave and a 5<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">V DC offset results in observable overflow, as the signal exceeds the <\/span><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">\u00b1<\/span><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">5<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW237744048 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">V input range of the <\/span><span class=\"SpellingError SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\">Moku:Go<\/span><span class=\"NormalTextRun SCXW237744048 BCX0\" data-ccp-parastyle=\"caption\"> device. With Control0(0) set to 1, the system operates in addition mode, and a sign inversion in the output confirms the occurrence of overflow.<\/span><\/span><span class=\"EOP SCXW237744048 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span data-contrast=\"none\">2. CIC_Dec_3Ordx8<\/span><\/h2>\n<p><span data-contrast=\"none\">The <\/span><span data-contrast=\"none\">CIC_Dec_3Ordx8<\/span><span data-contrast=\"none\"> module implements a 3rd-order Cascaded Integrator-Comb (CIC) decimation filter with a fixed decimation rate of 8. CIC filters are widely used in multi-rate systems where a high sampling rate needs to be reduced. The architecture relies solely on adders, subtractors, and delays, making it ideal for hardware-efficient downsampling applications such as digital receivers and lock-in amplifiers.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">The input and output ports of the module are summarized in Table 3, while the implementation details such as latency and filter order are provided in Table 4. The module accepts 16-bit signed input samples and produces 25-bit signed output samples. The input interface provides handshake signals (tvalid, tready) for both input and output channels. The filter updates its output only when valid input is received, and the core is ready.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW222843264 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222843264 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW222843264 BCX0\"><span class=\"TextRun SCXW222843264 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222843264 BCX0\" data-ccp-parastyle=\"caption\">3<\/span><\/span><\/span><span class=\"TextRun SCXW222843264 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222843264 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW222843264 BCX0\" data-ccp-parastyle=\"caption\">Port descriptions for the <\/span><\/span><span class=\"TextRun SCXW222843264 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222843264 BCX0\" data-ccp-parastyle=\"caption\">CIC_Dec_3Ordx8<\/span><\/span><span class=\"TextRun SCXW222843264 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222843264 BCX0\" data-ccp-parastyle=\"caption\"> IP core.<\/span><\/span><span class=\"EOP SCXW222843264 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<table style=\"font-weight: 400;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"7\">\n<tbody>\n<tr style=\"text-align: center;\" aria-rowindex=\"1\">\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Name<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Direction<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Description<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">aclk<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Clock signal, rising edge.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tdata [15:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">TDATA for the Data Input Channel. Carries the unprocessed sample data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">TVALID for the Data Input Channel. Used by the external block to signal that it is able to provide data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"5\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">TREADY for the Data Input Channel. Used by the CIC decimator to signal that it is ready to accept data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"6\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tdata [24:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">TDATA for the Data Output Channel. Carries the processed sample data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"7\">\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\">\n<p style=\"text-align: center;\"><span data-contrast=\"none\">TVALID for the Data Output Channel. Asserted by the CIC decimator to signal that it is able to provide sample data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW119685919 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW119685919 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW119685919 BCX0\"><span class=\"TextRun SCXW119685919 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW119685919 BCX0\" data-ccp-parastyle=\"caption\">4<\/span><\/span><\/span><span class=\"TextRun SCXW119685919 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW119685919 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW119685919 BCX0\" data-ccp-parastyle=\"caption\">Configuration parameters of the <\/span><\/span><span class=\"TextRun SCXW119685919 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW119685919 BCX0\" data-ccp-parastyle=\"caption\">CIC_Dec_3Ordx8<\/span><\/span><span class=\"TextRun SCXW119685919 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW119685919 BCX0\" data-ccp-parastyle=\"caption\"> IP core.<\/span><\/span><span class=\"EOP SCXW119685919 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<table style=\"font-weight: 400;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"10\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"4369\">\n<p style=\"text-align: center;\"><span data-contrast=\"none\">Component Name<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<\/td>\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">CIC_Dec_3Ordx8<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"2\">\n<td data-celllook=\"4113\"><span data-contrast=\"none\">Filter Type<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Decimation<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"3\">\n<td data-celllook=\"4112\"><span data-contrast=\"none\">Number of Stages<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">3<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"4\">\n<td data-celllook=\"4112\"><span data-contrast=\"none\">Differential Delay<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">1<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"5\">\n<td data-celllook=\"4112\"><span data-contrast=\"none\">Rate Supported<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">8<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"6\">\n<td data-celllook=\"4112\"><span data-contrast=\"none\">Input Sample Frequency (MSa\/s)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">31.25<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"7\">\n<td data-celllook=\"4112\"><span data-contrast=\"none\">Clock Frequency (MHz)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">31.25<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"8\">\n<td data-celllook=\"4112\"><span data-contrast=\"none\">Input Data Width<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">16<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"9\">\n<td data-celllook=\"4368\"><span data-contrast=\"none\">Output Data Width<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">25<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"10\">\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">Latency<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\">\n<p style=\"text-align: center;\"><span data-contrast=\"none\">15<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span class=\"TextRun SCXW259306005 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW259306005 BCX0\">In the provided VHDL example<\/span><span class=\"NormalTextRun SCXW259306005 BCX0\"> shown in Code 2<\/span><span class=\"NormalTextRun SCXW259306005 BCX0\">, input data is written only when the core is ready (<\/span><\/span><span class=\"TextRun SCXW259306005 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW259306005 BCX0\">s_axis_data_tready<\/span><\/span><span class=\"TextRun SCXW259306005 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW259306005 BCX0\"> is high), and output is captured only when valid data is available (<\/span><\/span><span class=\"TextRun SCXW259306005 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW259306005 BCX0\">m_axis_data_tvalid<\/span><\/span><span class=\"TextRun SCXW259306005 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW259306005 BCX0\"> is high). The output is scaled by truncating to the most significant 16 bits to maintain consistency with the input dynamic range.<\/span> <span class=\"NormalTextRun SCXW259306005 BCX0\">It is important to note that the valid signal must be asserted, and the output should be updated only when this signal is high. Otherwise, the output may exhibit pulsed or intermittent behavior rather than a continuous stream. This occurs because the <\/span><\/span><span class=\"TextRun SCXW259306005 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW259306005 BCX0\">CIC_Dec_3Ordx8<\/span><\/span><span class=\"TextRun SCXW259306005 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"> <span class=\"NormalTextRun SCXW259306005 BCX0\">generates a single valid output sample for every eight clock cycles, in accordance with its decimation factor.<\/span><\/span><span class=\"EOP SCXW259306005 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW207642623 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW207642623 BCX0\"><span class=\"TextRun SCXW207642623 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">2<\/span><\/span><\/span><span class=\"TextRun SCXW207642623 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">VHDL example demonstrating the instantiation of a CIC decimator with an 8<\/span><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">x<\/span><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\"> decimation factor. The signal <\/span><span class=\"SpellingError SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">OutputA<\/span><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\"> represents the <\/span><span class=\"SpellingError SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">downsampled<\/span><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\"> version of the signal <\/span><span class=\"SpellingError SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">InputA<\/span><span class=\"NormalTextRun SCXW207642623 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW207642623 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>LIBRARY ieee;\r\n\r\nARCHITECTURE Behavioral OF CustomWrapper IS\r\n\r\n\tSIGNAL s_axis_data_tready : STD_LOGIC;\r\n\tSIGNAL s_axis_data_tdata : STD_LOGIC_VECTOR(15 DOWNTO 0);\r\n\r\n\tSIGNAL m_axis_data_tvalid : STD_LOGIC;\r\n\tSIGNAL m_axis_data_tdata : STD_LOGIC_VECTOR(31 DOWNTO 0);\r\n\r\nBEGIN\r\n\r\n\tDecimator : CIC_Dec_3Ordx8\r\n\tPORT MAP(\r\n\t\taclk =&gt; clk,\r\n\t\ts_axis_data_tdata =&gt; s_axis_data_tdata,\r\n\t\ts_axis_data_tvalid =&gt; '1', -- always output\r\n\t\ts_axis_data_tready =&gt; s_axis_data_tready,\r\n\t\tm_axis_data_tdata =&gt; m_axis_data_tdata,\r\n\t\tm_axis_data_tvalid =&gt; m_axis_data_tvalid\r\n\t);\r\n\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\r\n\t\t\t-- update input data when CIC is ready\r\n\t\t\tIF s_axis_data_tready THEN\r\n\t\t\t\ts_axis_data_tdata &lt;= STD_LOGIC_VECTOR(InputA);\r\n\t\t\tELSE\r\n\t\t\t\ts_axis_data_tdata &lt;= (OTHERS =&gt; '0');\r\n\t\t\tEND IF;\r\n\r\n\t\t\t-- update Output only when data is valid\r\n\t\t\tIF m_axis_data_tvalid THEN\r\n\t\t\t\t-- Scale data correctly\r\n\t\t\t\tOutputA &lt;= signed(m_axis_data_tdata(24 DOWNTO 9));\r\n\t\t\tEND IF;\r\n\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p><span class=\"TextRun SCXW256596784 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW256596784 BCX0\">A M<\/span><span class=\"NormalTextRun SCXW256596784 BCX0\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW256596784 BCX0\"> test setup uses the <\/span><\/span><a class=\"Hyperlink SCXW256596784 BCX0\" href=\"https:\/\/liquidinstruments.com\/products\/integrated-instruments\/frequency-response-analyzer\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW256596784 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW256596784 BCX0\" data-ccp-charstyle=\"Hyperlink\">Moku <\/span><span class=\"NormalTextRun SCXW256596784 BCX0\" data-ccp-charstyle=\"Hyperlink\">Frequency Response Analyzer<\/span><\/span><\/a><span class=\"TextRun SCXW256596784 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW256596784 BCX0\"> to evaluate the filter\u2019s frequency response is shown in Figure 5. <\/span><span class=\"NormalTextRun SCXW256596784 BCX0\">The frequency response of the CIC filter is of particular interest, as it characterizes the attenuation of out-of-band signals<\/span> <span class=\"NormalTextRun SCXW256596784 BCX0\">and reflects its effectiveness in suppressing aliasing noise during decimation.<\/span> <span class=\"NormalTextRun SCXW256596784 BCX0\">Measured results<\/span><span class=\"NormalTextRun SCXW256596784 BCX0\"> in Figure 6 and Figure 7<\/span><span class=\"NormalTextRun SCXW256596784 BCX0\"> show good alignment with theoretical expectations, accounting for expected discrepancies due to decimation and interpolation artifacts.<\/span><\/span><span class=\"EOP SCXW256596784 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23681 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_5.png\" alt=\"\" width=\"440\" height=\"222\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_5.png 537w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_5-300x151.png 300w\" sizes=\"(max-width: 440px) 100vw, 440px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW103169931 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW103169931 BCX0\"><span class=\"TextRun SCXW103169931 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">5<\/span><\/span><\/span><span class=\"TextRun SCXW103169931 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">:<\/span><\/span> <span class=\"TextRun SCXW103169931 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">M<\/span><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\"> test configuration in which the M<\/span><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">oku Cloud Compile <\/span><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">output is analyzed using <\/span><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\">the Moku<\/span><span class=\"NormalTextRun SCXW103169931 BCX0\" data-ccp-parastyle=\"caption\"> Frequency Response Analyzer.<\/span><\/span><span class=\"EOP SCXW103169931 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23682 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_6.png\" alt=\"\" width=\"844\" height=\"544\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_6.png 993w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_6-300x193.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_6-768x495.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_6-600x387.png 600w\" sizes=\"(max-width: 844px) 100vw, 844px\" \/><\/p>\n<p style=\"text-align: center;\">Figure 6: Frequency response of the CIC_Dec_3Ordx8 IP core as obtained using the Moku Frequency Response Analyzer.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23683 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_7-1024x591.png\" alt=\"\" width=\"716\" height=\"413\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_7-1024x591.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_7-300x173.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_7-768x443.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_7-1536x886.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_7-2048x1182.png 2048w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_7-600x346.png 600w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW49033716 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW49033716 BCX0\"><span class=\"TextRun SCXW49033716 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">7<\/span><\/span><\/span><span class=\"TextRun SCXW49033716 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">Comparison between the simulated and <\/span><span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">implemented<\/span> <span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">responses of the <\/span><\/span><span class=\"TextRun SCXW49033716 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">CIC_Dec_3Ordx8<\/span><\/span><span class=\"TextRun SCXW49033716 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49033716 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW49033716 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h2><span data-contrast=\"none\">3. Cordic_Translate_16<\/span><\/h2>\n<p><span data-contrast=\"none\">The CORDIC core implements the Coordinate Rotation Digital Computer (CORDIC) algorithm, an iterative method used to compute trigonometric functions and, more generally, to solve equations involving hyperbolic and square root operations. The input and output port descriptions are provided in Table 5. This <\/span><span data-contrast=\"none\">Cordic_Translate_16<\/span><span data-contrast=\"none\"> core transforms input signals from their Cartesian representation (real and imaginary components) into their corresponding polar form (amplitude and phase). The total computational latency of the module is 20 clock cycles.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW108762451 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW108762451 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW108762451 BCX0\"><span class=\"TextRun SCXW108762451 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW108762451 BCX0\" data-ccp-parastyle=\"caption\">5<\/span><\/span><\/span><span class=\"TextRun SCXW108762451 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW108762451 BCX0\" data-ccp-parastyle=\"caption\">: Port definitions of <\/span><\/span><span class=\"TextRun SCXW108762451 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW108762451 BCX0\" data-ccp-parastyle=\"caption\">Cordic_Translate_16<\/span><\/span><span class=\"TextRun SCXW108762451 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW108762451 BCX0\" data-ccp-parastyle=\"caption\"> IP core.<\/span><\/span><span class=\"EOP SCXW108762451 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<table style=\"font-weight: 400;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"6\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"69905\">\n<p style=\"text-align: center;\"><b><span data-contrast=\"none\">Name<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<\/td>\n<td style=\"text-align: center;\" data-celllook=\"69905\"><b><span data-contrast=\"none\">Direction<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td style=\"text-align: center;\" data-celllook=\"69905\"><b><span data-contrast=\"none\">Description<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">aclk<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Clock. Active rising edge.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_cartesian_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Handshake signal for channel S_AXIS_CARTESIAN.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_cartesian_tdata [31:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Depending on Functional Configuration, this port has one or two subfields.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">X_IN and Y_IN, X_IN is [15:0] and Y_IN is [31:16]. These are the Cartesian operands.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Each subfield is 16-bit wide. X_IN and Y_IN both have 14 fractional bits and 2 integer bits.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"5\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_dout_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Handshake signal for output channel.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"6\">\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_dout_tdata [31:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\">\n<p style=\"text-align: center;\"><span data-contrast=\"none\">Depending on Functional Configuration this port contains the following subfields. AMPLITUDE_OUT, PHASE_OUT.&nbsp;<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span data-contrast=\"none\">AMPLITUDE_OUT is [15:0] and PHASE_OUT is [31:16].<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span data-contrast=\"none\">Each subfield is 16-bit wide. AMPLITUDE_OUT has 14 fractional bits and 2 integer bits. PHASE_OUT has 13 fractional bits and 3 integer bits with a unit of radians.<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span class=\"TextRun SCXW214632477 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW214632477 BCX0\">The <\/span><\/span><span class=\"TextRun SCXW214632477 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW214632477 BCX0\">Cordic_Translate_16<\/span><\/span><span class=\"TextRun SCXW214632477 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"> <span class=\"NormalTextRun SCXW214632477 BCX0\">IP core can be instantiated using Code 3, which converts the imaginary (<\/span><span class=\"SpellingError SCXW214632477 BCX0\">InputA<\/span><span class=\"NormalTextRun SCXW214632477 BCX0\">) and real (<\/span><span class=\"SpellingError SCXW214632477 BCX0\">InputB<\/span><span class=\"NormalTextRun SCXW214632477 BCX0\">) components of a signal into their corresponding amplitude (<\/span><span class=\"SpellingError SCXW214632477 BCX0\">OutputA<\/span><span class=\"NormalTextRun SCXW214632477 BCX0\">) and phase angle (<\/span><span class=\"SpellingError SCXW214632477 BCX0\">OutputB<\/span><span class=\"NormalTextRun SCXW214632477 BCX0\">).<\/span><\/span><span class=\"EOP SCXW214632477 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW92295235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW92295235 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW92295235 BCX0\"><span class=\"TextRun SCXW92295235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW92295235 BCX0\" data-ccp-parastyle=\"caption\">3<\/span><\/span><\/span><span class=\"TextRun SCXW92295235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW92295235 BCX0\" data-ccp-parastyle=\"caption\">: VHDL implementation example demonstrating the instantiation of a <\/span><\/span><span class=\"TextRun SCXW92295235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW92295235 BCX0\" data-ccp-parastyle=\"caption\">Cordic_Translate_16<\/span><\/span><span class=\"TextRun SCXW92295235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW92295235 BCX0\" data-ccp-parastyle=\"caption\"> IP core.<\/span><\/span><span class=\"EOP SCXW92295235 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>LIBRARY ieee;\r\n\r\nARCHITECTURE Behavioral OF CustomWrapper IS\r\n\r\n\tSIGNAL m_axis_dout_tvalid : STD_LOGIC;\r\n\tSIGNAL tdata_temp : signed(31 DOWNTO 0);\r\n\r\nBEGIN\r\n\tCordic : Cordic_Translate_16\r\n\tPORT MAP(\r\n\t\taclk =&gt; clk,\r\n\t\t-- input is always valid\r\n\t\ts_axis_cartesian_tvalid =&gt; '1',\r\n\t\t-- InputA : imaginary part\r\n\t\t-- InputB : real part\r\n\t\ts_axis_cartesian_tdata =&gt; STD_LOGIC_VECTOR(InputA &amp; InputB),\r\n\t\tm_axis_dout_tvalid =&gt; m_axis_dout_tvalid,\r\n\t\tm_axis_dout_tdata =&gt; tdata_temp\r\n\t);\r\n\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\r\n\t\t\tIF m_axis_dout_tvalid THEN\r\n\t\t\t\tOutputA &lt;= signed(tdata_temp(15 DOWNTO 0));\r\n\t\t\t\tOutputB &lt;= signed(tdata_temp(31 DOWNTO 16));\r\n\t\t\tEND IF;\r\n\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p><span data-contrast=\"none\">The instantiated <\/span><span data-contrast=\"none\">Cordic_Translate_16 <\/span><span data-contrast=\"none\">is tested using the Multi-Instrument Mode setup shown in Figure 8. Moku Cloud Compile InputA (imaginary) and InputB (real) are internally routed from the Moku Oscilloscope outputs to Moku Cloud Compile, which computes the corresponding amplitude and phase outputs. These Moku Cloud Compile outputs are then routed back to the Oscilloscope for visualization and analysis.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">The results are shown in Figure 9. The blue trace reaches a peak value of 3.9288<\/span> <span data-contrast=\"none\">V, corresponding to approximately 3.1415 radians. Since the phase output is represented with 13 fractional bits, the resolution is <\/span>2^13<span data-contrast=\"none\"> LSBs\/rad. To convert the digital values into physical units, the digital resolution of Moku Cloud Compile must be determined and can be found <\/span><a href=\"https:\/\/apis.liquidinstruments.com\/mc\/io.html#analog-i-o-scaling\"><span data-contrast=\"none\">here<\/span><\/a><span data-contrast=\"none\">. Given a digital resolution of 6550.4<\/span> <span data-contrast=\"none\">LSBs\/V on Moku:Go, the radian value is calculated as:<\/span><\/p>\n<p style=\"text-align: center;\">\\(frac{text{3.9288 V} times text{6550.4 LSBs\/V}}{2^{13}  text{LSBs\/rad}}=text{3.1415 rad}\\)<\/p>\n<p><span class=\"TextRun SCXW206313950 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW206313950 BCX0\">Furthermore, the amplitude output increases in magnitude by a factor of approximately 1.1644 due to the accumulation of scaling effects introduced during the 20 iterations performed by the <\/span><\/span><span class=\"TextRun SCXW206313950 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW206313950 BCX0\">Cordic_Translate_16<\/span><\/span><span class=\"TextRun SCXW206313950 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW206313950 BCX0\">.<\/span><\/span><span class=\"EOP SCXW206313950 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23688 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_8.png\" alt=\"\" width=\"457\" height=\"233\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_8.png 539w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_8-300x153.png 300w\" sizes=\"(max-width: 457px) 100vw, 457px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW255394007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW255394007 BCX0\"><span class=\"TextRun SCXW255394007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\">8<\/span><\/span><\/span><span class=\"TextRun SCXW255394007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\">:<\/span><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\"> M<\/span><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\"> test setup for testing <\/span><\/span><span class=\"TextRun SCXW255394007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\">Cordic_Translate_16<\/span> <\/span><span class=\"TextRun SCXW255394007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW255394007 BCX0\" data-ccp-parastyle=\"caption\">IP core.<\/span><\/span><span class=\"EOP SCXW255394007 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23691 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_9.png\" alt=\"\" width=\"856\" height=\"600\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_9.png 1012w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_9-300x210.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_9-768x538.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_9-600x420.png 600w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW175777056 BCX0\"><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">9<\/span><\/span><\/span><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">:<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\"> Two <\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">output<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\"> channels are configured with 100<\/span><\/span><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">Hz sine waves at 5<\/span><\/span><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">\u202f<\/span><\/span><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"SpellingError SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">Vpp<\/span> <span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">offset by a 90<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">\u00b0<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\"> phase shift to emulate a continuously rotating complex vector. <\/span><span class=\"SpellingError SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">InputA<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\"> (red trace) represents the amplitude, while <\/span><span class=\"SpellingError SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">InputB<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\"> (blue trace) corresponds to the phase. As expected, the amplitude remains constant while the phase increases linearly over time<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">, wrapping every 2<\/span><\/span><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">\ud835\udf0b<\/span><\/span><span class=\"TextRun SCXW175777056 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\"> radians<\/span><span class=\"NormalTextRun SCXW175777056 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW175777056 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h2><span data-contrast=\"none\">4. Counter_32<\/span><\/h2>\n<p><span data-contrast=\"none\">The <\/span><span data-contrast=\"none\">Counter_32<\/span><span data-contrast=\"none\"> IP core offers counter implementations utilizing lookup tables (LUTs) and single DSP slices. The input and output port functions are described in Table 6. It supports up\/down counting modes with output widths of 32 bits. The counter increments by one on each clock cycle and can be synchronously cleared by pulling the <\/span><span data-contrast=\"none\">SCLR<\/span><span data-contrast=\"none\"> signal high.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW257399397 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW257399397 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW257399397 BCX0\"><span class=\"TextRun SCXW257399397 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW257399397 BCX0\" data-ccp-parastyle=\"caption\">6<\/span><\/span><\/span><span class=\"TextRun SCXW257399397 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW257399397 BCX0\" data-ccp-parastyle=\"caption\">: Port definitions of<\/span><\/span><span class=\"TextRun SCXW257399397 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"> <span class=\"NormalTextRun SCXW257399397 BCX0\" data-ccp-parastyle=\"caption\">Counter_32<\/span><\/span><span class=\"TextRun SCXW257399397 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW257399397 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW257399397 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<table style=\"font-weight: 400;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"5\">\n<tbody>\n<tr style=\"text-align: center;\" aria-rowindex=\"1\">\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Name<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276,&quot;469777462&quot;:[2160],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Direction<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Description<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">CLK<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Rising edge clock signal.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">SCLR<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Synchronous Clear: forces the output to a low state when driven high.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">UP<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Controls the count direction on an up\/down counter. Counts up when high, down when low.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">Q [31:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\">\n<p style=\"text-align: center;\"><span data-contrast=\"none\">Counter output. 32-bit wide.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"none\"><span class=\"TextRun SCXW26507820 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW26507820 BCX0\">The example<\/span><span class=\"NormalTextRun SCXW26507820 BCX0\"> in Code 4<\/span><span class=\"NormalTextRun SCXW26507820 BCX0\"> implements two <\/span><\/span><span class=\"TextRun SCXW26507820 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW26507820 BCX0\">Counter_32<\/span><\/span><span class=\"TextRun SCXW26507820 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW26507820 BCX0\"> functions<\/span><span class=\"NormalTextRun SCXW26507820 BCX0\">: one configured for bidirectional counting to generate a triangular waveform, and the other for unidirectional counting to produce a sawtooth waveform. Only the least significant 16 bits of the counters are connected to the outputs, as the design operates within a range below 65,536.<\/span><\/span><span class=\"EOP SCXW26507820 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/span><\/p>\n<p style=\"text-align: left;\"><span data-contrast=\"none\"><span class=\"TextRun SCXW34470576 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW34470576 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW34470576 BCX0\"><span class=\"TextRun SCXW34470576 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW34470576 BCX0\" data-ccp-parastyle=\"caption\">4<\/span><\/span><\/span><span class=\"TextRun SCXW34470576 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW34470576 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW34470576 BCX0\" data-ccp-parastyle=\"caption\">VHDL example instantiating two <\/span><\/span><span class=\"TextRun SCXW34470576 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW34470576 BCX0\" data-ccp-parastyle=\"caption\">Counter_32 <\/span><\/span><span class=\"TextRun SCXW34470576 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW34470576 BCX0\" data-ccp-parastyle=\"caption\">for triangular and sawtooth waveforms.<\/span><\/span><span class=\"EOP SCXW34470576 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/span><\/p>\n<pre><code>LIBRARY ieee;\r\n\r\nARCHITECTURE Behavioural OF CustomWrapper IS\r\n\r\n\tSIGNAL sclr_triangular : STD_LOGIC;\r\n\tSIGNAL sclr_sawtooth : STD_LOGIC;\r\n\r\n\tSIGNAL up_triangular : STD_LOGIC;\r\n\tSIGNAL up_sawtooth : STD_LOGIC;\r\n\r\n\tSIGNAL q_triangular : STD_LOGIC_VECTOR(31 DOWNTO 0);\r\n\tSIGNAL q_sawtooth : STD_LOGIC_VECTOR(31 DOWNTO 0);\r\n\r\nBEGIN\r\n\r\n\t-- Triangular wave\r\n\tTriangular : Counter_32\r\n\tPORT MAP(\r\n\t\tclk =&gt; clk,\r\n\t\t-- synchronous clear\r\n\t\tsclr =&gt; sclr_triangular,\r\n\t\tup =&gt; up_triangular,\r\n\t\tq =&gt; q_triangular\r\n\t);\r\n\tOutputA &lt;= signed(q_triangular(15 DOWNTO 0));\r\n\r\n\t-- Triangular counter configuration\r\n\tPROCESS (clk) IS\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\t\t\t-- reset\r\n\t\t\tIF Control0(0) = '1' THEN\r\n\t\t\t\tsclr_triangular &lt;= '1';\r\n\t\t\t\tup_triangular &lt;= '1';\r\n\t\t\tELSE\r\n\t\t\t\t-- don't clear \r\n\t\t\t\tsclr_triangular &lt;= '0';\r\n\t\t\t\t-- Control1: counter limit\r\n\t\t\t\tIF q_triangular = Control1 THEN\r\n\t\t\t\t\t-- count down\r\n\t\t\t\t\tup_triangular &lt;= '0';\r\n\t\t\t\tELSIF q_triangular = x\"00000000\" THEN\r\n\t\t\t\t\t-- count up\r\n\t\t\t\t\tup_triangular &lt;= '1';\r\n\t\t\t\tELSE\r\n\t\t\t\t\t-- hold\r\n\t\t\t\t\tup_triangular &lt;= up_triangular; END IF; END IF; END IF; END PROCESS; Sawtooth : Counter_32 PORT MAP( clk =&gt; clk,\r\n\t\tsclr =&gt; sclr_sawtooth, -- synchronous clear\r\n\t\tup =&gt; up_sawtooth,\r\n\t\tq =&gt; q_sawtooth\r\n\t);\r\n\tOutputB &lt;= signed(q_sawtooth(15 DOWNTO 0));\r\n\r\n\t-- Sawtooth counter configuration\r\n\tPROCESS (clk) IS\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\t\t\t-- reset\r\n\t\t\tIF Control0(0) = '1' THEN\r\n\t\t\t\tsclr_sawtooth &lt;= '1';\r\n\t\t\t\tup_sawtooth &lt;= '1';\r\n\t\t\tELSE\r\n\t\t\t\t-- always count up\r\n\t\t\t\tup_sawtooth &lt;= '1';\r\n\t\t\t\t-- Control2 : counter limit\r\n\t\t\t\tIF q_sawtooth = Control2 THEN\r\n\t\t\t\t\t-- clear\r\n\t\t\t\t\tsclr_sawtooth &lt;= '1';\r\n\t\t\t\tELSE\r\n\t\t\t\t\t-- continue counting\r\n\t\t\t\t\tsclr_sawtooth &lt;= '0';\r\n\t\t\t\tEND IF;\r\n\t\t\tEND IF;\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p style=\"text-align: left;\"><span data-contrast=\"none\">The Multi-Instrument Mode configuration is illustrated in Figure 10. The Moku Oscilloscope is employed to visualize the waveforms generated by two <\/span><span data-contrast=\"none\">Counter_32<\/span><span data-contrast=\"none\"> modules. Both counters are configured with control values of 6,550 through Control1 and Control2, resulting in a peak output of approximately 1<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">V, based on the Moku:Go digital resolution of 6550.4<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">LSBs\/V. The LSB of Control0 functions as a reset signal and must be set to high and back to low prior to operation. As expected, the sawtooth waveform has twice the frequency of the triangular waveform, since it counts only upward, while the triangular waveform alternates between upward and downward counting cycles.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">The test results are presented in Figure 11. The red trace represents the triangular waveform, generated by alternating up and down counting. The blue trace corresponds to the sawtooth waveform, which increments continuously and resets upon reaching the configured limit of 6,550.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23694 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_8-1.png\" alt=\"\" width=\"437\" height=\"223\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_8-1.png 539w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_8-1-300x153.png 300w\" sizes=\"(max-width: 437px) 100vw, 437px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW49939505 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49939505 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW49939505 BCX0\"><span class=\"TextRun SCXW49939505 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49939505 BCX0\" data-ccp-parastyle=\"caption\">10<\/span><\/span><\/span><span class=\"TextRun SCXW49939505 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49939505 BCX0\" data-ccp-parastyle=\"caption\">: M<\/span><span class=\"NormalTextRun SCXW49939505 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW49939505 BCX0\" data-ccp-parastyle=\"caption\"> configuration for testing <\/span><\/span><span class=\"TextRun SCXW49939505 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49939505 BCX0\" data-ccp-parastyle=\"caption\">Counter_32<\/span><\/span><span class=\"TextRun SCXW49939505 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49939505 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW49939505 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23695 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_11-925x1024.png\" alt=\"\" width=\"761\" height=\"842\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_11-925x1024.png 925w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_11-271x300.png 271w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_11-768x851.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_11-300x332.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_11-600x665.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_11.png 1190w\" sizes=\"(max-width: 761px) 100vw, 761px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW97963468 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW97963468 BCX0\"><span class=\"TextRun SCXW97963468 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\">11<\/span><\/span><\/span><span class=\"TextRun SCXW97963468 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\">Configuration of M<\/span><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\"> control registers and corresponding outputs of the two <\/span><\/span><span class=\"TextRun SCXW97963468 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\">Counter_32<\/span><\/span><span class=\"TextRun SCXW97963468 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW97963468 BCX0\" data-ccp-parastyle=\"caption\"> modules.<\/span><\/span><span class=\"EOP SCXW97963468 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h2><span data-contrast=\"none\">5. <\/span><span data-contrast=\"none\">SineGen_48<\/span><\/h2>\n<p><span data-contrast=\"none\">The <\/span><span data-contrast=\"none\">SineGen_48<\/span><span data-contrast=\"none\"> IP core generates high-resolution, low-distortion sine waveforms. Its input and output ports are detailed in Table 7. It accepts a 48-bit frequency step input and produces both 16-bit sine and cosine outputs through a 32-bit output port. This module serves as a sine waveform generator subblock suitable for a range of advanced applications, including phase-locked loops and simultaneous amplitude and frequency modulation (AM and FM).<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span class=\"TextRun SCXW43115611 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW43115611 BCX0\">Since the <\/span><\/span><span class=\"TextRun SCXW43115611 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW43115611 BCX0\">SineGen_48<\/span><\/span><span class=\"TextRun SCXW43115611 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"> <span class=\"NormalTextRun SCXW43115611 BCX0\">IP core<\/span><span class=\"NormalTextRun SCXW43115611 BCX0\"> requires a 48-bit frequency step input, and M<\/span><span class=\"NormalTextRun SCXW43115611 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW43115611 BCX0\"> control registers are limited to 32 bits, two registers must be combined to form the full 48-bit input. For example, in Code 5, the least significant 16 bits of Control2 are concatenated with the 32 bits of Control1 to construct the complete frequency control word. The generated output is divided into two 16-bit components, corresponding to the sine and cosine waveforms, which are routed to <\/span><span class=\"SpellingError SCXW43115611 BCX0\">OutputA<\/span><span class=\"NormalTextRun SCXW43115611 BCX0\"> and <\/span><span class=\"SpellingError SCXW43115611 BCX0\">OutputB<\/span><span class=\"NormalTextRun SCXW43115611 BCX0\">, respectively. Additionally, the most significant 16 bits of the internal phase counter are directed to <\/span><span class=\"SpellingError SCXW43115611 BCX0\">OutputC<\/span><span class=\"NormalTextRun SCXW43115611 BCX0\">.<\/span><\/span><span class=\"EOP SCXW43115611 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW236989043 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW236989043 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW236989043 BCX0\"><span class=\"TextRun SCXW236989043 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW236989043 BCX0\" data-ccp-parastyle=\"caption\">5<\/span><\/span><\/span><span class=\"TextRun SCXW236989043 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW236989043 BCX0\" data-ccp-parastyle=\"caption\">: VHDL instantiation example of <\/span><\/span><span class=\"TextRun SCXW236989043 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW236989043 BCX0\" data-ccp-parastyle=\"caption\">SineGen_48<\/span><\/span><span class=\"TextRun SCXW236989043 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW236989043 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"EOP SCXW236989043 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>LIBRARY ieee;\r\n\r\nARCHITECTURE Behavioural OF CustomWrapper IS\r\n\r\n\tSIGNAL m_axis_data_tvalid : STD_LOGIC;\r\n\tSIGNAL m_axis_phase_tvalid : STD_LOGIC;\r\n\tSIGNAL sine_temp : STD_LOGIC_VECTOR(31 DOWNTO 0);\r\n\tSIGNAL m_axis_phase_tdata : STD_LOGIC_VECTOR(47 DOWNTO 0);\r\n\r\nBEGIN\r\n\r\n\tSineCosineGen : SineGen_48\r\n\tPORT MAP(\r\n\t\taclk =&gt; clk,\r\n\t\t-- Use the 0th bit of Control0 to reset this module\r\n\t\taresetn =&gt; NOT Control0(0),\r\n\t\t-- input signal is always available\r\n\t\ts_axis_config_tvalid =&gt; '1',\r\n\t\t-- 48-bit frequency step\r\n\t\ts_axis_config_tdata =&gt; Control2(15 DOWNTO 0) &amp; Control1,\r\n\r\n\t\tm_axis_data_tvalid =&gt; m_axis_data_tvalid,\r\n\t\tm_axis_data_tdata =&gt; sine_temp,\r\n\r\n\t\tm_axis_phase_tvalid =&gt; m_axis_phase_tvalid,\r\n\t\tm_axis_phase_tdata =&gt; m_axis_phase_tdata -- 48-bit phase counter output\r\n\t);\r\n\r\n\t-- only output data when data is valid\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\r\n\t\t\tIF m_axis_data_tvalid THEN\r\n\t\t\t\t-- 32-bit, the most significant 16 bits are sine\r\n\t\t\t\t-- and the least significant 16 bits are cosine\r\n\t\t\t\tOutputA &lt;= signed(sine_temp(15 DOWNTO 0));\r\n\t\t\t\tOutputB &lt;= signed(sine_temp(31 DOWNTO 16));\r\n\t\t\tEND IF;\r\n\r\n\t\t\tIF m_axis_phase_tvalid THEN\r\n\t\t\t\tOutputC &lt;= signed(m_axis_phase_tdata(47 DOWNTO 32));\r\n\t\t\tEND IF;\r\n\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p><span class=\"TextRun SCXW49904235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49904235 BCX0\">The <\/span><span class=\"NormalTextRun SCXW49904235 BCX0\">M<\/span><span class=\"NormalTextRun SCXW49904235 BCX0\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW49904235 BCX0\"> configuration for testing the <\/span><\/span><span class=\"TextRun SCXW49904235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49904235 BCX0\">SineGen_48<\/span><\/span><span class=\"TextRun SCXW49904235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49904235 BCX0\"> IP core is shown in Figure 12. The frequency step is set to 3.125<\/span><\/span><span class=\"TextRun SCXW49904235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49904235 BCX0\">\u202f<\/span><\/span><span class=\"TextRun SCXW49904235 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49904235 BCX0\">kHz by configuring Control1 to 2,374,548,092 and Control2 to 6. The full 48-bit frequency control word is calculated as:<\/span><\/span><span class=\"EOP SCXW49904235 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\">\\(text{Frequency step} = text{Control 2} times 2^{32} + text{Control 1} = 2,814,749,767\\)<\/p>\n<p><span class=\"TextRun SCXW148953052 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW148953052 BCX0\">And the frequency in the unit of Hz can be calculated as:<\/span><\/span><span class=\"EOP SCXW148953052 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\">\\(text{Frequency} = frac{text{clock rate}}{2^{48}}times [text{Control 2} times 2^{32} + text{Control 1}]\\)<\/p>\n<p><span class=\"TextRun SCXW142526138 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW142526138 BCX0\">Given that the <\/span><span class=\"SpellingError SCXW142526138 BCX0\">Moku:Go<\/span><span class=\"NormalTextRun SCXW142526138 BCX0\"> clock rate is 31.25 MHz, the output frequency becomes 3.125 kHz.<\/span><\/span><span class=\"EOP SCXW142526138 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<h2><img decoding=\"async\" class=\"aligncenter wp-image-23698 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_12-1.png\" alt=\"\" width=\"337\" height=\"172\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_12-1.png 398w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_12-1-300x153.png 300w\" sizes=\"(max-width: 337px) 100vw, 337px\" \/><\/h2>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW138674737 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW138674737 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW138674737 BCX0\"><span class=\"TextRun SCXW138674737 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW138674737 BCX0\" data-ccp-parastyle=\"caption\">12<\/span><\/span><\/span><span class=\"TextRun SCXW138674737 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW138674737 BCX0\" data-ccp-parastyle=\"caption\">: M<\/span><span class=\"NormalTextRun SCXW138674737 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW138674737 BCX0\" data-ccp-parastyle=\"caption\"> configuration for testing <\/span><\/span><span class=\"TextRun SCXW138674737 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW138674737 BCX0\" data-ccp-parastyle=\"caption\">SineGen_48<\/span><\/span><span class=\"TextRun SCXW138674737 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW138674737 BCX0\" data-ccp-parastyle=\"caption\"> IP core.<\/span><\/span><span class=\"EOP SCXW138674737 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><span class=\"TextRun SCXW20109162 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW20109162 BCX0\">Figure 13 displays the output of the <\/span><\/span><span class=\"TextRun SCXW20109162 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW20109162 BCX0\">SineGen_48<\/span><\/span><span class=\"TextRun SCXW20109162 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW20109162 BCX0\"> IP core, where Channel A (red) represents the cosine waveform and Channel B (blue) represents the sine waveform. The measured phase difference between the two signals is 90<\/span><span class=\"NormalTextRun SCXW20109162 BCX0\">\u00b0<\/span><span class=\"NormalTextRun SCXW20109162 BCX0\">, as expected. Additionally, Figure 14 illustrates the behavior of the phase counter routed to <\/span><span class=\"SpellingError SCXW20109162 BCX0\">OutputC<\/span><span class=\"NormalTextRun SCXW20109162 BCX0\"> of M<\/span><span class=\"NormalTextRun SCXW20109162 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW20109162 BCX0\">. The output shows a continuously increasing ramp, confirming that the phase signal advances at the same frequency as the generated cosine waveform.<\/span><\/span><span class=\"EOP SCXW20109162 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23699 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_13-1024x346.png\" alt=\"\" width=\"820\" height=\"277\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_13-1024x346.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_13-300x101.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_13-768x259.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_13-1536x519.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_13-600x203.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_13.png 1990w\" sizes=\"(max-width: 820px) 100vw, 820px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW30098824 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW30098824 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW30098824 BCX0\"><span class=\"TextRun SCXW30098824 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW30098824 BCX0\" data-ccp-parastyle=\"caption\">13<\/span><\/span><\/span><span class=\"TextRun SCXW30098824 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW30098824 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW30098824 BCX0\" data-ccp-parastyle=\"caption\">Sine and cosine waveforms visualized using the <\/span><span class=\"NormalTextRun SCXW30098824 BCX0\" data-ccp-parastyle=\"caption\">Moku <\/span><span class=\"NormalTextRun SCXW30098824 BCX0\" data-ccp-parastyle=\"caption\">Oscilloscope. Channel A (red) displays the cosine signal, while Channel B (blue) shows the sine signal. The frequency step is configured with Control1 set to 2,374,548,092 and Control2 set to 6.<\/span><\/span><span class=\"EOP SCXW30098824 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23700 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_14-1024x344.png\" alt=\"\" width=\"825\" height=\"277\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_14-1024x344.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_14-300x101.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_14-768x258.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_14-1536x516.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_14-600x202.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_14.png 1975w\" sizes=\"(max-width: 825px) 100vw, 825px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW210947064 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW210947064 BCX0\"><span class=\"TextRun SCXW210947064 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">14<\/span><\/span><\/span><span class=\"TextRun SCXW210947064 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">The <\/span><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">Moku <\/span><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">Oscilloscope inputs are connected to <\/span><span class=\"SpellingError SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">OutputA<\/span><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\"> and <\/span><span class=\"SpellingError SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">OutputC<\/span><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\"> of <\/span><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\">Moku Cloud Compile.<\/span><span class=\"NormalTextRun SCXW210947064 BCX0\" data-ccp-parastyle=\"caption\"> The blue trace represents the most significant 16 bits of the phase counter output.<\/span><\/span><span class=\"EOP SCXW210947064 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span data-contrast=\"none\">6. <\/span><span data-contrast=\"none\">FIR_Filter_7coef&nbsp;<\/span><\/h2>\n<p><span data-contrast=\"none\">The <\/span><span data-contrast=\"none\">FIR_Filter_7coef<\/span><span data-contrast=\"none\"> IP core operates at the full clock rate with fixed coefficients, offering a resource-efficient solution for users who need to integrate a low-pass filter into their Moku Cloud Compile designs without requiring additional instruments in the Multi-Instrument Mode setup. The filter coefficients are listed in Table 8, and the port definitions are provided in Table 9. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">For applications requiring adjustable coefficients, users can either use the <\/span><a href=\"https:\/\/liquidinstruments.com\/products\/integrated-instruments\/fir-filter-builder\/\"><span data-contrast=\"none\">Moku FIR Filter Builder<\/span><\/a><span data-contrast=\"none\"> or recompile a custom FIR filter IP core by following the guidelines in the <\/span><b><span data-contrast=\"none\">Customized IP cores<\/span><\/b><span data-contrast=\"none\"> section in this paper.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW185643103 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185643103 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW185643103 BCX0\"><span class=\"TextRun SCXW185643103 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185643103 BCX0\" data-ccp-parastyle=\"caption\">8<\/span><\/span><\/span><span class=\"TextRun SCXW185643103 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185643103 BCX0\" data-ccp-parastyle=\"caption\">: Coefficients <\/span><span class=\"NormalTextRun SCXW185643103 BCX0\" data-ccp-parastyle=\"caption\">used in<\/span> <\/span><span class=\"TextRun SCXW185643103 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185643103 BCX0\" data-ccp-parastyle=\"caption\">FIR_Filter_7coef<\/span><\/span><span class=\"TextRun SCXW185643103 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185643103 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW185643103 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" width=\"300\" height=\"35\" class=\"aligncenter size-medium wp-image-23702\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-142748-300x35.png\" alt=\"\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-142748-300x35.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-142748-1024x120.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-142748-768x90.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-142748-1536x179.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-142748-600x70.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-142748.png 1643w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW235265979 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW235265979 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW235265979 BCX0\"><span class=\"TextRun SCXW235265979 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW235265979 BCX0\" data-ccp-parastyle=\"caption\">9<\/span><\/span><\/span><span class=\"TextRun SCXW235265979 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW235265979 BCX0\" data-ccp-parastyle=\"caption\">: Port definitions of <\/span><\/span><span class=\"TextRun SCXW235265979 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW235265979 BCX0\" data-ccp-parastyle=\"caption\">FIR_Filter_7coef<\/span><\/span><span class=\"TextRun SCXW235265979 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW235265979 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW235265979 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<table style=\"font-weight: 400;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"7\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Name<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Direction<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Description<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">aclk<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Rising-edge clock.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for input data channel. Asserted by external block to indicate data is available for transfer.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tready for input data channel. Asserted by core to indicate core is ready to accept data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tdata [15:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for input data channel. Conveys the data stream to be filtered. See tdata Structure for internal structure<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"6\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for output data channel. Asserted by core to indicate data is available for transfer.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"7\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tdata [23:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for the output data channel. This is the filtered data stream. See tdata Structure for internal structure.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span class=\"TextRun SCXW95202302 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW95202302 BCX0\">The VHDL instantiation of the <\/span><\/span><span class=\"TextRun SCXW95202302 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW95202302 BCX0\">FIR_Filter_7coef<\/span><\/span><span class=\"TextRun SCXW95202302 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW95202302 BCX0\"> IP core is provided in Code 6. In this example, handshake signals are omitted, as the filter is designed to process continuous input data and produce a continuous output stream. To ensure proper output scaling, the most significant 16 bits of the filter output are routed to <\/span><span class=\"SpellingError SCXW95202302 BCX0\">OutputA<\/span><span class=\"NormalTextRun SCXW95202302 BCX0\">.<\/span><\/span><span class=\"EOP SCXW95202302 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p>This application note examines the implementation of a dual boxcar averager, outlining its core structure, which comprises four single boxcar averagers group<\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW88347722 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW88347722 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW88347722 BCX0\"><span class=\"TextRun SCXW88347722 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW88347722 BCX0\" data-ccp-parastyle=\"caption\">6<\/span><\/span><\/span><span class=\"TextRun SCXW88347722 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW88347722 BCX0\" data-ccp-parastyle=\"caption\">: VHDL example of instantiating the <\/span><\/span><span class=\"TextRun SCXW88347722 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW88347722 BCX0\" data-ccp-parastyle=\"caption\">FIR_Filter_7coef<\/span><\/span><span class=\"TextRun SCXW88347722 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"> <span class=\"NormalTextRun SCXW88347722 BCX0\" data-ccp-parastyle=\"caption\">IP core.<\/span><\/span><span class=\"EOP SCXW88347722 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>LIBRARY ieee;\r\n\r\nARCHITECTURE Behavioural OF CustomWrapper IS\r\n\r\n\tSIGNAL FIR_out_temp : STD_LOGIC_VECTOR(23 DOWNTO 0);\r\n\r\nBEGIN\r\n\r\n\tFIR_Filter : FIR_Filter_7coef\r\n\tPORT MAP(\r\n\t\taclk =&gt; clk,\r\n\t\t-- input data is always valid\r\n\t\ts_axis_data_tvalid =&gt; '1',\r\n\t\t-- FIR filter ready to accept data\r\n\t\ts_axis_data_tready =&gt; OPEN,\r\n\t\ts_axis_data_tdata =&gt; InputA,\r\n\r\n\t\t-- FIR filtered data is available to be transferred \r\n\t\tm_axis_data_tvalid =&gt; OPEN,\r\n\t\tm_axis_data_tdata =&gt; FIR_out_temp\r\n\t);\r\n\r\n\tOutputA &lt;= signed(FIR_out_temp(23 DOWNTO 8));\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p><span class=\"TextRun SCXW267995293 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW267995293 BCX0\">The <\/span><\/span><span class=\"TextRun SCXW267995293 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW267995293 BCX0\">FIR_Filter_7coef<\/span><\/span><span class=\"TextRun SCXW267995293 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW267995293 BCX0\"> M<\/span><span class=\"NormalTextRun SCXW267995293 BCX0\">ulti-Instrument Mode <\/span><span class=\"NormalTextRun SCXW267995293 BCX0\">test setup is shown in Figure 15. <\/span><span class=\"NormalTextRun SCXW267995293 BCX0\">The filter response, as measured by the <\/span><span class=\"NormalTextRun SCXW267995293 BCX0\">Moku <\/span><span class=\"NormalTextRun SCXW267995293 BCX0\">Frequency Response Analyzer, is presented in Figure 16. A comparison between the simulated response and the measured response is shown in Figure 17.<\/span><\/span><span class=\"EOP SCXW267995293 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><img decoding=\"async\" class=\"aligncenter wp-image-23703 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_15.png\" alt=\"\" width=\"446\" height=\"225\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_15.png 537w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_15-300x151.png 300w\" sizes=\"(max-width: 446px) 100vw, 446px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW91831007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW91831007 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW91831007 BCX0\"><span class=\"TextRun SCXW91831007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW91831007 BCX0\" data-ccp-parastyle=\"caption\">15<\/span><\/span><\/span><span class=\"TextRun SCXW91831007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW91831007 BCX0\" data-ccp-parastyle=\"caption\">: M<\/span><span class=\"NormalTextRun SCXW91831007 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW91831007 BCX0\" data-ccp-parastyle=\"caption\"> configuration of the <\/span><\/span><span class=\"TextRun SCXW91831007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW91831007 BCX0\" data-ccp-parastyle=\"caption\">FIR_Filter_7coef<\/span><\/span><span class=\"TextRun SCXW91831007 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"> <span class=\"NormalTextRun SCXW91831007 BCX0\" data-ccp-parastyle=\"caption\">IP core.<\/span><\/span><span class=\"EOP SCXW91831007 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23708 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_16.png\" alt=\"\" width=\"838\" height=\"564\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_16.png 990w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_16-300x202.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_16-768x517.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_16-600x404.png 600w\" sizes=\"(max-width: 838px) 100vw, 838px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW19624442 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW19624442 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW19624442 BCX0\"><span class=\"TextRun SCXW19624442 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW19624442 BCX0\" data-ccp-parastyle=\"caption\">16<\/span><\/span><\/span><span class=\"TextRun SCXW19624442 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW19624442 BCX0\" data-ccp-parastyle=\"caption\">: Frequency response obtained using the <\/span><span class=\"NormalTextRun SCXW19624442 BCX0\" data-ccp-parastyle=\"caption\">Moku <\/span><span class=\"NormalTextRun SCXW19624442 BCX0\" data-ccp-parastyle=\"caption\">Frequency Response Analyzer.<\/span><\/span><span class=\"EOP SCXW19624442 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23710 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_17-1024x646.png\" alt=\"\" width=\"783\" height=\"494\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_17-1024x646.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_17-300x189.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_17-768x485.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_17-1536x970.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_17-2048x1293.png 2048w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_17-600x379.png 600w\" sizes=\"(max-width: 783px) 100vw, 783px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW71264839 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW71264839 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW71264839 BCX0\"><span class=\"TextRun SCXW71264839 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW71264839 BCX0\" data-ccp-parastyle=\"caption\">17<\/span><\/span><\/span><span class=\"TextRun SCXW71264839 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW71264839 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW71264839 BCX0\" data-ccp-parastyle=\"caption\">A comparison between the simulated response based on the <\/span><span class=\"NormalTextRun SCXW71264839 BCX0\" data-ccp-parastyle=\"caption\">given FIR <\/span><span class=\"NormalTextRun SCXW71264839 BCX0\" data-ccp-parastyle=\"caption\">coefficients and the measured frequency response.<\/span><\/span><span class=\"EOP SCXW71264839 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h2><span data-contrast=\"none\">7. <\/span><span data-contrast=\"none\">FFT_1024<\/span><\/h2>\n<p><span data-contrast=\"none\">The Fast Fourier Transform (FFT) IP core implements the Cooley-Tukey algorithm, an efficient technique for computing the Discrete Fourier Transform (DFT). It is well-suited for applications such as large-scale filtering, cross-correlation, and coarse frequency analysis. Table 10 provides the input and output definitions for <\/span><span data-contrast=\"none\">FFT_1024<\/span><span data-contrast=\"none\">. This section presents an example implementation of the FFT core.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\">Table 10: Port definitions of the FFT_1024 IP core.<\/p>\n<table data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"21\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Name<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Direction<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Description<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">aclk<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Rising-edge clock.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">aresetn<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Active-Low synchronous clear (optional, always take priority over aclken). A minimum aresetn active pulse of two cycles is required.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_config_tdata[7:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for the Configuration channel. Carries the configuration information: CP_LEN, FWD\/INV, NFFT and SCALE_SCH.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Only the least significant bit (0th bit) is used to control the FWD\/INV (forward or inverse FFT). Other bits are empty.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_config_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for the Configuration channel. Asserted by the external block to signal that it is able to provide data.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"6\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_config_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tready for the Configuration channel. Asserted by the core to signal that it is ready to accept configuration data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"7\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tdata[31:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for the Data Input channel. Carries the unprocessed sample data: real part is [15:0] and imaginary part is [31:16].<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"8\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for the Data Input channel. Used by the external block to signal that it is able to provide data. It can be set as constant high.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"9\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tready for the Data Input channel. Used by the core to signal that it is ready to accept data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"10\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tlast<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tlast for the Data Input channel. Asserted by the external block on the last sample of the frame. This is not used by the core except to generate the events event_tlast_unexpected and event_tlast_missing events<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"11\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tdata[63:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for the Data Output channel. Carries the processed sample data real part is [58:32] and imaginary part is [26:0]. Signals are both signed 27-bit with 15 fractional bits.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"12\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tuser[15:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tuser for the Data Output channel. Carries the index of per-sample information.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"13\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for the Data Output channel. Asserted by the core to signal that it is able to provide sample data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"14\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tready for the Data Output channel. Asserted by the external slave to signal that it is ready to accept data.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"15\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tlast<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tlast for the Data Output channel. Asserted by the core on the last sample of the frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"16\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_frame_started<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core starts to process a new frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"17\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_tlast_unexpected<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core sees s_axis_data_tlast High on a data sample that is not the last one in a frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"18\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_tlast_missing<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when s_axis_data_tlast is Low on the last data sample of a frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"19\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_status_channel_halt<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core tries to write data to the Status channel and it is unable to do so.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"20\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_data_in_channel_halt<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core requests data from the Data Input channel and none is available.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"21\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_data_out_channel_halt<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core tries to write data to the Data Output channel and it is unable to do so.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"none\">The VHDL instantiation of the <\/span><span data-contrast=\"none\">FFT_1024<\/span><span data-contrast=\"none\"> IP core is provided in Code 7. Since the input signal is purely real, only the least significant 16 bits of <\/span><span data-contrast=\"none\">s_axis_data_tdata<\/span><span data-contrast=\"none\"> are connected to InputA, and the most significant 16 bits of both the real and imaginary components of the FFT output are connected to the inputs of the <\/span><span data-contrast=\"none\">Cordic_Translate_16<\/span><span data-contrast=\"none\"> module, which computes the corresponding amplitude and phase.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">In this example, the FFT is configured as a forward Fourier transform through hardcoded settings by setting LSB of <\/span><span data-contrast=\"none\">s_axis_config_tdata<\/span><span data-contrast=\"none\"> to high. Event signals are deliberately left unconnected, as they are not utilized in this example. The end of each FFT frame is indicated by the <\/span><span data-contrast=\"none\">m_axis_data_tlast<\/span><span data-contrast=\"none\"> signal, upon which the FFT core is reset to prepare for the next processing cycle.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">To account for the 20-cycle processing latency of the <\/span><span data-contrast=\"none\">Cordic_Translate_16<\/span><span data-contrast=\"none\">, the FFT output index (<\/span><span data-contrast=\"none\">m_axis_data_tuser<\/span><span data-contrast=\"none\">) is delayed accordingly. The resulting amplitude, phase, and frequency bin index are routed to OutputA, OutputB, and OutputC, respectively.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW13861309 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW13861309 BCX0\"><span class=\"TextRun SCXW13861309 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\">7<\/span><\/span><\/span><span class=\"TextRun SCXW13861309 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\">VHDL example demonstrating the instantiation of the <\/span><\/span><span class=\"TextRun SCXW13861309 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\">FFT_1024<\/span><\/span><span class=\"TextRun SCXW13861309 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\"> IP core along with the <\/span><\/span><span class=\"TextRun SCXW13861309 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\">Cordic_Translate_16<\/span><\/span><span class=\"TextRun SCXW13861309 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW13861309 BCX0\" data-ccp-parastyle=\"caption\"> module, used to convert the FFT output into corresponding amplitude and phase values.<\/span><\/span><span class=\"EOP SCXW13861309 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>LIBRARY IEEE;\r\nUSE IEEE.STD_LOGIC_1164.ALL;\r\nUSE IEEE.NUMERIC_STD.ALL;\r\n\r\nARCHITECTURE Behavioural OF CustomWrapper IS\r\n\r\n\tTYPE array_tuser IS ARRAY (0 TO 19) OF signed(15 DOWNTO 0);\r\n\r\n\tSIGNAL aresetn, aresetn_dly : STD_LOGIC;\r\n\r\n\tSIGNAL s_axis_data_tdata : STD_LOGIC_VECTOR(31 DOWNTO 0);\r\n\tSIGNAL s_axis_data_tready : STD_LOGIC;\r\n\r\n\tSIGNAL m_axis_data_tlast : STD_LOGIC;\r\n\tSIGNAL m_axis_data_tvalid, m_axis_data_tvalid_dly : STD_LOGIC;\r\n\tSIGNAL m_axis_data_tuser : signed(15 DOWNTO 0);\r\n\tSIGNAL m_axis_data_tuser_dly : array_tuser;\r\n\r\n\tSIGNAL m_axis_dout_tvalid : STD_LOGIC;\r\n\tSIGNAL tdata_temp : signed(31 DOWNTO 0);\r\n\r\n\tSIGNAL im, real : STD_LOGIC_VECTOR(26 DOWNTO 0);\r\n\r\n\tSIGNAL fftdata_temp : STD_LOGIC_VECTOR(63 DOWNTO 0);\r\n\r\nBEGIN\r\n\r\n\tFFT_DUT : FFT_1024\r\n\tPORT MAP(\r\n\t\taclk =&gt; clk,\r\n\t\taresetn =&gt; (NOT reset) AND aresetn AND aresetn_dly,\r\n\t\t-- Forward FFT with the LSB configured as 1\r\n\t\ts_axis_config_tdata =&gt; x\"01\",\r\n\t\t-- Config data is always valid\r\n\t\ts_axis_config_tvalid =&gt; '1',\r\n\t\t-- Leave config ready signal open\r\n\t\t-- config data is constant\r\n\t\ts_axis_config_tready =&gt; OPEN,\r\n\t\t-- Input only has real values\r\n\t\ts_axis_data_tdata =&gt; s_axis_data_tdata,\r\n\t\t-- Input data is always valid\r\n\t\ts_axis_data_tvalid =&gt; '1',\r\n\t\t-- Data ready logic\r\n\t\ts_axis_data_tready =&gt; s_axis_data_tready,\r\n\t\t-- Continuous data stream\r\n\t\t-- don't have last sample\r\n\t\ts_axis_data_tlast =&gt; '0',\r\n\r\n\t\t-- Transformed data\r\n\t\tm_axis_data_tdata =&gt; fftdata_temp,\r\n\t\t-- FFT frequency index\r\n\t\tm_axis_data_tuser =&gt; m_axis_data_tuser,\r\n\t\t-- output is valid\r\n\t\tm_axis_data_tvalid =&gt; m_axis_data_tvalid,\r\n\t\t-- Slave device is always ready to accept output\r\n\t\tm_axis_data_tready =&gt; '1',\r\n\t\t-- last sample of the frame\r\n\t\tm_axis_data_tlast =&gt; m_axis_data_tlast,\r\n\r\n\t\t-- don't care events\r\n\t\tevent_frame_started =&gt; OPEN,\r\n\t\tevent_tlast_unexpected =&gt; OPEN,\r\n\t\tevent_tlast_missing =&gt; OPEN,\r\n\t\tevent_status_channel_halt =&gt; OPEN,\r\n\t\tevent_data_in_channel_halt =&gt; OPEN,\r\n\t\tevent_data_out_channel_halt =&gt; OPEN\r\n\t);\r\n\r\n\t-- only output data when data is valid\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\r\n\t\t\tIF s_axis_data_tready THEN\r\n\t\t\t\ts_axis_data_tdata &lt;= x\"0000\" &amp; STD_LOGIC_VECTOR(InputA);\r\n\t\t\tEND IF;\r\n\r\n\t\t\tIF m_axis_data_tvalid THEN\r\n\t\t\t\tim &lt;= fftdata_temp(58 DOWNTO 32);\r\n\t\t\t\treal &lt;= fftdata_temp(26 DOWNTO 0);\r\n\t\t\tEND IF;\r\n\t\t\tm_axis_data_tuser_dly &lt;= m_axis_data_tuser &amp; m_axis_data_tuser_dly(0 TO 18);\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\t-- reset process\r\n\t-- reset fft when the tlast is high\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(Clk) THEN\r\n\r\n\t\t\taresetn_dly &lt;= aresetn;\r\n\t\t\tIF m_axis_data_tlast THEN\r\n\t\t\t\taresetn &lt;= '0';\r\n\t\t\tELSE\r\n\t\t\t\taresetn &lt;= '1'; END IF; END IF; END PROCESS; Cordic : Cordic_Translate_16 PORT MAP( aclk =&gt; clk,\r\n\t\ts_axis_cartesian_tvalid =&gt; m_axis_data_tvalid,\r\n\t\ts_axis_cartesian_tdata =&gt; STD_LOGIC_VECTOR(im(26 DOWNTO 11) &amp; real(26 DOWNTO 11)),\r\n\t\tm_axis_dout_tvalid =&gt; m_axis_dout_tvalid,\r\n\t\tm_axis_dout_tdata =&gt; tdata_temp\r\n\t);\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\r\n\t\t\tIF m_axis_dout_tvalid THEN\r\n\t\t\t\tOutputA &lt;= signed(tdata_temp(15 DOWNTO 0));\r\n\t\t\t\tOutputB &lt;= signed(tdata_temp(31 DOWNTO 16));\r\n\t\t\t\tOutputC &lt;= signed(m_axis_data_tuser_dly(19));\r\n\t\t\tEND IF;\r\n\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"none\"><br \/>\nThe Multi-Instrument Mode test configurations and corresponding output signals are shown in Figure 18 and Figure 19. Figure 18 illustrates the measurement setup for the amplitude output from the <\/span><span data-contrast=\"none\">FFT_1024<\/span><span data-contrast=\"none\"> and <\/span><span data-contrast=\"none\">Cordic_Translate_16<\/span><span data-contrast=\"none\"> IP cores, while Figure 19 shows the configuration for capturing the phase output.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">In Figure 18, two peaks are visible in the amplitude spectrum, one in the positive frequency range and the other in the negative. The index associated with the positive frequency peak corresponds to a timestamp relative to the beginning of the index ramp. Given that the Moku:Go clock operates at 31.25 MHz and the total time span of the index ramp is 32.684 microseconds, the estimated frequency is calculated as:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" width=\"300\" height=\"34\" class=\"aligncenter size-medium wp-image-23714\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-145853-300x34.png\" alt=\"\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-145853-300x34.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-145853-1024x114.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-145853-768x86.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-145853-1536x172.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-145853-600x67.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-145853.png 1637w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p style=\"text-align: center;\">\\(text{Frequency} = frac{text{10.531 } mu text{s}}{text{32.684 } mu text{s}} times text{31.25 MHz} = text{10.0689 MHz}\\)<\/p>\n<p><span data-contrast=\"none\">It is important to note that the 1024-point FFT results in a resolution bandwidth of approximately 0.03 MHz. Therefore, this implementation is suitable for coarse frequency estimation only. For more precise analysis, it is recommended to use the <\/span><a href=\"https:\/\/liquidinstruments.com\/products\/integrated-instruments\/phasemeter\/\"><span data-contrast=\"none\">Moku Phasemeter<\/span><\/a><span data-contrast=\"none\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Figure 19 displays the phase output in red. The phase appears unstable due to the variability of the FFT analysis window across acquisition cycles. This example serves as a functional demonstration but does not constitute a complete spectrum analyzer, as it lacks essential components such as a windowing function and a superheterodyne block.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23721 size-large\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_18-1024x343.png\" alt=\"\" width=\"900\" height=\"301\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_18-1024x343.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_18-300x100.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_18-768x257.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_18-1536x514.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_18-600x201.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_18.png 1999w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW173416511 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW173416511 BCX0\"><span class=\"TextRun SCXW173416511 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">18<\/span><\/span><\/span><span class=\"TextRun SCXW173416511 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">: M<\/span><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span> <span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">test configuration and amplitude output results for the FFT_1024 IP core. A 10 <\/span><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">MHz<\/span><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\"> sine wave is applied to <\/span><span class=\"SpellingError SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">InputA<\/span><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\"> of the M<\/span><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\"> and processed by the <\/span><\/span><span class=\"TextRun SCXW173416511 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\">FFT_1024<\/span><\/span><span class=\"TextRun SCXW173416511 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW173416511 BCX0\" data-ccp-parastyle=\"caption\"> module. The resulting amplitude spectrum, displayed on Channel A (red), reveals two peaks corresponding to the positive and negative frequency components of the input signal.<\/span><\/span><span class=\"EOP SCXW173416511 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23724 size-large\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_19-1024x342.png\" alt=\"\" width=\"900\" height=\"301\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_19-1024x342.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_19-300x100.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_19-768x256.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_19-1536x513.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_19-600x200.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_19.png 1993w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW224369746 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW224369746 BCX0\"><span class=\"TextRun SCXW224369746 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\">19<\/span><\/span><\/span><span class=\"TextRun SCXW224369746 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\">M<\/span><span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span> <span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\">test configuration and phase response of the <\/span><\/span><span class=\"TextRun SCXW224369746 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\">FFT_1024<\/span><\/span><span class=\"TextRun SCXW224369746 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW224369746 BCX0\" data-ccp-parastyle=\"caption\"> IP core. The observed phase response appears unstable due to the random time offset of the FFT analysis window relative to the input signal.<\/span><\/span><span class=\"EOP SCXW224369746 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h2><span data-contrast=\"none\">8. <\/span><span data-contrast=\"none\">FFT_65536<\/span><\/h2>\n<p><span data-contrast=\"none\">FFT_65536<\/span><span data-contrast=\"none\"> is a variant of <\/span><span data-contrast=\"none\">FFT_1024<\/span><span data-contrast=\"none\">, generated using the same IP core compiler but configured with a larger number of FFT points. Although both cores share the same foundation, <\/span><span data-contrast=\"none\">FFT_65536<\/span><span data-contrast=\"none\"> has distinct configuration parameters and output data formats to accommodate the increased point count. Detailed port specifications and updated signal connections are provided in Table 11, with changes highlighted.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p><span data-contrast=\"none\">Due to hardware resource limitations, the <\/span><span data-contrast=\"none\">FFT_65536<\/span><span data-contrast=\"none\"> IP core is not supported on Moku:Go or Moku:Lab and must be deployed on Moku:Pro.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\">Table 11: Ports definitions of FFT_65536 IP core. The parameters different than the FFT_1024 are bolded.<\/p>\n<table data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"21\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Name<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Direction<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Description<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">aclk<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Rising-edge clock.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">aresetn<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Active-Low synchronous clear (optional, always take priority over aclken). A minimum aresetn active pulse of two cycles is required.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><b><span data-contrast=\"none\">s_axis_config_tdata[39:0]<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for the Configuration channel. The 0th bit controls the forward or inverse FFT. And [32:1] is the scale of the output. Other bits are empty.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_config_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for the Configuration channel.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"6\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_config_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tready for the Configuration channel.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"7\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tdata[31:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for the Data Input channel. Carries the unprocessed sample data: real [15:0] and imaginary [31:16].<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"8\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for the Data Input channel. Set to constant high.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"9\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tready for the Data Input channel. Used by the core to signal that it is ready to accept data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"10\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">s_axis_data_tlast<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tlast for the Data Input channel. Asserted by the external master on the last sample of the frame.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"11\">\n<td data-celllook=\"4369\"><b><span data-contrast=\"none\">m_axis_data_tdata[31:0]<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tdata for the Data Output channel. Carries the processed sample data real [15:0] and imaginary [31:16]. The signal format is signed 16-bit with 15 fractional bits.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"12\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tuser[15:0]<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tuser for the Data Output channel. Carries the index of per-sample information.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"13\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tvalid<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tvalid for the Data Output channel. Asserted by the core to signal that it is able to provide sample data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"14\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tready<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Input<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tready for the Data Output channel. Asserted by the external block to signal that it is ready to accept data.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"15\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">m_axis_data_tlast<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">tlast for the Data Output channel. Asserted by the core on the last sample of the frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"16\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_frame_started<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core starts to process a new frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"17\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_tlast_unexpected<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core sees s_axis_data_tlast High on a data sample that is not the last one in a frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"18\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_tlast_missing<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when s_axis_data_tlast is Low on the last data sample of a frame.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"19\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_status_channel_halt<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core tries to write data to the Status channel and it is unable to do so.&nbsp;<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"20\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_data_in_channel_halt<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core requests data from the Data Input channel and none is available.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"21\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">event_data_out_channel_halt<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Output<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Asserted when the core tries to write data to the Data Output channel and it is unable to do so.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span class=\"TextRun SCXW110994446 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW110994446 BCX0\">The VHDL example for instantiating <\/span><\/span><span class=\"TextRun SCXW110994446 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW110994446 BCX0\">FFT_65536<\/span><\/span><span class=\"TextRun SCXW110994446 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW110994446 BCX0\"> and one <\/span><\/span><span class=\"TextRun SCXW110994446 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW110994446 BCX0\">Cordic_Translate_16<\/span><\/span><span class=\"TextRun SCXW110994446 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW110994446 BCX0\"> is shown in Code 8. The <\/span><span class=\"NormalTextRun SCXW110994446 BCX0\">M<\/span><span class=\"NormalTextRun SCXW110994446 BCX0\">oku Cloud Compile<\/span> <span class=\"NormalTextRun SCXW110994446 BCX0\">outputs include the amplitude and phase spectra of <\/span><span class=\"SpellingError SCXW110994446 BCX0\">InputA<\/span><span class=\"NormalTextRun SCXW110994446 BCX0\">, along with the frequency index. Additionally, Control0 is used to set the scale parameter, and the LSB of Control1 determines the FFT direction.<\/span><\/span><span class=\"EOP SCXW110994446 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW56213503 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW56213503 BCX0\"><span class=\"TextRun SCXW56213503 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\">8<\/span><\/span><\/span><span class=\"TextRun SCXW56213503 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\">VHDL example demonstrating the instantiation of one <\/span><\/span><span class=\"TextRun SCXW56213503 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\">FFT_65536<\/span><\/span><span class=\"TextRun SCXW56213503 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\"> and one <\/span><\/span><span class=\"TextRun SCXW56213503 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\">Cordic_Translate_16<\/span><\/span><span class=\"TextRun SCXW56213503 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW56213503 BCX0\" data-ccp-parastyle=\"caption\"> module.<\/span><\/span><span class=\"EOP SCXW56213503 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>LIBRARY ieee;\r\n\r\nARCHITECTURE Behavioural OF CustomWrapper IS\r\n\r\n\tTYPE array_tuser IS ARRAY (0 TO 19) OF signed(15 DOWNTO 0);\r\n\r\n\tSIGNAL aresetn, aresetn_dly : STD_LOGIC;\r\n\r\n\tSIGNAL s_axis_data_tdata : STD_LOGIC_VECTOR(31 DOWNTO 0);\r\n\tSIGNAL s_axis_data_tready : STD_LOGIC;\r\n\r\n\tSIGNAL m_axis_data_tlast : STD_LOGIC;\r\n\tSIGNAL m_axis_data_tvalid, m_axis_data_tvalid_dly : STD_LOGIC;\r\n\tSIGNAL count_out, m_axis_data_tuser : signed(15 DOWNTO 0);\r\n\tSIGNAL m_axis_data_tuser_dly : array_tuser;\r\n\r\n\tSIGNAL fftdata_temp : signed(31 DOWNTO 0);\r\n\tSIGNAL real, im : signed(15 DOWNTO 0);\r\n\r\n\tSIGNAL m_axis_dout_tvalid : STD_LOGIC;\r\n\tSIGNAL tdata_temp : signed(31 DOWNTO 0);\r\n\r\nBEGIN\r\n\r\n\tFFT_DUT : FFT_65536\r\n\tPORT MAP(\r\n\t\taclk =&gt; clk,\r\n\t\t-- aresetn =&gt; (not Reset) and FFT_reset and FFT_reset_dly,\r\n\t\taresetn =&gt; (NOT reset) AND aresetn AND aresetn_dly,\r\n\t\t-- Control FFT direction with LSB of Control1\r\n\t\t-- and scale of the FFT output with Control0\r\n\t\ts_axis_config_tdata =&gt; \"0000000\" &amp; Control0(31 DOWNTO 0) &amp; Control1(0),\r\n\t\t-- Config data is always valid\r\n\t\ts_axis_config_tvalid =&gt; '1',\r\n\t\t-- Leave config ready signal open\r\n\t\t-- config data is constant\r\n\t\ts_axis_config_tready =&gt; OPEN,\r\n\t\t-- Input only has real values\r\n\t\ts_axis_data_tdata =&gt; s_axis_data_tdata,\r\n\t\t-- Input data is always valid\r\n\t\ts_axis_data_tvalid =&gt; '1',\r\n\t\t-- Data ready logic\r\n\t\ts_axis_data_tready =&gt; s_axis_data_tready,\r\n\t\t-- Continuous data stream\r\n\t\t-- don't have last sample\r\n\t\ts_axis_data_tlast =&gt; '0',\r\n\r\n\t\t-- Transformed data\r\n\t\tm_axis_data_tdata =&gt; fftdata_temp,\r\n\t\t-- FFT frequency index\r\n\t\tm_axis_data_tuser =&gt; m_axis_data_tuser,\r\n\t\t-- output is valid\r\n\t\tm_axis_data_tvalid =&gt; m_axis_data_tvalid,\r\n\t\t-- Slave device is always ready to accept output\r\n\t\tm_axis_data_tready =&gt; '1',\r\n\t\t-- last sample of the frame\r\n\t\tm_axis_data_tlast =&gt; m_axis_data_tlast,\r\n\r\n\t\t-- don't care events\r\n\t\tevent_frame_started =&gt; OPEN,\r\n\t\tevent_tlast_unexpected =&gt; OPEN,\r\n\t\tevent_tlast_missing =&gt; OPEN,\r\n\t\tevent_status_channel_halt =&gt; OPEN,\r\n\t\tevent_data_in_channel_halt =&gt; OPEN,\r\n\t\tevent_data_out_channel_halt =&gt; OPEN\r\n\t);\r\n\r\n\t-- only output data when data is valid\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\r\n\t\t\tIF s_axis_data_tready THEN\r\n\t\t\t\ts_axis_data_tdata &lt;= x\"0000\" &amp; STD_LOGIC_VECTOR(InputA);\r\n\t\t\tEND IF;\r\n\r\n\t\t\tIF m_axis_data_tvalid THEN\r\n\t\t\t\t-- real part\r\n\t\t\t\treal &lt;= fftdata_temp(15 DOWNTO 0);\r\n\t\t\t\t-- imaginary part\r\n\t\t\t\tim &lt;= fftdata_temp(31 DOWNTO 16);\r\n\t\t\tEND IF;\r\n\t\t\t-- delay 20 clk cycles\r\n\t\t\tm_axis_data_tuser_dly &lt;= m_axis_data_tuser &amp; m_axis_data_tuser_dly(0 TO 18);\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\t-- reset process\r\n\t-- reset fft when the tlast is high\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(Clk) THEN\r\n\r\n\t\t\taresetn_dly &lt;= aresetn;\r\n\t\t\tIF m_axis_data_tlast THEN\r\n\t\t\t\taresetn &lt;= '0';\r\n\t\t\tELSE\r\n\t\t\t\taresetn &lt;= '1'; END IF; END IF; END PROCESS; Cordic : Cordic_Translate_16 PORT MAP( aclk =&gt; clk,\r\n\t\ts_axis_cartesian_tvalid =&gt; m_axis_data_tvalid,\r\n\t\ts_axis_cartesian_tdata =&gt; STD_LOGIC_VECTOR(im &amp; real),\r\n\t\tm_axis_dout_tvalid =&gt; m_axis_dout_tvalid,\r\n\t\tm_axis_dout_tdata =&gt; tdata_temp\r\n\t);\r\n\tPROCESS (clk)\r\n\tBEGIN\r\n\t\tIF rising_edge(clk) THEN\r\n\r\n\t\t\tIF m_axis_dout_tvalid THEN\r\n\t\t\t\tOutputA &lt;= signed(tdata_temp(15 DOWNTO 0));\r\n\t\t\t\tOutputB &lt;= signed(tdata_temp(31 DOWNTO 16));\r\n\t\t\t\tOutputC &lt;= signed(m_axis_data_tuser_dly(19));\r\n\t\t\tEND IF;\r\n\r\n\t\tEND IF;\r\n\tEND PROCESS;\r\n\r\nEND ARCHITECTURE;<\/code><\/pre>\n<p><span class=\"TextRun SCXW135340268 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW135340268 BCX0\">The <\/span><span class=\"SpellingError SCXW135340268 BCX0\">Moku:Pro<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\"> M<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\"> test configurations are shown in Figure 20. The signal under test is generated by the <\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">Moku <\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">Oscilloscope\u2019s built-in waveform generator and routed back to the M<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\"> input via the internal digital signal bus. M<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">oku <\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">C<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">loud <\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">C<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\">ompile<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\"> produces three outputs: <\/span><span class=\"SpellingError SCXW135340268 BCX0\">OutputA<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\"> and <\/span><span class=\"SpellingError SCXW135340268 BCX0\">OutputB<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\"> represent the converted amplitude and phase, while <\/span><span class=\"SpellingError SCXW135340268 BCX0\">OutputC<\/span><span class=\"NormalTextRun SCXW135340268 BCX0\"> corresponds to the frequency index. These outputs are connected to the inputs of the Oscilloscope for monitoring.<\/span><\/span><span class=\"EOP SCXW135340268 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-23725 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_20.png\" alt=\"\" width=\"802\" height=\"314\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_20.png 884w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_20-300x117.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_20-768x301.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_20-600x235.png 600w\" sizes=\"(max-width: 802px) 100vw, 802px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW5174145 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW5174145 BCX0\"><span class=\"TextRun SCXW5174145 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">20<\/span><\/span><\/span><span class=\"TextRun SCXW5174145 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"SpellingError SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">Moku:Pro<\/span> <\/span><span class=\"TextRun SCXW5174145 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">FFT_65536<\/span><\/span><span class=\"TextRun SCXW5174145 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\"> t<\/span><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">esting <\/span><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">M<\/span><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">ulti-Instrument Mode<\/span><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\"> c<\/span><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">onfigurations<\/span><span class=\"NormalTextRun SCXW5174145 BCX0\" data-ccp-parastyle=\"caption\">.<\/span><\/span><span class=\"EOP SCXW5174145 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><span class=\"TextRun SCXW38057605 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW38057605 BCX0\">The output amplitude and frequency index of <\/span><\/span><span class=\"TextRun SCXW38057605 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW38057605 BCX0\">FFT_65536<\/span><\/span><span class=\"TextRun SCXW38057605 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW38057605 BCX0\"> are shown in Figure 2<\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">1<\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">. Control0 is fine-tuned to prevent signal overflow, and Control1 is set to 1 to perform a forward FFT. It is worth noting that the frequency index appears to flip signs due to the use of a signed 16-bit representation for the 65,536-point FFT, which <\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">results in an overflow. However, this overflow is harmless, as it effectively distinguishes between negative and positive frequencies. The amplitude channel shows a peak near the 80 MHz frequency index, which corresponds to the 80 MHz input signal from M<\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">oku <\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">C<\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">loud <\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">C<\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">ompile<\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">, given the <\/span><span class=\"SpellingError SCXW38057605 BCX0\">Moku:Pro<\/span> <span class=\"NormalTextRun SCXW38057605 BCX0\">M<\/span><span class=\"NormalTextRun SCXW38057605 BCX0\">oku Cloud Compile<\/span> <span class=\"NormalTextRun SCXW38057605 BCX0\">clock rate of 312.5 <\/span><span class=\"SpellingError SCXW38057605 BCX0\">MHz.<\/span><\/span><span class=\"EOP SCXW38057605 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<img decoding=\"async\" width=\"300\" height=\"36\" class=\"aligncenter size-medium wp-image-23726\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-151220-300x36.png\" alt=\"\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-151220-300x36.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-151220-1024x123.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-151220-768x92.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-151220-1536x184.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-151220-600x72.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/Screenshot-2025-04-17-151220.png 1602w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p style=\"text-align: center;\">\\(text{Frequency} = frac{53.86  mu text{s}}{104.95  mu text{s}} times frac{312.5  text{MHz}}{2} = 80.19  text{MHz}\\)<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-23727 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_21-1024x365.png\" alt=\"\" width=\"788\" height=\"281\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_21-1024x365.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_21-300x107.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_21-768x274.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_21-1536x548.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_21-600x214.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_21.png 1872w\" sizes=\"(max-width: 788px) 100vw, 788px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW74792193 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW74792193 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW74792193 BCX0\"><span class=\"TextRun SCXW74792193 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW74792193 BCX0\" data-ccp-parastyle=\"caption\">21<\/span><\/span><\/span><span class=\"TextRun SCXW74792193 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW74792193 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW74792193 BCX0\" data-ccp-parastyle=\"caption\">Test results of the instantiated <\/span><\/span><span class=\"TextRun SCXW74792193 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW74792193 BCX0\" data-ccp-parastyle=\"caption\">FFT_65536<\/span><\/span><span class=\"TextRun SCXW74792193 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW74792193 BCX0\" data-ccp-parastyle=\"caption\"> and its corresponding amplitude spectrum output.<\/span><\/span><span class=\"EOP SCXW74792193 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h2 aria-level=\"1\"><span data-contrast=\"none\">Customized IP cores<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559737&quot;:2176,&quot;335559738&quot;:240,&quot;335559739&quot;:120,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/h2>\n<p><span data-contrast=\"none\">Moku Cloud Compile also allows users to upload custom .xci files that define the configuration of IP cores generated in Vivado. Moku Cloud Compile is capable of parsing these .xci files, loading the corresponding IP cores on the backend, and enabling their instantiation within user designs.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<span data-contrast=\"none\">It is important to note that the .xci files must be generated using Vivado version 2022.2 to ensure compatibility with the Moku Cloud Compile backend. All IP cores supported by Vivado 2022.2 are likewise supported by Moku Cloud Compile. Vivado 2022.2 is available for download from the <\/span><a href=\"https:\/\/www.xilinx.com\/support\/download\/index.html\/content\/xilinx\/en\/downloadNav\/vivado-design-tools\/archive.html\"><span data-contrast=\"none\">official AMD website<\/span><\/a><span data-contrast=\"none\">. The following section presents an example to illustrate this process.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<h3><span data-contrast=\"none\">1. Create Vivado project:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">&nbsp;<\/span><\/h3>\n<p><span data-contrast=\"none\">Selecting the correct hardware platform is essential during the project creation process. The target FPGA device must be specified as part of the setup process. Table 12 lists the FPGA platform models for three supported hardware platforms, and an example configuration is illustrated in Figure 22.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\">Table 12: The FPGA model numbers of the Moku platforms.<\/p>\n<table style=\"margin-left: auto; margin-right: auto;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"4\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Platform<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">FPGA model<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Moku:Go<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">xc7z020clg400-1<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Moku:Lab<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">xc7z020clg484-3<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Moku:Pro<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">xczu9egffvc900-2<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-23728 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_22.png\" alt=\"\" width=\"774\" height=\"544\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_22.png 974w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_22-300x211.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_22-768x540.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_22-600x422.png 600w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW210196419 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW210196419 BCX0\"><span class=\"TextRun SCXW210196419 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\">22<\/span><\/span><\/span><span class=\"TextRun SCXW210196419 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\">The project must be created in <\/span><span class=\"SpellingError SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\">Vivado<\/span><span class=\"NormalTextRun SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\"> with the appropriate FPGA platform settings. In this example, the <\/span><span class=\"SpellingError SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\">Moku:Go<\/span><span class=\"NormalTextRun SCXW210196419 BCX0\" data-ccp-parastyle=\"caption\"> platform is selected as the target device.<\/span><\/span><span class=\"EOP SCXW210196419 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h3><span data-contrast=\"none\">2. Build an IP core and locate the .xci file<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">&nbsp;<\/span><\/h3>\n<p><span data-contrast=\"none\">A custom IP core can be compiled by following the steps illustrated in Figure 23. First, select <\/span><b><span data-contrast=\"none\">IP Catalog<\/span><\/b><span data-contrast=\"none\"> from the <\/span><b><span data-contrast=\"none\">Project Manager<\/span><\/b><span data-contrast=\"none\"> panel on the left (Step 1). Then, choose the desired IP core from the list in the right panel (Step 2). During configuration, the clock frequency may be required; platform-specific clock rates are provided in Table 13. Once the IP core is configured, it will appear in the <\/span><b><span data-contrast=\"none\">Sources<\/span><\/b><span data-contrast=\"none\"> window (Step 3). The location of the generated .xci file can be found in the <\/span><b><span data-contrast=\"none\">Source File Properties<\/span><\/b><span data-contrast=\"none\"> panel (Step 4).<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW85442330 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">Table <\/span><\/span><span class=\"FieldRange SCXW85442330 BCX0\"><span class=\"TextRun SCXW85442330 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">13<\/span><\/span><\/span><span class=\"TextRun SCXW85442330 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">Clock rates of M<\/span><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">oku <\/span><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">C<\/span><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">loud <\/span><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">C<\/span><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\">ompile<\/span><span class=\"NormalTextRun SCXW85442330 BCX0\" data-ccp-parastyle=\"caption\"> across different hardware platforms.<\/span><\/span><span class=\"EOP SCXW85442330 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<table style=\"font-weight: 400; margin-left: auto; margin-right: auto;\" data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"4\">\n<tbody>\n<tr style=\"text-align: center;\" aria-rowindex=\"1\">\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Platform<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"69905\"><b><span data-contrast=\"none\">Moku Cloud Compile clock rate (MHz)<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Moku:Go<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">31.25<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr style=\"text-align: center;\" aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"none\">Moku:Lab<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"none\">125<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td style=\"text-align: center;\" data-celllook=\"4369\"><span data-contrast=\"none\">Moku:Pro<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/td>\n<td data-celllook=\"4369\">\n<p style=\"text-align: center;\"><span data-contrast=\"none\">312.5<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-23732 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1024x811.png\" alt=\"\" width=\"798\" height=\"632\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1024x811.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-300x238.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-768x608.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-600x475.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25.png 1325w\" sizes=\"(max-width: 798px) 100vw, 798px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW145275317 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW145275317 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW145275317 BCX0\"><span class=\"TextRun SCXW145275317 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW145275317 BCX0\" data-ccp-parastyle=\"caption\">23<\/span><\/span><\/span><span class=\"TextRun SCXW145275317 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW145275317 BCX0\" data-ccp-parastyle=\"caption\">: The process of configuring the IP core.<\/span><\/span><span class=\"EOP SCXW145275317 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h3><span data-contrast=\"none\">3. Upload .xci file to Moku Cloud Compile and change OUTPUTDIR<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">&nbsp;<\/span><\/h3>\n<p><span data-contrast=\"none\">Once the IP core has been compiled, the .xci file should be uploaded to the <\/span><a href=\"https:\/\/compile.liquidinstruments.com\/\"><span data-contrast=\"none\">Moku Cloud Compile web interface<\/span><\/a><span data-contrast=\"none\">. To ensure successful recompilation on the Moku Cloud Compile backend, the <\/span><b><span data-contrast=\"none\">OUTPUTDIR<\/span><\/b><span data-contrast=\"none\"> parameter must be set to &#8220;<\/span><span data-contrast=\"none\">..\/output<\/span><span data-contrast=\"none\">&#8220;. An example of this process is illustrated in Figure 24.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-23733 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_24-1.png\" alt=\"\" width=\"787\" height=\"474\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_24-1.png 833w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_24-1-300x181.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_24-1-768x463.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_24-1-600x362.png 600w\" sizes=\"(max-width: 787px) 100vw, 787px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW86125557 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW86125557 BCX0\"><span class=\"TextRun SCXW86125557 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">24<\/span><\/span><\/span><span class=\"TextRun SCXW86125557 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">: Upload the .xci file to <\/span><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">Moku Cloud Compile <\/span><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">and <\/span><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">set<\/span><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\"> the <\/span><\/span><span class=\"TextRun SCXW86125557 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">OUTPUTDIR<\/span><\/span><span class=\"TextRun SCXW86125557 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\"> to <\/span><span class=\"ContextualSpellingAndGrammarError SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">&#8220;<\/span><\/span><span class=\"TextRun SCXW86125557 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"ContextualSpellingAndGrammarError SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">..<\/span><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">\/output<\/span><\/span><span class=\"TextRun SCXW86125557 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\">&#8220;<\/span><span class=\"NormalTextRun SCXW86125557 BCX0\" data-ccp-parastyle=\"caption\"> to ensure proper compilation.<\/span><\/span><span class=\"EOP SCXW86125557 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<h3><span class=\"TextRun Underlined SCXW245751775 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW245751775 BCX0\">4. Instantiate the IP core in M<\/span><span class=\"NormalTextRun SCXW245751775 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW245751775 BCX0\"> and build the design<\/span><\/span><span class=\"EOP SCXW245751775 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">&nbsp;<\/span><\/h3>\n<p><span class=\"TextRun SCXW70316086 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW70316086 BCX0\">To instantiate a custom IP core in M<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\">oku <\/span><span class=\"NormalTextRun SCXW70316086 BCX0\">C<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\">loud <\/span><span class=\"NormalTextRun SCXW70316086 BCX0\">C<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\">ompile<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\">, it is essential to understand the port configurations and signal connections. <\/span><span class=\"NormalTextRun SCXW70316086 BCX0\">Figure 25 illustrates the process of locating the instantiation template.<\/span> <span class=\"NormalTextRun SCXW70316086 BCX0\">Begin by selecting IP Sources, then locate the .<\/span><span class=\"SpellingError SCXW70316086 BCX0\">vho<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\"> and .<\/span><span class=\"SpellingError SCXW70316086 BCX0\">veo<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\"> files, which provide example instantiations. The .<\/span><span class=\"SpellingError SCXW70316086 BCX0\">vho<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\"> file is intended for VHDL, while the .<\/span><span class=\"SpellingError SCXW70316086 BCX0\">veo<\/span><span class=\"NormalTextRun SCXW70316086 BCX0\"> file is used for Verilog.<\/span><\/span><span class=\"EOP SCXW70316086 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-23734 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1-1024x811.png\" alt=\"\" width=\"762\" height=\"604\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1-1024x811.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1-300x238.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1-768x608.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1-600x475.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_25-1.png 1325w\" sizes=\"(max-width: 762px) 100vw, 762px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW66854067 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW66854067 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW66854067 BCX0\"><span class=\"TextRun SCXW66854067 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW66854067 BCX0\" data-ccp-parastyle=\"caption\">25<\/span><\/span><\/span><span class=\"TextRun SCXW66854067 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW66854067 BCX0\" data-ccp-parastyle=\"caption\">: Locating the IP core instantiating templates.<\/span><\/span><span class=\"EOP SCXW66854067 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p><span class=\"TextRun SCXW169996372 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW169996372 BCX0\">Next,<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\"> the process of<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\"> instantiat<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\">ing<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\"> the custom IP core using the templates <\/span><span class=\"NormalTextRun SCXW169996372 BCX0\">is <\/span><span class=\"NormalTextRun SCXW169996372 BCX0\">shown in Figure 2<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\">6<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\">. This completes the setup, after which the custom IP core can be compiled within M<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\"> and the bitstreams <\/span><span class=\"NormalTextRun SCXW169996372 BCX0\">are<\/span><span class=\"NormalTextRun SCXW169996372 BCX0\"> generated.<\/span><\/span><span class=\"EOP SCXW169996372 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-23735 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_26.png\" alt=\"\" width=\"814\" height=\"763\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_26.png 1008w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_26-300x281.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_26-768x720.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_26-600x563.png 600w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW40975546 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW40975546 BCX0\"><span class=\"TextRun SCXW40975546 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\">26<\/span><\/span><\/span><span class=\"TextRun SCXW40975546 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\">:<\/span> <span class=\"NormalTextRun SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\">Instantiate the IP core within M<\/span><span class=\"NormalTextRun SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\"> and connect its signals to the corresponding ports of the <\/span><span class=\"SpellingError SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\">CustomWrapper<\/span><span class=\"NormalTextRun SCXW40975546 BCX0\" data-ccp-parastyle=\"caption\"> module.<\/span><\/span><span class=\"EOP SCXW40975546 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2 aria-level=\"1\"><span data-contrast=\"none\">Verilog support<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559737&quot;:2176,&quot;335559738&quot;:240,&quot;335559739&quot;:120,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/h2>\n<p><span data-contrast=\"none\">Verilog, like VHDL, is a hardware description language, but it is generally more compact and closely aligned with hardware modeling.&nbsp;<\/span><span data-contrast=\"none\">In contrast to VHDL, where users typically define only the behavior architecture of the CustomWrapper entity, Verilog requires both the declaration and structural definition of the entire CustomWrapper module. This includes explicitly specifying the CustomWrapper ports and internal logic.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<span data-contrast=\"none\">This section provides an example of instantiating the <\/span><span data-contrast=\"none\">AddSubtract_16<\/span><span data-contrast=\"none\"> IP core using Verilog, as shown in Code 9. It is important to note that Verilog is <\/span><b><span data-contrast=\"none\">case-sensitive<\/span><\/b><span data-contrast=\"none\">. Therefore, correct capitalization and consistent naming are essential to avoid synthesis or behavioral errors.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW35587251 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\">Code <\/span><\/span><span class=\"FieldRange SCXW35587251 BCX0\"><span class=\"TextRun SCXW35587251 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\">9<\/span><\/span><\/span><span class=\"TextRun SCXW35587251 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\">Example Verilog implementation demonstrating <\/span><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\">support<\/span><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\"> for the <\/span><\/span><span class=\"TextRun SCXW35587251 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\">AddSubtract_16<\/span><\/span><span class=\"TextRun SCXW35587251 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW35587251 BCX0\" data-ccp-parastyle=\"caption\"> IP core.<\/span><\/span><span class=\"EOP SCXW35587251 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:60,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n<pre><code>module CustomWrapper (\r\n    input wire Clk,\r\n    input wire Reset,\r\n    input wire [31:0] Sync,\r\n\r\n    \/\/ 4 input ports\r\n    input wire signed [15:0] InputA,\r\n    input wire signed [15:0] InputB,\r\n    input wire signed [15:0] InputC,\r\n    input wire signed [15:0] InputD,\r\n\r\n    \/\/ external trigger input port\r\n    input wire ExtTrig,\r\n\r\n    \/\/ 4 output ports\r\n    output wire signed [15:0] OutputA,\r\n    output wire signed [15:0] OutputB,\r\n    output wire signed [15:0] OutputC,\r\n    output wire signed [15:0] OutputD,\r\n\r\n    \/\/ enable\/disable interpolation\r\n    output wire OutputInterpA,\r\n    output wire OutputInterpB,\r\n    output wire OutputInterpC,\r\n    output wire OutputInterpD,\r\n\r\n    \/\/ 16 control registers\r\n    input wire [31:0] Control0,\r\n    input wire [31:0] Control1,\r\n    input wire [31:0] Control2,\r\n    input wire [31:0] Control3,\r\n    input wire [31:0] Control4,\r\n    input wire [31:0] Control5,\r\n    input wire [31:0] Control6,\r\n    input wire [31:0] Control7,\r\n    input wire [31:0] Control8,\r\n    input wire [31:0] Control9,\r\n    input wire [31:0] Control10,\r\n    input wire [31:0] Control11,\r\n    input wire [31:0] Control12,\r\n    input wire [31:0] Control13,\r\n    input wire [31:0] Control14,\r\n    input wire [31:0] Control15\r\n);\r\n  \r\nAddSubtract_16 AddSubtract_DUT (\r\n  .A(InputA),      \/\/ input wire [15 : 0] A\r\n  .B(InputB),      \/\/ input wire [15 : 0] B\r\n  .CLK(Clk),  \/\/ input wire CLK\r\n  .ADD(Control0[0]),  \/\/ input wire ADD\r\n  .CE(1'b1),    \/\/ input wire CE\r\n  .S(OutputA)      \/\/ output wire [15 : 0] S\r\n);\r\n  \r\nendmodule\r\n<\/code><\/pre>\n<p><span class=\"TextRun SCXW17845909 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW17845909 BCX0\">After uploading the example Verilog code to M<\/span><span class=\"NormalTextRun SCXW17845909 BCX0\">oku Cloud Compile,<\/span><span class=\"NormalTextRun SCXW17845909 BCX0\"> the <\/span><\/span><span class=\"TextRun SCXW17845909 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW17845909 BCX0\">AddSubtract_16<\/span><\/span><span class=\"TextRun SCXW17845909 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW17845909 BCX0\"> module can be compiled successfully, and the corresponding bitstream <\/span><span class=\"NormalTextRun SCXW17845909 BCX0\">is<\/span><span class=\"NormalTextRun SCXW17845909 BCX0\"> generated<\/span><span class=\"NormalTextRun SCXW17845909 BCX0\">, as illustrated in Figure 27<\/span><span class=\"NormalTextRun SCXW17845909 BCX0\">.<\/span><\/span><span class=\"EOP SCXW17845909 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><img decoding=\"async\" class=\"aligncenter wp-image-23736 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_27.png\" alt=\"\" width=\"848\" height=\"842\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_27.png 955w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_27-300x298.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_27-150x150.png 150w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_27-768x762.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_27-600x596.png 600w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/img_27-100x100.png 100w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/p>\n<p style=\"text-align: center;\"><span class=\"TextRun SCXW93545893 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\">Figure <\/span><\/span><span class=\"FieldRange SCXW93545893 BCX0\"><span class=\"TextRun SCXW93545893 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\">27<\/span><\/span><\/span><span class=\"TextRun SCXW93545893 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\">: <\/span><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\">M<\/span><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\">oku Cloud Compile<\/span><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\"> interface for compiling the <\/span><\/span><span class=\"TextRun SCXW93545893 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\">AddSubtract_16<\/span><\/span><span class=\"TextRun SCXW93545893 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW93545893 BCX0\" data-ccp-parastyle=\"caption\"> module and generating bitstreams from Verilog code.<\/span><\/span><\/p>\n<h2 aria-level=\"1\"><span data-contrast=\"none\">Summary<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559737&quot;:2176,&quot;335559738&quot;:240,&quot;335559739&quot;:120,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/h2>\n<p><span data-contrast=\"none\">Moku Cloud Compile offers eight precompiled IP cores for signal processing tasks such as arithmetic operations, filtering, waveform generation, and spectral analysis. Each core is described above with detailed port definitions, example VHDL implementations, and test configurations using Multi-Instrument Mode on Moku hardware platforms.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span><br \/>\n<span data-contrast=\"none\">In addition to built-in cores, users can upload custom IP cores by importing .xci files generated in Vivado 2022.2. Moku Cloud Compile also offers both Verilog and VHDL support. Together, these features enhance Moku Cloud Compile\u2019s capabilities, making it a powerful and flexible platform for rapid development and deployment of FPGA-based digital signal processing solutions.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120,&quot;335559740&quot;:276}\">&nbsp;<\/span>[\/vc_column_text][vc_row background=&#8221;gradient&#8221; layout=&#8221;vertical&#8221; options=&#8221;button&#8221; media_position=&#8221;right&#8221; media_type=&#8221;&#8221; ja_toggle_src=&#8221;&#8221; zh_toggle_src=&#8221;&#8221; kr_toggle_src=&#8221;&#8221; image=&#8221;&#8221; image_size=&#8221;full&#8221; aspect_ratio=&#8221;auto&#8221; max_width=&#8221;&#8221; center=&#8221;&#8221; href=&#8221;url:https%3A%2F%2Fknowledge.liquidinstruments.com%2F|title:Knowledge%20Base|target:_blank&#8221; style=&#8221;filled&#8221; size=&#8221;medium&#8221; href_secondary_btn=&#8221;&#8221; style-secondary=&#8221;filled&#8221; size-secondary=&#8221;medium&#8221; en_src=&#8221;&#8221; ja_src=&#8221;&#8221; zh_src=&#8221;&#8221; kr_src=&#8221;&#8221;][\/vc_row][vc_column][\/vc_column]<\/p>\n<\/div>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>[vc_row][vc_column][\/vc_column][\/vc_row][vc_column][\/vc_column][vc_column_text css=&#8221;&#8221;] Introduction&nbsp; Moku Cloud Compile is a powerful tool available on Moku devices. Moku FPGA-based test and measurement devices allow users to deploy custom VHDL and Verilog code to the hardware. With Moku Cloud Compile, you can extend and customize instrument functionality by integrating your own designs with existing instruments to create new capabilities [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":59,"featured_media":23860,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[92],"tags":[],"class_list":["post-23621","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-white-papers","site-category-moku-cloud-compile","site-category-multi-instrument-mode"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v27.0) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Using IP cores for faster customization in Moku Cloud Compile<\/title>\n<meta name=\"description\" content=\"Discover eight precompiled IP cores to accelerate signal processing tasks, with example implementations and test configurations\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using IP cores for faster customization in Moku Cloud Compile\" \/>\n<meta property=\"og:description\" content=\"Discover eight precompiled IP cores to accelerate signal processing tasks, with example implementations and test configurations\" \/>\n<meta property=\"og:url\" content=\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/\" \/>\n<meta property=\"og:site_name\" content=\"Liquid Instruments\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/LiquidInstruments\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-18T20:40:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-29T04:40:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Noah Monroy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@liquidinstrmnts\" \/>\n<meta name=\"twitter:site\" content=\"@liquidinstrmnts\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Noah Monroy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/\"},\"author\":{\"name\":\"Noah Monroy\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/person\/3e07e87049698dbcb79f8d92a4d30018\"},\"headline\":\"Using IP cores for faster customization in Moku Cloud Compile\",\"datePublished\":\"2025-04-18T20:40:36+00:00\",\"dateModified\":\"2025-08-29T04:40:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/\"},\"wordCount\":6571,\"publisher\":{\"@id\":\"https:\/\/liquidinstruments.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg\",\"articleSection\":[\"White papers\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/\",\"url\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/\",\"name\":\"Using IP cores for faster customization in Moku Cloud Compile\",\"isPartOf\":{\"@id\":\"https:\/\/liquidinstruments.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg\",\"datePublished\":\"2025-04-18T20:40:36+00:00\",\"dateModified\":\"2025-08-29T04:40:49+00:00\",\"description\":\"Discover eight precompiled IP cores to accelerate signal processing tasks, with example implementations and test configurations\",\"breadcrumb\":{\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage\",\"url\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg\",\"contentUrl\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"An engineer using Moku Cloud Compile to deploy custom functions\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/liquidinstruments.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using IP cores for faster customization in Moku Cloud Compile\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/liquidinstruments.com\/#website\",\"url\":\"https:\/\/liquidinstruments.com\/\",\"name\":\"Liquid Instruments\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/liquidinstruments.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/liquidinstruments.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/liquidinstruments.com\/#organization\",\"name\":\"Liquid Instruments\",\"url\":\"https:\/\/liquidinstruments.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1\",\"width\":1000,\"height\":924,\"caption\":\"Liquid Instruments\"},\"image\":{\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/LiquidInstruments\/\",\"https:\/\/x.com\/liquidinstrmnts\",\"https:\/\/www.instagram.com\/liquidinstruments\/\",\"https:\/\/www.linkedin.com\/company\/liquidinstruments\/\",\"https:\/\/www.youtube.com\/c\/LiquidInstruments\",\"https:\/\/vimeo.com\/liquidinstruments\"],\"hasMerchantReturnPolicy\":{\"@type\":\"MerchantReturnPolicy\",\"merchantReturnLink\":\"https:\/\/liquidinstruments.com\/support\/warranty-repairs-and-service\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/person\/3e07e87049698dbcb79f8d92a4d30018\",\"name\":\"Noah Monroy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c659d7b8514100af4aaaac7dd06c3929df909f5d7eb7fb20be4d16cf26b8cb10?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c659d7b8514100af4aaaac7dd06c3929df909f5d7eb7fb20be4d16cf26b8cb10?s=96&d=wavatar&r=g\",\"caption\":\"Noah Monroy\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using IP cores for faster customization in Moku Cloud Compile","description":"Discover eight precompiled IP cores to accelerate signal processing tasks, with example implementations and test configurations","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:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/","og_locale":"en_US","og_type":"article","og_title":"Using IP cores for faster customization in Moku Cloud Compile","og_description":"Discover eight precompiled IP cores to accelerate signal processing tasks, with example implementations and test configurations","og_url":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/","og_site_name":"Liquid Instruments","article_publisher":"https:\/\/www.facebook.com\/LiquidInstruments\/","article_published_time":"2025-04-18T20:40:36+00:00","article_modified_time":"2025-08-29T04:40:49+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg","type":"image\/jpeg"}],"author":"Noah Monroy","twitter_card":"summary_large_image","twitter_creator":"@liquidinstrmnts","twitter_site":"@liquidinstrmnts","twitter_misc":{"Written by":"Noah Monroy","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#article","isPartOf":{"@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/"},"author":{"name":"Noah Monroy","@id":"https:\/\/liquidinstruments.com\/#\/schema\/person\/3e07e87049698dbcb79f8d92a4d30018"},"headline":"Using IP cores for faster customization in Moku Cloud Compile","datePublished":"2025-04-18T20:40:36+00:00","dateModified":"2025-08-29T04:40:49+00:00","mainEntityOfPage":{"@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/"},"wordCount":6571,"publisher":{"@id":"https:\/\/liquidinstruments.com\/#organization"},"image":{"@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage"},"thumbnailUrl":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg","articleSection":["White papers"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/","url":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/","name":"Using IP cores for faster customization in Moku Cloud Compile","isPartOf":{"@id":"https:\/\/liquidinstruments.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage"},"image":{"@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage"},"thumbnailUrl":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg","datePublished":"2025-04-18T20:40:36+00:00","dateModified":"2025-08-29T04:40:49+00:00","description":"Discover eight precompiled IP cores to accelerate signal processing tasks, with example implementations and test configurations","breadcrumb":{"@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#primaryimage","url":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg","contentUrl":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2025\/04\/3020_LiquidInstruments_118-scaled.jpg","width":2560,"height":1707,"caption":"An engineer using Moku Cloud Compile to deploy custom functions"},{"@type":"BreadcrumbList","@id":"https:\/\/liquidinstruments.com\/white-papers\/using-ip-cores-in-mcc\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/liquidinstruments.com\/"},{"@type":"ListItem","position":2,"name":"Using IP cores for faster customization in Moku Cloud Compile"}]},{"@type":"WebSite","@id":"https:\/\/liquidinstruments.com\/#website","url":"https:\/\/liquidinstruments.com\/","name":"Liquid Instruments","description":"","publisher":{"@id":"https:\/\/liquidinstruments.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/liquidinstruments.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/liquidinstruments.com\/#organization","name":"Liquid Instruments","url":"https:\/\/liquidinstruments.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1","contentUrl":"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1","width":1000,"height":924,"caption":"Liquid Instruments"},"image":{"@id":"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/LiquidInstruments\/","https:\/\/x.com\/liquidinstrmnts","https:\/\/www.instagram.com\/liquidinstruments\/","https:\/\/www.linkedin.com\/company\/liquidinstruments\/","https:\/\/www.youtube.com\/c\/LiquidInstruments","https:\/\/vimeo.com\/liquidinstruments"],"hasMerchantReturnPolicy":{"@type":"MerchantReturnPolicy","merchantReturnLink":"https:\/\/liquidinstruments.com\/support\/warranty-repairs-and-service\/"}},{"@type":"Person","@id":"https:\/\/liquidinstruments.com\/#\/schema\/person\/3e07e87049698dbcb79f8d92a4d30018","name":"Noah Monroy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/liquidinstruments.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c659d7b8514100af4aaaac7dd06c3929df909f5d7eb7fb20be4d16cf26b8cb10?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c659d7b8514100af4aaaac7dd06c3929df909f5d7eb7fb20be4d16cf26b8cb10?s=96&d=wavatar&r=g","caption":"Noah Monroy"}}]}},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts\/23621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/users\/59"}],"replies":[{"embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/comments?post=23621"}],"version-history":[{"count":60,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts\/23621\/revisions"}],"predecessor-version":[{"id":25561,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts\/23621\/revisions\/25561"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/media\/23860"}],"wp:attachment":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/media?parent=23621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/categories?post=23621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/tags?post=23621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}