Проектирование и моделирование DDS на основе FPGA

1. Основная концепция DDS

        DDS (Direct Digital Synthesizer), прямой цифровой синтезатор частот, является ключевой цифровой технологией. По сравнению с традиционной технологией синтеза частоты, она имеет преимущества низкой стоимости, низкого энергопотребления, высокого разрешения и хорошей непрерывности фазы и т. д. и широко используется в области связи. DDS можно использовать для синтеза сигналов с регулируемой фазой, частотой и амплитудой.

2. Принцип ДДС

        На приведенном выше рисунке показана базовая структурная схема DDS, из которой видно, что DDS в основном состоит из накопителя фазы, сумматора фаз, таблицы поиска сигналов и цифро-аналогового преобразования.

        Таблица поиска сигналов обычно представляет собой ПЗУ, в котором хранится значение дискретизации сигнала.На этот раз он хранит синусоидальный сигнал, но также поддерживает прямоугольные и треугольные волны и другие формы сигналов. Для справочной таблицы сигналов по заданному адресу можно считывать данные сигнала, соответствующие этому адресу, и эта последовательность дискретных данных формирует целевой сигнал, а затем выполняется цифро-аналоговое преобразование для получения непрерывного сигнала.

        Предполагая, что число битов аккумулятора фазы равно N битам (N=32 в этом эксперименте), это эквивалентно делению фазы синусоидального сигнала на 2^{Н}части, а его разрешение равно 1/ 2^{Н}.

        Слово управления частотой fword используется для управления размером шага каждого самоинкремента слова управления поведением.Когда оно равно 1, фаза каждого тактового цикла увеличивается на 1 для вывода частоты.Если fword=B, F_{выход}=F_{щелчок}/2^{N}фаза каждого тактового цикла Размер самовозрастающего шага равен B, а его выходная частота равна F_{out}=B*F_{clk}/2^{N}, где B должно быть целым числом.

        Когда слово управления фазой pword равно 0, путем накопления слова управления частотой fword в накопителе фазы можно получить адрес ПЗУ справочной таблицы формы сигнала, а затем можно извлечь значение, соответствующее этому адресу, для получения формы выходного сигнала. данные . Но чтобы управлять фазой, мы напрямую прибавляем значение управляющего слова фазы pword к выходу аккумулятора фазы, что эквивалентно внесению смещения в адрес ПЗУ в целом, завершая таким образом изменение фазы.

        В практических приложениях, чтобы разумно контролировать емкость ПЗУ, при преобразовании результата добавления аккумулятора фазы и управляющего слова фазы в адрес запроса ПЗУ мы используем метод усечения и используем только высокое значение М. 32-битного фазового аккумулятора бит, в этом эксперименте М=32. То есть адрес ПЗУ 16 бит, а его глубина 2^{16}=65536.

3. Дизайн ДДС

        После выяснения состава ДДС можно завершить аппаратное описание ДДС построением по схеме.

        Первый - это регистр синхронизации слова управления частотой. Мы используем регистр для сохранения значения слова управления частотой fword на один такт. Далее идет аккумулятор фазы, который также является регистром. Каждый раз результат фазы накопитель добавляется к слову управления частотой Значение слова управления фазой такое же, синхронный регистр слова управления фазой такой же, как и прежний, и результат добавляется к выходному результату аккумулятора фазы, и может быть реализовано изменение начальной фазы, то есть адрес запроса ПЗУ сдвигается; наконец, старшие 16 бит результата аккумулятора фазы суммируются с аккумулятором фазы в качестве адреса ПЗУ и соответствующей цели форма волны может быть выведена путем отправки адреса в ПЗУ.

     

`timescale 1ns / 1ps

module DDS(
//input
    clk  ,
    rst_n,
    fword,
    pword,
    hword,
//output
    wave_out,
    read_addr

    );
    
input          clk  ;
input          rst_n;
input  [31:0]  fword;
input  [15:0]  pword;
input  [1:0 ]  hword;    

output reg signed [15:0] wave_out;
output [15:0] read_addr;


//幅度定义:1,1/2,1/4,1/8,
parameter h1 = 2'b00 ;
parameter h2 = 2'b01 ;
parameter h3 = 2'b10 ;
parameter h4 = 2'b11 ;

    
//频率控制字同步寄存器    
reg [31:0] fword_r;
always@(posedge clk or negedge rst_n)
    if(!rst_n)
        fword_r <= 32'd0;
    else
        fword_r <= fword; 
        
//相位控制字同步寄存器    
reg [15:0] pword_r;
always@(posedge clk or negedge rst_n)
    if(!rst_n)
        pword_r <= 16'd0;
    else
        pword_r <= pword; 
        
//相位累加器
reg [31:0] p_sum;
always@(posedge clk or negedge rst_n)
    if(!rst_n)
        p_sum <= 16'd0;
    else 
        p_sum <= p_sum + fword_r;
        
//波形查找表ROM的地址
reg [15:0] read_addr;
always@(posedge clk or negedge rst_n)
    if(!rst_n)
        read_addr <= 16'd0;
    else 
        read_addr <= p_sum[31:16] + pword_r;
        
wire [15:0] wave;
 blk_mem_gen_0  blk_mem_gen_0(
  .clka (clk),
  .ena  (rst_n),
  .addra(read_addr),
  .douta(wave)
);
always@(posedge clk or negedge rst_n)
    if(!rst_n)
        wave_out <= 16'd0;
    else
        case(hword)
            h1:wave_out = wave - 16'd32767 ;
            h2:wave_out = (wave - 16'd32767)/2;
            h3:wave_out = (wave - 16'd32767)/4;
            h4:wave_out = (wave - 16'd32767)/8;
            default:wave_out = wave - 16'd32767;    
        endcase
 
    
    
endmodule

        Конфигурация ПЗУ следующая:

        Файл инициализации ПЗУ представляет собой синусоиду, которая может быть сгенерирована с помощью инструмента, или файл, который я использовал, может быть использован напрямую. (6 сообщений) Файл инициализации ПЗУ, ресурс синусоиды - библиотека CSDN icon-default.png?t=N4P3https://download.csdn.net/download/qq_57541474/87886533

 4. Моделирование

Fclk = 50 МГц , Fo = B * Fclk /2 ^ 32, ширина ПЗУ = 16, глубина = 65536 = 2 ^ 16 .

1. fword = 2048 = 2 ^ 11, pword = 0, T = 41,94304 мс, => f = 23,84185 , Fo = Fclk /2 ^ 21 = 23,8418579.
2. fword = 8192 = 2 ^ 13, pword = 0, T = 10,48576 мс, => f = 95,3674 , Fo = Fclk /2 ^ 19 = 95,3674.
3. fword = 16384 = 2 ^ 14, pword = 0, T = 5,22428 мс, => f = 190,7377 , Fo = Fclk /2 ^ 18 = 190,7377.

Моделирование было выполнено для трех различных частот, и результаты оказались такими, как ожидалось.

 

1. волна A: fword=8192=2^13, pword=0 °, T=10,48576 мс , f=95,3674, Fo= Fclk /2^19= 95,3674 .

2. волна B: fword = 8192 = 2 ^ 13, pword1 = 16384 = 90 ° , fword2 = 32768 = 180 °, T = 10,48576 мс , f = 95,3674, Fo = Fclk / 2 ^ 19 = 95,3674 .

Частота сигнала А и В одинакова, фаза канала А остается неизменной, фаза сигнала канала В находится на 1/4 глубины, то есть на 90 °, а затем становится на 1/2 глубины, то есть на 180° . °, как видно из результатов моделирования. Разность фаз правильная, а частота такая же, как и во второй раз выше.

рекомендация

отblog.csdn.net/qq_57541474/article/details/131127335