реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Делитель на 10 на ПЛИС Altera
foxit
сообщение Jan 29 2009, 20:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 17-04-07
Пользователь №: 27 098



Доброго времени суток.

Есть высокостабильный сигнал 1 Мгц.
Из него необходимо получить 100 кГц, 10 кГц, 1 Гц, 0.1 Гц.

Я так понимаю нужно сделать делитель на 10.
Данный сабж нужно сделать на ПЛИС Altera max3000.

Помогите, в ПЛИСах не силен.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Jan 29 2009, 22:46
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Цитата(foxit @ Jan 29 2009, 23:54) *
Из него необходимо получить 100 кГц, 10 кГц, 1 Гц, 0.1 Гц.

Одновременно на 4-х выводах или по очереди на одном?
Если одновременно, то что собираетесь делать с фазами выходов?
А какой именно max3000 ?
Go to the top of the page
 
+Quote Post
cms
сообщение Jan 29 2009, 22:46
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 6-07-04
Пользователь №: 266



Вот так дерево из 4 счетчиков может выглядеть на SV. Q7.2 укладывает этот делитель в 17 макрокелов EMP3032

Код
module div10
(
    input    logic         clk, rstn,
    output    logic [4:0]    clk_div
);

    logic [2:0] cntr[4:0];

    assign clk_div[0] = clk;

    genvar i;

    generate for (i=1;i<5;i++) begin : cntr_gens

        always_ff @(posedge clk_div[i-1], negedge rstn)
         if (!rstn) begin
            cntr[i]        <= '0;
            clk_div[i]     <= '0;            
         end else begin
               if ( cntr[i] == 4 ) begin
                            cntr[i] <= '0;
                clk_div[i] <= ~clk_div[i];
               end else
                cntr[i]++;
        end
    end endgenerate
    
endmodule
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Jan 30 2009, 05:44
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Цитата
Если одновременно, то что собираетесь делать с фазами выходов?

1 МГц невысокая частота. Можно результаты (поделенные частоты) пустить на выход через регистры, стробируемые от инверсного клока входной частоты, тогда их фронты сместятся на пол периода входной частоты, но расхождения по фазам будут минимальными.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
DeC_NN
сообщение Jan 30 2009, 05:56
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 13-07-06
Пользователь №: 18 791



Если нужно сделать в схемном редакторе, то можно поделить на 2, потом на 5.
На 2 поделить например с помощью lpm_counter.
Схема деления на 5 с 50% скважностью есть в приаттаченом файле.
Прикрепленные файлы
Прикрепленный файл  UnusualClockDividerspdf.pdf ( 53.27 килобайт ) Кол-во скачиваний: 105
 
Go to the top of the page
 
+Quote Post
Шурила
сообщение Jan 30 2009, 07:38
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 28-07-07
Из: Кишинев
Пользователь №: 29 434



Цитата(DeC_NN @ Jan 30 2009, 07:56) *
... можно поделить на 2, потом на 5.
Схема деления на 5 с 50% скважностью есть в приаттаченом файле.

Когда то давно в ж."Радио" (по мойму показывалось альтернативное включение ИЕ5)
для получения скважности 2, при делении на 10 -> сначала делим на 5, а потом на 2 rolleyes.gif
Ну а код, что привел cms и есть конкретное решение, к стати со скважностью выходов = 2. rolleyes.gif
Go to the top of the page
 
+Quote Post
cdg
сообщение Jan 30 2009, 07:44
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 8-09-04
Из: Таганрог
Пользователь №: 617



Цитата(DeC_NN @ Jan 30 2009, 08:56) *
Если нужно сделать в схемном редакторе, то можно поделить на 2, потом на 5.
На 2 поделить например с помощью lpm_counter.
Схема деления на 5 с 50% скважностью есть в приаттаченом файле.

Ну уж если гланды удалять не через анус, а через горло, то сначала делим на 5 без извратов как учили, а потом делитель на 2 для полученя скважности 50, и по ресурсам будет меньше и проще как то, логичней smile.gif)))
Go to the top of the page
 
+Quote Post
Iptash
сообщение Jan 30 2009, 09:33
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Цитата(foxit @ Jan 29 2009, 23:54) *
Доброго времени суток.

Есть высокостабильный сигнал 1 Мгц.
Из него необходимо получить 100 кГц, 10 кГц, 1 Гц, 0.1 Гц.

Я так понимаю нужно сделать делитель на 10.
Данный сабж нужно сделать на ПЛИС Altera max3000.

Помогите, в ПЛИСах не силен.


Я сам не давно пишу на SV(систем верилог).
До 1 сек просимулировал, нормально, на 0.1Гц не стал, очень долго ждать результатов.
Вот собственно программа, где clk вх. 1мГц и выхода наверное понятно.
Код влазит в EPM3064. Если нужно корректировать частоты, то делаешь в условиях.
Цитата
module del (
input clk,
output out_100kHz,
output out_10kHz,
output out_1Hz,
output out_01Hz
);
bit [3:0] count_100;
bit [3:0] count_10;
bit [13:0] count_1;
bit [3:0] count_01;

// Деление 1мГц на 10
always @(posedge clk) begin
if(count_100++ > 8) begin
out_100kHz = 1;
count_100 = 0;
end
else
out_100kHz = 0;
end
//---------------------------------------------
// Деление 100кГц на 10
always @(posedge out_100kHz) begin
if(count_10++ > 8) begin
out_10kHz = 1;
count_10 = 0;
end
else
out_10kHz = 0;
end
//----------------------------------------------
// Деление 10кГц на 10000
always @(posedge out_10kHz) begin
if(count_1++ > 9980) begin
out_1Hz = 1;
count_1 = 0;
end
else
out_1Hz = 0;
end
//----------------------------------------------
// Деление 1Гц на 10
always @(posedge out_1Hz) begin
if(count_01++ > 8) begin
out_01Hz = 1;
count_01 = 0;
end
else
out_01Hz = 0;
end
//----------------------------------------------
endmodule
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Jan 30 2009, 09:48
Сообщение #9


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(Iptash @ Jan 30 2009, 13:33) *
До 1 сек просимулировал, нормально, на 0.1Гц не стал, очень долго ждать результатов.

А Вы моделируйте при большей входной частоте, так быстрее будет. Если будет правильно работать на 10МГц, то и на 1 МГц тоже всё будет хорошо... Можно и на большей "удобной" частоте промоделировать, которую вытянет Max3000 (25 МГц, 50 МГц, 100 МГц ??)
Go to the top of the page
 
+Quote Post
Iptash
сообщение Jan 30 2009, 10:09
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Цитата(Boris_TS @ Jan 30 2009, 12:48) *
А Вы моделируйте при большей входной частоте, так быстрее будет. Если будет правильно работать на 10МГц, то и на 1 МГц тоже всё будет хорошо... Можно и на большей "удобной" частоте промоделировать, которую вытянет Max3000 (25 МГц, 50 МГц, 100 МГц ??)


Спасибо. Да я пробывал , быстрее конечно но всеравно долго, да и здесь программа простая, результат очевиден.
Кстати если на выходе нужна частота со скваженностью приблезительно 2, то нужно модернезировать немного к примеру вот один always:
Цитата
always @(posedge clk) begin
if(count_100++ > 8) begin
count_100 = 0;
end
else
out_100kHz = count_100[2];
// out_100kHz = 0;
end


т.е. на выход даешь со счетчика где то с середины диапозона. В других always таким же макаром.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 12:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016