|
|
  |
Делитель на 10 на ПЛИС Altera |
|
|
|
Jan 29 2009, 20:54
|
Участник

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

|
Доброго времени суток.
Есть высокостабильный сигнал 1 Мгц. Из него необходимо получить 100 кГц, 10 кГц, 1 Гц, 0.1 Гц.
Я так понимаю нужно сделать делитель на 10. Данный сабж нужно сделать на ПЛИС Altera max3000.
Помогите, в ПЛИСах не силен.
|
|
|
|
|
Jan 29 2009, 22:46
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Цитата(foxit @ Jan 29 2009, 23:54)  Из него необходимо получить 100 кГц, 10 кГц, 1 Гц, 0.1 Гц. Одновременно на 4-х выводах или по очереди на одном? Если одновременно, то что собираетесь делать с фазами выходов? А какой именно max3000 ?
|
|
|
|
|
Jan 29 2009, 22:46
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 30 2009, 05:44
|

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

|
Цитата Если одновременно, то что собираетесь делать с фазами выходов? 1 МГц невысокая частота. Можно результаты (поделенные частоты) пустить на выход через регистры, стробируемые от инверсного клока входной частоты, тогда их фронты сместятся на пол периода входной частоты, но расхождения по фазам будут минимальными.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Jan 30 2009, 05:56
|
Участник

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

|
Если нужно сделать в схемном редакторе, то можно поделить на 2, потом на 5. На 2 поделить например с помощью lpm_counter. Схема деления на 5 с 50% скважностью есть в приаттаченом файле.
|
|
|
|
|
Jan 30 2009, 07:38
|

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

|
Цитата(DeC_NN @ Jan 30 2009, 07:56)  ... можно поделить на 2, потом на 5. Схема деления на 5 с 50% скважностью есть в приаттаченом файле. Когда то давно в ж."Радио" (по мойму показывалось альтернативное включение ИЕ5) для получения скважности 2, при делении на 10 -> сначала делим на 5, а потом на 2 Ну а код, что привел cms и есть конкретное решение, к стати со скважностью выходов = 2.
|
|
|
|
|
Jan 30 2009, 07:44
|
Местный
  
Группа: Свой
Сообщений: 313
Регистрация: 8-09-04
Из: Таганрог
Пользователь №: 617

|
Цитата(DeC_NN @ Jan 30 2009, 08:56)  Если нужно сделать в схемном редакторе, то можно поделить на 2, потом на 5. На 2 поделить например с помощью lpm_counter. Схема деления на 5 с 50% скважностью есть в приаттаченом файле. Ну уж если гланды удалять не через анус, а через горло, то сначала делим на 5 без извратов как учили, а потом делитель на 2 для полученя скважности 50, и по ресурсам будет меньше и проще как то, логичней  )))
|
|
|
|
|
Jan 30 2009, 09:33
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 30 2009, 09:48
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(Iptash @ Jan 30 2009, 13:33)  До 1 сек просимулировал, нормально, на 0.1Гц не стал, очень долго ждать результатов. А Вы моделируйте при большей входной частоте, так быстрее будет. Если будет правильно работать на 10МГц, то и на 1 МГц тоже всё будет хорошо... Можно и на большей "удобной" частоте промоделировать, которую вытянет Max3000 (25 МГц, 50 МГц, 100 МГц ??)
|
|
|
|
|
Jan 30 2009, 10:09
|
Профессионал
    
Группа: Свой
Сообщений: 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 таким же макаром.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|