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

User Tag List

Страница 1 из 16 12345 ... ПоследняяПоследняя
Показано с 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
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Moderator Аватар для fifan
    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    4,165
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    125
    Поблагодарили
    71 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Где будем испытывать? На Скорпионе?

  4. #3
    Veteran Аватар для lisica
    Регистрация
    19.12.2008
    Адрес
    Черкассы
    Сообщений
    1,573
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А кто это переведёт в VHDL?
    Робик 1024(пентагоновские тайминги),+ 7Мц+, 2AY(TS),+ контроллер дисковода,+ 3.5,+ 5.25 флоп,+CMOS,+ mouse(caro),+ Flash.
    Pentagon 128(1991г.)+YМ
    программатор 2732-27512.


  5. #4
    Guru Аватар для Дмитрий
    Регистрация
    01.01.2009
    Адрес
    Донецк, Украина
    Сообщений
    3,260
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    8 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    fifan, где-где... там где ее ну ооооочень не хватает - на Пентэве

  6. #5
    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.

  7. #6
    Moderator Аватар для fifan
    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    4,165
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    125
    Поблагодарили
    71 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В какую ПЛИС предполагается запихнуть данное творение?

  8. #7
    Guru Аватар для Дмитрий
    Регистрация
    01.01.2009
    Адрес
    Донецк, Украина
    Сообщений
    3,260
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    8 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    fifan, я вкорячиваю это в EP1K50, а вообще, как Дима говорит - творение занимает 8 макроячеек, так что влезет в любую, даже EPM3032.

  9. #8
    Guru
    Регистрация
    16.12.2009
    Адрес
    Харьков
    Сообщений
    4,731
    Спасибо Благодарностей отдано 
    355
    Спасибо Благодарностей получено 
    369
    Поблагодарили
    238 сообщений
    Mentioned
    11 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Дмитрий Посмотреть сообщение
    fifan, где-где... там где ее ну ооооочень не хватает - на Пентэве
    Если ФАПЧ заработает на Эве, мож я таки её себе и прикуплю!
    Profi must live!

    Моё железо...

    1. Profi 5.06/1Mb(DRAM)+Profi5.06(UP)/HDD/3`5FDD/CF512Mb/SD-CARD
    3. Profi 6.2 Rev. B/1Mb/3`5FDD/HDD3.2Gb
    4. Profi 5.05(down)/1Mb+Profi 5.03(UP)/Pentagon_Fix
    Все укомплектованы:
    Profi_ZX-BUS/ZXMC2/NemoIDE/SounDrive
    [свернуть]

    Ссылка на Telegram-канал поддержки пользователей Profi.

  10. #9
    Super Moderator Аватар для Ewgeny7
    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    146
    Спасибо Благодарностей получено 
    76
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А что, на Эве дисковод плохо работает? Я просто не в курсе, использовал там дисковод всего пару раз, год назад
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  11. #10
    Guru Аватар для Дмитрий
    Регистрация
    01.01.2009
    Адрес
    Донецк, Украина
    Сообщений
    3,260
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    8 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ewgeny7 Посмотреть сообщение
    А что, на Эве дисковод плохо работает?
    есть пачка дискет, которые Эва не хавает, хотя тот же Кай даже не поперхнулся (с одним и тем же дисководом).

    ---------- Post added at 11:16 ---------- Previous post was at 10:44 ----------

    Собрал прошиву, если седни не нажрусь, то попробую

Страница 1 из 16 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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