// *************************************************************************** // *************************************************************************** // Copyright (C) 2014-2023 Analog Devices, Inc. All rights reserved. // // In this HDL repository, there are many different and unique modules, consisting // of various HDL (Verilog or VHDL) components. The individual modules are // developed independently, and may be accompanied by separate and unique license // terms. // // The user should read each of these license terms, and understand the // freedoms and responsibilities that he or she has by using this source/core. // // This core is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR // A PARTICULAR PURPOSE. // // Redistribution and use of source or resulting binaries, with or without modification // of this file, are permitted under one of the following two license terms: // // 1. The GNU General Public License version 2 as published by the // Free Software Foundation, which can be found in the top level directory // of this repository (LICENSE_GPL2), and also online at: // // // OR // // 2. An ADI specific BSD license, which can be found in the top level directory // of this repository (LICENSE_ADIBSD), and also on-line at: // https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD // This will allow to generate bit files and not release the source code, // as long as it attaches to an ADI device. // // *************************************************************************** // *************************************************************************** `timescale 1ns/100ps // single channel dds (dual tone) module ad_dds #( parameter DISABLE = 0, // range 8-24 parameter DDS_DW = 16, // range 8-16 (FIX ME) parameter PHASE_DW = 16, // set 1 for CORDIC or 2 for Polynomial parameter DDS_TYPE = 1, // range 8-24 parameter CORDIC_DW = 16, // range 8-24 (make sure CORDIC_PHASE_DW < CORDIC_DW) parameter CORDIC_PHASE_DW = 16, // the clock radtio between the device clock(sample rate) and the dac_core clock // 2^N, 1 1)begin dac_dds_phase_0[i] <= dac_dds_phase_0[i-1] + tone_1_freq_word; dac_dds_phase_1[i] <= dac_dds_phase_1[i-1] + tone_2_freq_word; end end else if (dac_valid == 1'b1) begin dac_dds_phase_0[i] <= dac_dds_phase_0[i] + dac_dds_incr_0; dac_dds_phase_1[i] <= dac_dds_phase_1[i] + dac_dds_incr_1; end if (dac_data_sync == 1'b1 || sync_min_pulse_m[1]) begin dac_dds_phase_0_m[i] <= 'd0; dac_dds_phase_1_m[i] <= 'd0; end else begin dac_dds_phase_0_m[i] <= dac_dds_phase_0[i]; dac_dds_phase_1_m[i] <= dac_dds_phase_1[i]; end end // phase to amplitude convertor ad_dds_2 #( .DDS_DW (DDS_DW), .PHASE_DW (PHASE_DW), .DDS_TYPE (DDS_TYPE), .CORDIC_DW (CORDIC_DW), .CORDIC_PHASE_DW (CORDIC_PHASE_DW) ) i_dds_2 ( .clk (clk), .dds_format (dac_dds_format), .dds_phase_0 (dac_dds_phase_0_m[i]), .dds_scale_0 (tone_1_scale), .dds_phase_1 (dac_dds_phase_1_m[i]), .dds_scale_1 (tone_2_scale), .dds_data (dac_dds_data_s[(DDS_DW*i)-1:DDS_DW*(i-1)])); end end endgenerate endmodule