User Tag List

Показано с 1 по 10 из 156

Тема: Читабельный ФАПЧ

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #6
    ZEK
    Гость

    По умолчанию фапч 28мгц

    пересчитал и пофиксил под 28мгц

    Код:
    // синтезируемый
    module phase_sync28(
        input   wire        clk,   // 28mhz
        input   wire        rddat,
        output  reg         rclk,
        output  reg         rawr
        );
        
    // *******************************************************
    // формирование RAWR 
    // *******************************************************
        
    // защелка где храним предыдущее состояние сигнала rddat с дисковода
    // нужно для определния момента отрицательного фронта
    reg oldrd;  
    // сдвиговый регистр для формирования raclk 150нс
    reg [3:0] rawr0;
    
    // формируем rawr 150нс
    always @ (posedge clk)
    begin               
        // запоминаем текущее значение
        oldrd <= rddat; 
        // формируем rawr если на предыдущем такте rddat =1 а на текущем =0
        // пишем в сдвиговый регистр, заодно сдвигаем его
        rawr0 <= { rawr0[2:0], !(oldrd == 1'b1 && rddat == 1'b0) };
        
        // если хоть один бит в сдвиговом регистре 0 тогда rawr =0, что при клоке свдига 28мгц, примерно 150нс
        rawr = !(rawr0 != 4'hF);
    end
    
    
    // *******************************************************
    // формирование RCLK
    // *******************************************************
    
    // счетчик для формирования меандра RCLK, один оборот счетчика это полуволна RCLK
    reg [5:0] counter = 0;                     
    // дельта в тактах от оптимальной точки расположения RAWR относительно RCLK 
    // RAWR в идельном случае долен находиться в середине полуволны RCLK
    wire[5:0] delta = (24 - counter) +1; 
    // 24 середина полуволны -4 (на столкьо тактов удлинили RAWR)
    // +1 для того что бы при совпадении фаз счетик инкреметировался а не стоял на месте
    // можно полюдски написать 25-counter что то же самое
    
    // знаково делим смещение пополам, будем приближаться к оптимальной точке на полшага перекоса фаз.
    wire[5:0] shift = { delta[5], delta[5], delta[4:1] };
    
    always @ (posedge clk)
    begin                 
        // RAWR = 0, значит сравниваем его положение с оптимальным 
        // и если надо (delta > 2 или delta < 2) корректируем фазу RCLK
        if (rawr0[0] == 0)                          
            counter <= counter + shift;
        else  
            // проверяем дошли ли мы до длины полуволны примерно в 2мкс
            // rclk тут что бы компенсировть хоть немного отклонение от 2мкс
            if (counter < (54+rclk))
                counter <= counter + 1; // есил 
            else           
            begin             
                counter <= 0;
                rclk = ~rclk;  
            end
    
    end
    
    initial 
    begin
        rclk = 1'b0; 
    end
    
    endmodule
    И диаграмка сравнивающая 2 фапча на одних входных данных
    Последний раз редактировалось ZEK; 22.02.2014 в 20:03.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ищу схему ФАПЧ
    от zorel в разделе Внешние накопители
    Ответов: 3
    Последнее: 29.07.2011, 00:20
  2. ФАПЧ
    от Sayman в разделе Внешние накопители
    Ответов: 2
    Последнее: 26.02.2009, 10:26

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •