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

 
 
> Синхронный счетчик для измерения частоты
oles_k76
сообщение Aug 17 2007, 13:01
Сообщение #1


RF
***

Группа: Свой
Сообщений: 321
Регистрация: 12-04-06
Из: Berlin
Пользователь №: 16 046



Уважаемые спецы.
Посоветуйте на каком плисе можно реализовать высокоскоростной многоразрядный, больше 20бит синхронный счетчик (предназначенный для измерения частоты).

Счетчик должен работать на частоте, например больше 150МГц.

Можно ли это реализовать, на каком плисе , какую платформу для программирования выбрать


--------------------
теперь питание компьютера можно отключить
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
RobFPGA
сообщение Aug 30 2007, 23:27
Сообщение #16


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветсвую!


Если стоит задача получения максимального быстродействия для счетчика (в режиме частотомера)
то лутше использовать асинхронный счетчик. При этом частота счета ограничивается только частотой счета одного триггера. Правда для того чтоб правильно считать значение счетчика надо его останавливать (но для частотометра это как раз нормальный режим).

Так для 3 спартана счетчик 18 бит работал на 350 MHz

Успехов! Роб.
Go to the top of the page
 
+Quote Post
sazh
сообщение Aug 31 2007, 06:32
Сообщение #17


Гуру
******

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



Цитата(RobFPGA @ Aug 31 2007, 03:27) *
Приветсвую!
Правда для того чтоб правильно считать значение счетчика надо его останавливать (но для частотометра это как раз нормальный режим).

Так для 3 спартана счетчик 18 бит работал на 350 MHz


Наверно Вам не составит труда привести схемную реализацию такого счетчика.
(реализацию асинхронного счетчика по разному описывают в различных источниках)
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 31 2007, 06:37
Сообщение #18


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Andrewak @ Aug 29 2007, 13:11) *
Совершенно верно. Но я написал:
"Скорость работы счётчика как раз и определяется скоростью щёлканья триггера."
Может быть написал не совсем корректно, но я имел в виду, что это основополагающий фактор. Задержка распространения между ячейками есть в любой ПЛИС.

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

Для борьбы с этим иногда применяют спецальные архитектуры как, например, в Cyclone, где значения каждого из пятиразрядных блоков вычисляется параллельно, но в одном случае для переноса, равного 0, в другом - для переноса, равного 1, а когда реальное значение выходит из предыдущего 5-разрядного блока, то производится просто переключение между уже вычисленными значениями. Эта архитектура называется Carry-Select. Очень эффективное решение в плане повышения быстродействия. Но весьма дорогое, по причине чего в Cyclone II он него отказались.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
vetal
сообщение Aug 31 2007, 08:16
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
Наверно Вам не составит труда привести схемную реализацию такого счетчика.
(реализацию асинхронного счетчика по разному описывают в различных источниках)

Обычный счетчик на однобитных делителях...q1->c2->q2->c3...
Его недостаток - сложно считать данные без останова)
Go to the top of the page
 
+Quote Post
sazh
сообщение Aug 31 2007, 08:24
Сообщение #20


Гуру
******

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



Вот я и хочу понять, как соотнести многоразрядный асинхронный последовательный счетчик с высокой частотой следования импульсов счета на первом триггере.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 31 2007, 14:07
Сообщение #21


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Соотносится очень просто - каждый следующий триггер работает на половинной часте предыдущего.
Поэтому макс. чатота определяется только первым триггером. Заодно и разрешение счета управляет только одним первым триггером, а не разветвляется на все триггеры в синхронной схеме.

На картинке кусок счетчика после синтеза в Synplify.


Успехов! Rob.

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
sazh
сообщение Aug 31 2007, 14:41
Сообщение #22


Гуру
******

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



А причем тут половинная частота предыдущего. В многоразрядных последовательных счетчиках высокая частота следования импульсов счетаможет привести к тому, что n-й триггер не успеет переключиться до прихода следующего импульса счета. Поэтому при использовании выходных кодов счетчика в процессе вычислений должно учитываться время распространения сигнала в цепи.
Да и триггер на картинке я тоже не узнал. Оригинальное включение.
Ну дайте, дайте кусок кода.
Go to the top of the page
 
+Quote Post
vetal
сообщение Aug 31 2007, 16:13
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



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

...
Рассмотрим систему из 4 D-триггеров(Т- специально брать не будем) c выводами C(тактовый), D(вход) и Q(выход) и запишем уравнения :
C1=входной сигнал;D1=!Q1;(частота с1=fin)
C2=Q1;D2=!Q2;(частота с2=fin/2)
C3=Q2;D3=!Q3;(частота с3=fin/4)
C4=Q3;D4=!D4;(частота с4=fin/8)
....
Вот в принципе и все)
А сложность снятия данных заключается в том, что реакция на Q4 может появиться позже, чем закончится период на С1 за счет задержек.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 31 2007, 16:40
Сообщение #24


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Код
module Flip(Clk,En,Rst,Q) /* synthesis syn_hier = "hard" */;
    
input    Rst,Clk,En;
output reg Q;

always @(posedge Clk or posedge Rst)
begin
    if (Rst)
        Q<=0;
    else if (En)
        Q<=~Q;
    
end
endmodule
    


module AsynjCnt(Clk,En,Rst,Q) /* synthesis syn_hier = "hard" */;
parameter WH=16;

input Clk,Rst,En;
output [WH-1:0] Q;

//reg [WH-1:0] rC /* synthesis syn_keep = 1 */;
wire  [WH-1:0] wClki;
wire  [WH-1:0] wClk;

assign wClki={~Q[WH-2:0],Clk};
assign #(1) wClk =wClki;

generate
genvar ii;
begin:gen
    for (ii=0;ii<WH;ii=ii+1)
    begin:cnt
        if (ii==0)
            Flip flp(.Clk(wClk[ii]),.En(En)  ,.Rst(Rst),.Q(Q[ii]));
        else
            Flip flp(.Clk(wClk[ii]),.En(1'b1),.Rst(Rst),.Q(Q[ii]));
    end
        
end
endgenerate

endmodule


Вот собственно и кусок кода картинка которого приведенна выше.

Удачи! Rob
Go to the top of the page
 
+Quote Post
sazh
сообщение Aug 31 2007, 18:13
Сообщение #25


Гуру
******

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



спасибо Всем ответившим. Полегчало. Хотя я увидел зверя по имени кот. Но очень оригинально описан.
Хотя у меня в квартусе быстродействие такого счетчмка ничем не отличается от быстродействия при описании синхронного типа ct <= ct + 1'b1. (классический временной анализатор). Может дело в том, что указания синтезатору проигнорированы.
Спасибо.
Go to the top of the page
 
+Quote Post
Iouri
сообщение Aug 31 2007, 19:01
Сообщение #26


Местный
***

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



интересно а разве так можно делать?
во всех HDL coding styles (Altera, Xilinx) сказано, что клок от трира должен быть заведен
на global clock routing. Может поставить регистр на выходе счетчика чтобы коипенсировать
задержки на тригерах??
Go to the top of the page
 
+Quote Post
sazh
сообщение Aug 31 2007, 19:24
Сообщение #27


Гуру
******

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



Цитата(Iouri @ Aug 31 2007, 23:01) *
интересно а разве так можно делать?
во всех HDL coding styles (Altera, Xilinx) сказано, что клок от трира должен быть заведен
на global clock routing. Может поставить регистр на выходе счетчика чтобы коипенсировать
задержки на тригерах??


Наверно слова должен там всетаки нет. Gate clock никто не отменял.
А регистр на выходе последовательного счетчика просто вреден как выше было сказано.
Посмотрите на приведенном проекте во временном анализаторе время tco
Go to the top of the page
 
+Quote Post
dxp
сообщение Sep 1 2007, 05:47
Сообщение #28


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(sazh @ Sep 1 2007, 01:13) *
спасибо Всем ответившим. Полегчало. Хотя я увидел зверя по имени кот. Но очень оригинально описан.

У буржуинов для такого счетчика даже имеется название: ripple-carry counter. В доFPGA'шные (рассыпушные) времена были весьма популярны в силу простоты реализации, малому потреблению ресурсов по сравнению с синхронным счетчиком. С развитием ПЛИС необходимость в таких счетчиках почти отпала (за исключением случаев, подобных обсуждаемому). В середине 90-х у Альтеры была целая апнота, где описывались недостатки ripple-carry counter'ов и рекомендовалось использовать синхронные счетчики (при этом не забывалось подчеркнуть, как классно такой счетчик реалзиуется уже на FLEX8000 в carry look-ahead режиме smile.gif ).


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
sazh
сообщение Sep 1 2007, 08:36
Сообщение #29


Гуру
******

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



Цитата(dxp @ Sep 1 2007, 09:47) *
У буржуинов для такого счетчика даже имеется название: ripple-carry counter. В доFPGA'шные (рассыпушные) времена были весьма популярны в силу простоты реализации, малому потреблению ресурсов по сравнению с синхронным счетчиком. С развитием ПЛИС необходимость в таких счетчиках почти отпала (за исключением случаев, подобных обсуждаемому). В середине 90-х у Альтеры была целая апнота, где описывались недостатки ripple-carry counter'ов и рекомендовалось использовать синхронные счетчики (при этом не забывалось подчеркнуть, как классно такой счетчик реалзиуется уже на FLEX8000 в carry look-ahead режиме smile.gif ).


Мы как всегда шли своим путем.
Уже на 133 серии стало понятна бесперспективность использования последовательных счетчиков в "высокоскоростных" устройствах. И даже некая угроза качеству разработки, потому что многие добивались работоспособности устройства с помощью rc цепочек при серийном изготовлении.
А с переходом на 530 серию о последователльных счетчиках вообще забыли, потому что их уже не было в номенклатуре этой серии, что позволило интуитивно сразу перейти на одноклоковую синхронизацию при проектировании.
Поэтому на FPGA такая схема ложилась не глядя, а вот те, кто с временными колбасками работал, пролетели по полной.
Вот я и подумал, что мой опыт сыграл со мной злую шутку и я упустил что то важное.
А ссылка на FLEX8000, ab_137, так там под именем ripple-carry counter нарисована связка триггеров, тактируемых одним клоком.
Кстати необходимость в последовательном счетчике я и здесь не почувствовал.
Частота то таже получилась. Правда повторюсь без указаний синтезатору (неохота сейчас замену подбирать в своем пакете)
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Sep 1 2007, 09:39
Сообщение #30


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Апноты и гайды служат лиш для расширения кругозора. Это не догмы. Разработчик должен выбирать наиболее оптимальные варианты реализации поставленной ему задачи.

После синтеза всегда полезно посмотреть в RTL как реализована та или иная конструкция. Весьма полезно и в образовательных целях и в плане оптимизации дизайна. Иногда синтезатры пытаются выглядеть "слишком умными" поэтому их надо вовремя осаждать правильными constrain. Правда в Quartus (Q.) RTL вювер убогий по сравнению с Synplify.

Я в Q. редко чтото делаю, для проверки решил синтезировать для Acex1-3 в Synplify и в Q.

Для 16 бит счетчика получил ~200 МHz для синхронного и >500 для асинхронного
Для 32 бит счетчика получил ~100 МHz для синхронного и >500 для асинхронного

При этом задержка от Clk до выхода последнего тригера
в асинхронном счетчике для 32 бит равна 65 ns!

Причем цифры как в Q. так и в Synplify почти одинаковые.

Успехов! Rob.
Go to the top of the page
 
+Quote Post

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

 


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


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