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

 
 
> Делитель на 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
 
Start new topic
Ответов
Iptash
сообщение Jan 30 2009, 09:33
Сообщение #2


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

Группа: Свой
Сообщений: 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
Сообщение #3


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

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Свой
Сообщений: 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 Текстовая версия Сейчас: 19th July 2025 - 16:13
Рейтинг@Mail.ru


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