Перейти к содержанию
    

Помогите с делителем частоты

Доброе время суток, господа.

Не могли бы вы мне помочь ?

Необходимо на триггерах(не важно каких) собрать делитель частоты на 27, нужна структурная схема этого устройства.

Все это потом будет реализовываться вXilix на Spartan II-E.

Заранее благодарен, завтра зачет по ЦУ и МП.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По шагам

1. Посмотри лекции (или учебник) и найди как устроены двоичные счетчики.

2. Нарисуй пятиразрядный счетчик.

3. При появлении числа 26 в двоичном виде надо устроить сброс счетчика в ноль (простая схема на элементе "И")

4. Сигнал сброса лучше пропустить через D-триггер, а уже затем на сброс основных триггеров счетчика. Этот же сигнал будет поделенной частотой.

 

А структурную схему нарисуешь сам :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как ещё вариант, могу посоветовать поставить последовательно 3 делителя частоты на 3.

А вариант делителя частоты на 3 сам XILINX предлагает, вот ссылка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-- Покладов Александр

-- Делитель частоты

-- Выходная частота равна Fout = Fin * (cDiv / (2 ^ cRg))

-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

-- ! Fout не может быть больше Fin, т.е. cDiv < (2 ^ cRg)

-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Constant cDiv = 6; -- коэффициент деления

Constant cRg = 3; -- количество разрядов в регистре фазы

 

SUBDESIGN Fr_div

(

Fin : INPUT;

Fout : OUTPUT;

)

VARIABLE

fv[cRg .. 0] :dff; -- Регистр сумматора

rgF :tff;

fin_X_2 :node; -- Удвоенная частота

BEGIN

fin_X_2 = Fin xor rgF; -- Умножение на 2 Fin

rgF.t = vcc;

rgF.clk = fin_X_2;

 

fv[].clk = fin_X_2; -- Сумматор фазы

fv[] = fv[] + cDiv;

 

Fout = fv[cRg]; -- Выход частоты

END;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-- Покладов Александр

        -- Делитель частоты

        -- Выходная частота равна Fout = Fin * (cDiv / (2 ^ cRg))

        -- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        -- ! Fout не может быть больше Fin, т.е. cDiv < (2 ^ cRg)

        -- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        Constant cDiv = 6; -- коэффициент деления

        Constant cRg = 3; -- количество разрядов в регистре фазы

 

        SUBDESIGN Fr_div

        (

                Fin : INPUT;

                Fout : OUTPUT;

        )

        VARIABLE

        fv[cRg .. 0] :dff; -- Регистр сумматора

        rgF :tff;

        fin_X_2 :node; -- Удвоенная частота

        BEGIN

                fin_X_2 = Fin xor rgF; -- Умножение на 2 Fin

                rgF.t = vcc;

                rgF.clk = fin_X_2;

                     

                fv[].clk = fin_X_2; -- Сумматор фазы

                fv[] = fv[] + cDiv;

               

                Fout = fv[cRg]; -- Выход частоты

        END;

класс :)) осталось только AHDL в VHDL/Verilog перевести :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"класс осталось только AHDL в VHDL/Verilog перевести "

 

//-- Покладов Александр

//-- Делитель частоты

//-- Выходная частота равна Fout = Fin * (cDiv / (2 ^ cRg))

//-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

//-- ! Fout не может быть больше Fin, т.е. cDiv < (2 ^ cRg)

//-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

//Constant cDiv = 6; -- коэффициент деления

//Constant cRg = 3; -- количество разрядов в регистре фазы

 

module fr_div

(

input Fin,

output Fout

);

 

parameter cDiv = 3'd6;

parameter cRg = 3;

 

 

reg [cRg:0] fv; //-- Регистр сумматора

reg rgF_tff;

 

wire Fin_X_2;

 

assign Fout = fv[cRg]; // -- Выход частоты

assign Fin_X_2 = Fin ^ rgF_tff; // -- Умножение на 2 Fin

 

always @(posedge Fin_X_2) // -- Удвоенная частота

begin

rgF_tff <= rgF_tff ^ 1'b1;

fv <= fv + cDiv; // -- Сумматор фазы

end

 

endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"класс  осталось только AHDL в VHDL/Verilog перевести "

 

//-- Покладов Александр

        //-- Делитель частоты

        //-- Выходная частота равна Fout = Fin * (cDiv / (2 ^ cRg))

        //-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        //-- ! Fout не может быть больше Fin, т.е. cDiv < (2 ^ cRg)

        //-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        //Constant cDiv = 6; -- коэффициент деления

        //Constant cRg = 3; -- количество разрядов в регистре фазы

 

        module fr_div

        (

          input  Fin,

          output Fout

        );

       

parameter cDiv = 3'd6;

parameter cRg = 3;

 

 

reg [cRg:0] fv;  //-- Регистр сумматора

reg          rgF_tff;

 

wire        Fin_X_2;

 

assign Fout = fv[cRg]; // -- Выход частоты

assign Fin_X_2 = Fin ^ rgF_tff; // -- Умножение на 2 Fin

 

always @(posedge Fin_X_2) // -- Удвоенная частота

begin

rgF_tff <= rgF_tff ^ 1'b1;

fv <= fv + cDiv; // -- Сумматор фазы

end

 

endmodule

уже и пошутить нельзя :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"уже и пошутить нельзя "

Если кто и пошутил, так это я. Вот пример того, как делать не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброе время суток, господа.

Не могли бы вы мне помочь ?

Необходимо на триггерах(не важно каких) собрать делитель частоты на 27, нужна структурная схема этого устройства.

Все это потом будет реализовываться вXilix на Spartan II-E.

Заранее благодарен, завтра зачет по ЦУ и МП.

 

Настоятельно всем рекомендую

VHDL code implements 50%-duty-cycle divider

Brian Boorman, Harris RF Communications, Rochester, NY

 

http://www.edn.com/archives/1997/081597/17di_01.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Настоятельно всем рекомендую

VHDL code implements 50%-duty-cycle divider

Brian Boorman, Harris RF Communications, Rochester, NY"

Это хорошо только для тренинга ума.

В реальной жизни применять такое в программированной логике, значит искать себе приключения на одно место.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Настоятельно всем рекомендую

VHDL code implements 50%-duty-cycle divider

Brian Boorman, Harris RF Communications, Rochester, NY"

Это хорошо только для тренинга ума.

В реальной жизни применять такое в программированной логике, значит  искать себе приключения на одно место.

 

А что Вас смущает? Нормальный код, рабочий.

И какие приключения могут случится?

А в Вашем коде умножать частоту на 2 внутри ПЛИС - это нормально !?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"А что Вас смущает? Нормальный код, рабочий.

И какие приключения могут случится?

А в Вашем коде умножать частоту на 2 внутри ПЛИС - это нормально !? "

Это не мой код. Мне чужого не надо. И фамилия у меня другая.

Это Вами предложенный код ничем от мной переведенного на верилог кода не отличаются.

В первом случае пички на удвоенной частоте. Если ввести в формулу удвоенную частоту, простой аккумулятор получается.

В Вашем случае таже удвоенная частота. Попробуйте принять выход xor на триггер на первичной. Что от меандра останется.

Я уже не говорю о стандартном подходе к написанию примитива. На входе триггер, на выходе триггер, никаких инверсий несущего клока. А если первичный код от PLL. Ну и так жалее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это Вами предложенный код ничем  от мной переведенного на верилог кода  не отличаются.

 

 

?

И еще - нет там никакого удвоения частоты.

Или Вы с авторами постов запутались?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...