Важная информация

User Tag List

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

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

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

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

    По умолчанию Читабельный ФАПЧ

    На углепати подымали вопрос про читаемость и легкость для понимания ФАПЧ по сыркам.
    Ясен пень что табличные или перенесеным с схем на сумматорах с перетусоваными битами фапчи малопонятны.

    Решил восполнить пробел и написать простенький фапч (коментов гораздо больше чем кода) на более менее читаемом языке

    Код:
    // синтезируемый
    module phase_sync(
        input   wire        clk,   // 8mhz
        input   wire        rddat,
        output  reg         rclk,
        output  reg         rawr
        );
        
    // *******************************************************
    // формирование RAWR 
    // *******************************************************
        
    // защелка где храним предыдущее состояние сигнала rddat с дисковода
    // нужно для определния момента отрицательного фронта
    reg oldrd;
    
    // формируем rawr 125нс
    always @ (posedge clk)
    begin               
        // запоминаем текущее значение
        oldrd <= rddat; 
        // формируем rawr если на предыдущем такте rddat =1 а на текущем =0
        rawr <= !(oldrd == 1'b1 && rddat == 1'b0); // тут oldrd еще содержит старое значение
    end
    
    
    // *******************************************************
    // формирование RCLK
    // *******************************************************
    
    // счетчик для формирования меандра RCLK, один оборот счетчика это полуволна RCLK
    reg [3:0] counter = 0;                     
    // дельта в тактах от оптимальной точки расположения RAWR относительно RCLK 
    // RAWR в идельном случае долен находиться в середине полуволны RCLK
    wire[3:0] delta = (8 - counter) +1; 
    // 8 середина полуволны, 
    // +1 для того что бы при совпадении фаз счетик инкреметировался а не стоял на месте
    // можно полюдски написать 9-counter что то же самое
    
    // знаково делим смещение пополам, будем приближаться к оптимальной точке на полшага перекоса фаз.
    wire[3:0] shift = { delta[3], delta[3], delta[2:1] };
    
    always @ (posedge clk)
    begin                 
        // RAWR = 0, значит сравниваем его положение с оптимальным 
        // и если надо (delta >= 2 или delta =< 2) корректируем фазу RCLK
        if (rawr == 0)                          
            counter[3:0] <= counter + shift;
        else
            counter <= counter + 1;  // иначе просто инкрементируем счетчик
            
        // закончилась полуволна генерируем меандр
        if (counter == 15) rclk = ~rclk; 
    end
    
    initial 
    begin
        rclk = 1'b0; 
    end
    
    endmodule
    Можно колво кода как уменьшить понизив читабельность, так и увеличив, выбрал нечто среднее

    Где то так...
    Последний раз редактировалось ZEK; 22.02.2014 в 20:03.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

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

Похожие темы

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

Ваши права

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