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

 
 
 
Reply to this topicStart new topic
> Частотомер
Sergey Reva
сообщение Nov 7 2007, 23:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 22-04-07
Из: Poltava/Kharkov
Пользователь №: 27 243



Вот решил вернутся к частотомеру на плис, который когда то хотел сделать.
Все эксперименты проводил на EPF8282ALC84-4, код на VHDL.

Если сигнал sync и input берутся из одного генератора то показания 100% точные, с разных - отличаются на несколько герц, раньше ещё и прыгали довольно в большых пределах, немного переделал теперь в пределах +/-1-2 Гц прыгают.

Кроме того частотомер занял 148 LС, а хотелось бы запихнуть его в чип со 128ю LС.

В общем, подскажите что можно здесь улучшить?

Прикрепленный файл  fmeter.zip ( 405.18 килобайт ) Кол-во скачиваний: 224
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Nov 8 2007, 05:20
Сообщение #2


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(Sergey Reva @ Nov 8 2007, 02:22) *
Вот решил вернутся к частотомеру на плис, который когда то хотел сделать.
Все эксперименты проводил на EPF8282ALC84-4, код на VHDL.

Если сигнал sync и input берутся из одного генератора то показания 100% точные, с разных - отличаются на несколько герц, раньше ещё и прыгали довольно в большых пределах, немного переделал теперь в пределах +/-1-2 Гц прыгают.

Кроме того частотомер занял 148 LС, а хотелось бы запихнуть его в чип со 128ю LС.

В общем, подскажите что можно здесь улучшить?

Прикрепленный файл  fmeter.zip ( 405.18 килобайт ) Кол-во скачиваний: 224


для начала поставить термостат задающего генератора - без него не о какой точности говорить не приходится
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 8 2007, 17:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Sergey Reva @ Nov 8 2007, 02:22) *
Вот решил вернутся к частотомеру на плис, который когда то хотел сделать.
Все эксперименты проводил на EPF8282ALC84-4, код на VHDL.

Если сигнал sync и input берутся из одного генератора то показания 100% точные, с разных - отличаются на несколько герц, раньше ещё и прыгали довольно в большых пределах, немного переделал теперь в пределах +/-1-2 Гц прыгают.

Кроме того частотомер занял 148 LС, а хотелось бы запихнуть его в чип со 128ю LС.

В общем, подскажите что можно здесь улучшить?

Прикрепленный файл  fmeter.zip ( 405.18 килобайт ) Кол-во скачиваний: 224


Наверно если нужен интервал в 1 сек, то отсчет должен быть от 0 до 999999.
У Вас от 0 до 1000000. тогда на динамическую индикацию получается 7 отсчетов. а не 8.
Нет перехода из одного клокового домена в другой.
если все это корректно делать, то потребуется еще больше ресурсов, чем у вас.
Go to the top of the page
 
+Quote Post
Sergey Reva
сообщение Nov 8 2007, 19:05
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 22-04-07
Из: Poltava/Kharkov
Пользователь №: 27 243



Спасибо за ответы

Цитата
У Вас от 0 до 1000000. тогда на динамическую индикацию получается 7 отсчетов. а не 8.

Если я правильно понимаю это происходит 1 раз в секунду при сбросе счётчика
Код
....
if sync_div_cnt="11110100001001000111" then        -- :2
    sync_div_cnt<="00000000000000000000";
    gate<='1';
else
....

дискомфорта не создаёт

Цитата
Нет перехода из одного клокового домена в другой.

Вроде недавно и поднималось в одной из тем, но я всё равно не понял... в той теме конкретно было указано какой клок больше другого... а тут частота на входе может быть как больше так и меньше частоты sync... если можете поясните...
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 8 2007, 19:30
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Я не моделировал. Да и описание по мне некорректно. Мне показалось, что gate в нуле 7 тактов, а не 8.
Непонятно как высвечивается один из 8 знаков.
Может надо типа этого?

process(sync)
begin
if rising_edge(sync) then
-- 1MHz/1E6 '11110100001001000000' :1
-- 1MHz/1E6 '11110100001001000111' :2

-- 1MHz/1E3 '00000000001111101000' :1
-- 1MHz/1E3 '00000000001111101111' :2

if sync_div_cnt = x"F423F" then -- :1
gate <= '0';
elsif sync_div_cnt = x"F4247" then -- :2
gate<='1';
end if;

if sync_div_cnt = x"F4247" then -- :2
sync_div_cnt <= ( others => '0');
else
sync_div_cnt <= sync_div_cnt + 1;
end if;

end if;
end process;
Что касется перехода из одного клокового домена в другой.
Может надо интервал длительности в 1 сек простробировать измеряемой частотой, чтобы получить количество отсчетов, кратное этой частоте. тогда это количество отсчетов от периода к периоду будет изменяться на +- 1 отсчет(1герц). ТОгда и управление динамической индикацией от измеряемой частоты, а не от кварцованной 1 мГц.

process(clk,rst)
begin
if rst='1' then
count<="0000";
else if rising_edge(clk) then
if count="1001" then
count<="0000";
o10<='1';
else
count<=count+"0001";
o10<='0';
Это тоже не есть хорошо.
o10 надо бы в другом процессе. А то порождается вход разрешения в этом триггере по rst.
Да и что касается работы с FPGA, то лучше наверно реализовать счетчик типа ИЕ17 с одной тактированной частотой и сквозным переносом и трюковыми входами.
А если ресурсы не экономить. То все просто.
Чистый двоичный счетчик на интервал отсчета (существенно меньшей разрядности).
Перевод bin2 - bcd. Мультиплекстрование для динамической индикации.
Go to the top of the page
 
+Quote Post
Sergey Reva
сообщение Nov 8 2007, 20:39
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 22-04-07
Из: Poltava/Kharkov
Пользователь №: 27 243



Цитата
Я не моделировал. Да и описание по мне некорректно. Мне показалось, что gate в нуле 7 тактов, а не 8.
Непонятно как высвечивается один из 8 знаков.

8й знак (и остальные) высвечивается когда счётчик считает до 999999, независимо от состояния gate или любого другого сигнала
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 10 2007, 08:36
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Sergey Reva @ Nov 8 2007, 23:39) *
8й знак (и остальные) высвечивается когда счётчик считает до 999999, независимо от состояния gate или любого другого сигнала


Так оно и есть. Извините, еще в догон.
Если использовать асинхронный rst счетчика, то этот rst наверно должен быть порождением триггера, а не логики. В противном случает возможны сбои этого счетчика в процессе работы от пичков.
Go to the top of the page
 
+Quote Post

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

 


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


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