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

 
 
> Счётчик десятинаносекундных импульсов на STM32F4
uu5jkb
сообщение Jun 1 2014, 05:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 4-02-09
Пользователь №: 44 400



Приветствую всех.
Стоит задача вести счёт импульсов, приходящих по пяти каналам. Импульсы уже прямоугольные, сформированные, длительность 10 нс, интервал между импульсами скачет случайным образом, в худшем случае два импульса "слипаются в один". Измерять надо в течение 20 мс, за это время может набежать до 500 тыс. импульсов. По прикидкам, STM32F4 может таткировать свои таймеры 168 МГц и регистрировать импульсы такой длительности. Два 32-разрядных таймеров запустить напрямую, ещё три 16-битных - по прерываниям увеличивать програмный счётчик, чтобы вместилось 500 тыс. импульсов.
Собственно, вопрос: может кто возился с подобным и есть ли какие противопоказания для такого использования СТМ?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jul 13 2014, 21:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну...
код ничего для начальной курсовой.
1. Капитальная ошибка.
always @(poasedge in1) - эта конструкция заводит сигнал in1 на клоки триггера. И вот тут есть засада. Если у вас in идет на клоковую ногу (специальные ноги ПЛИС), то все не плохо. А если нет, то синтезатор потянет сначала этот сигнал на так называемое клоковое дерево, а только потом на триггера, это создает достаточно большую задержку между фронтом и тем как фронт дойдет до триггера... это может и все убить, и частоту снизить, и глюки вызывать если не хватит констраинов
2. В ПЛИС есть такая хрень как метастабильность. Всегда есть шанс что вы по клоку поймаете момент переключения триггера, а так же есть шанс что сигнал не успеет дойти до разных частей ПЛИС, то есть если у вас
Код
always @(posedge clk1)
begin
   reg <= reg + 1;
end

и код
Код
always @(posedge clk2)
begin
  if(reg == 1)
    begin
       A<=2;
       B<=3;
    end
end

то при некоторых сочетания положения clk1 и clk2 у вас может быть что угодно. Иногда А защелкниться а В нет, Иногда в них будет мусор, если они ловят какие-то меняющиеся сигналы....
Потому считается гораздо правильнее и проще на начальных этапах все делать на одном общем клоке. Тогда большую часть неприятностей берет на себя синтезатор, и отследит всю фигню.. Чтобы избежать метастабильность надо вход пропускать через цепочку 2 триггеров.
то есть ваш код должен быть таким
CODE
reg in1_0 = 0;
reg in2_0 = 0;
reg in3_0 = 0;
reg in1_1 = 0;
reg in2_1 = 0;
reg in3_1 = 0;
reg in1_2 = 0;
reg in2_2 = 0;
reg in3_2 = 0;




reg in1_reg = 0;
reg in2_reg = 0;
reg in3_reg = 0;

always @(posedge clk or posedge reset)
begin
//убираем метастабильность
reg in1_0 <= in1;
reg in2_0 <= in2;
reg in3_0 <= in3;
reg in1_1 <= reg_in1_0;
reg in2_1 <= reg_in2_0;
reg in3_1 <= reg_in3_0;
//для отловки фронта
reg in1_2 <= reg_in1_1;
reg in2_2 <= reg_in2_1;
reg in3_2 <= reg_in3_1;

//ловим фронты сигнала
if((reg_in1_2 == 1'b0)&&(reg_in1_1 == 1'b1))
in1_reg <= in1_reg + 1'b1;
if((reg_in2_2 == 1'b0)&&(reg_in2_1 == 1'b1))
in2_reg <= in2_reg + 1'b1;
//ловим фронты сигнала
if((reg_in3_2 == 1'b0)&&(reg_in3_1 == 1'b1))
in3_reg <= in3_reg + 1'b1;


if(reset == 1'b1)
begin
in1_reg <= 0;
in2_reg <= 0;
in3_reg <= 0;
end
end

размер счетчика влияет на максимальную частоту с которой счетчик может считать, о том получается или нет работать на желаемой вам частоте. Плис класса спартан 6 тащит на частоте 100-200 мГц, 64 битные регистры, виртексы еще больше, что может ваша CPLD хрен знает....
При этом частота падает и по мере загрузки плис кодом, чем больше блок тем медленнее...
ресет бывает синхронный и асинхронный, первый работает по клоку внешнему, другой по фронту самого ресета
первый описывается так
Код
always @(posedge clk)
begin
    if(reset == 1'b1)
     ....
end

то есть каждый клок, пока ресет в 1 он выполняется и сбрасывает регистры.
второй описывается так
Код
always @(posedge clk or posedge reset)
begin
    if(reset == 1'b1)
        ....
end


работает по фронту сигнала ресет, заводиться прям на специальные ножки блоков внутри плис, вроде как на фронты клока кладет...
да важно знать что в верилоге последняя строка выполняется приоритетно то есть описание вида
Код
always @(posedge clk)
begin
    A<= A + 1'b1;
    
    if(reset1 == 1'b1)
       A<= 1;
    
    if(reset2 == 1'b1)
       A<=2;
end

работает как запись вида
Код
always @(posedge clk)
begin
    if(reset2 == 1'b1)
       A<=2;
    else  if(reset1 == 1'b1)
       A<= 1;
    else
    A<= A + 1'b1;
end

но читается первый вариант проще..
ну и последние конечно же можно делать инстансы
Код
module InOut(
       clk,    
       in,
       Out
);
input clk;
input in;
output reg Out = 0;

always @(posedge clk)
  begin
      Out <= in;
  end

endmodule


а в основном коде
Код
InOut InOutInst
(
   .clk(g_clk),
   .in(in_1),
   .Out(out_1)
)
InOut InOutInst2
(
   .clk(g_clk),
   .in(in_2),
   .Out(out_2)
)

а в целом отправляйтесь в раздел ПЛИС, там есть iosifik а у него есть курс молодого бойца, в целом он полезен%) ну или пишите в личку если что)

Сообщение отредактировал IgorKossak - Jul 14 2014, 08:12
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- uu5jkb   Счётчик десятинаносекундных импульсов на STM32F4   Jun 1 2014, 05:23
- - Xenia   Цитата(uu5jkb @ Jun 1 2014, 13:33) Импуль...   Jun 1 2014, 05:38
|- - adnega   Цитата(Xenia @ Jun 1 2014, 13:48) позволя...   Jun 1 2014, 06:01
|- - Xenia   Цитата(adnega @ Jun 1 2014, 14:11) Кста, ...   Jun 3 2014, 16:05
- - jcxz   Цитата(uu5jkb @ Jun 1 2014, 15:33) Стоит ...   Jun 1 2014, 07:18
|- - A. Fig Lee   Цитата(jcxz @ Jun 1 2014, 07:28) Другой в...   Jun 1 2014, 07:42
|- - jcxz   Цитата(A. Fig Lee @ Jun 1 2014, 17:40) Ум...   Jun 1 2014, 07:46
|- - HHIMERA   Цитата(A. Fig Lee @ Jun 1 2014, 14:52) ST...   Jun 1 2014, 11:41
|- - A. Fig Lee   Цитата(HHIMERA @ Jun 1 2014, 11:51) И STM...   Jun 2 2014, 07:14
|- - HHIMERA   Цитата(A. Fig Lee @ Jun 2 2014, 14:24) Да...   Jun 2 2014, 14:23
|- - Xenia   Цитата(HHIMERA @ Jun 2 2014, 22:33) ...   Jun 2 2014, 15:08
- - uu5jkb   Цитата(Xenia @ Jun 1 2014, 13:48) ...макс...   Jun 1 2014, 09:33
|- - jcxz   Цитата(uu5jkb @ Jun 1 2014, 19:43) Это но...   Jun 1 2014, 09:51
|- - Tanya   Цитата(uu5jkb @ Jun 1 2014, 17:43) Это но...   Jun 3 2014, 00:31
- - A. Fig Lee   Я бы поначалу глянул, хватит ли таймеров у СТМ32. ...   Jun 1 2014, 10:28
- - Golikov A.   CPLD лучше ставить. Всяко лучше чем на рассыпухе с...   Jun 1 2014, 11:45
- - SasaVitebsk   Непосредственно по вопросу, если это спасёт, то де...   Jun 2 2014, 02:10
|- - demiurg_spb   Как альтернативный вариант: Запустить ДМА по перво...   Jun 2 2014, 02:43
|- - jcxz   Цитата(SasaVitebsk @ Jun 2 2014, 12:20) Н...   Jun 2 2014, 03:52
|- - demiurg_spb   Цитата(jcxz @ Jun 2 2014, 12:02) Не хвати...   Jun 2 2014, 04:26
|- - jcxz   Как это не важно? А как вы их потом разбирать на о...   Jun 2 2014, 04:40
|- - demiurg_spb   Цитата(jcxz @ Jun 2 2014, 12:50) Как это ...   Jun 2 2014, 04:53
|- - adnega   Цитата(demiurg_spb @ Jun 2 2014, 13:03) П...   Jun 2 2014, 05:12
||- - demiurg_spb   Цитата(adnega @ Jun 2 2014, 13:22) Не сов...   Jun 2 2014, 05:27
|- - jcxz   Цитата(demiurg_spb @ Jun 2 2014, 15:03) П...   Jun 2 2014, 09:25
|- - demiurg_spb   Цитата(jcxz @ Jun 2 2014, 17:35) Вы счита...   Jun 3 2014, 03:44
|- - adnega   Цитата(demiurg_spb @ Jun 3 2014, 11:54) Я...   Jun 3 2014, 04:04
|- - demiurg_spb   Цитата(adnega @ Jun 3 2014, 12:14) Кажетс...   Jun 3 2014, 04:17
||- - adnega   Цитата(demiurg_spb @ Jun 3 2014, 12:27) Л...   Jun 3 2014, 04:53
|- - jcxz   Цитата(adnega @ Jun 3 2014, 14:14) Тот ва...   Jun 3 2014, 05:09
|- - adnega   Цитата(jcxz @ Jun 3 2014, 13:19) У меня в...   Jun 3 2014, 06:35
|- - jcxz   Цитата(adnega @ Jun 3 2014, 16:45) Теперь...   Jun 3 2014, 11:44
|- - adnega   Цитата(jcxz @ Jun 3 2014, 19:54) По-моему...   Jun 3 2014, 12:48
- - _pv   DCMI на вход вроде до FCLK/2 разгоняется. но всё р...   Jun 2 2014, 06:25
- - A. Fig Lee   А почему проблемы? Потому что не железо подбираетс...   Jun 2 2014, 09:46
|- - adnega   Цитата(A. Fig Lee @ Jun 2 2014, 17:56) А ...   Jun 2 2014, 10:33
|- - jcxz   Цитата(adnega @ Jun 2 2014, 20:43) 4. Точ...   Jun 2 2014, 14:44
- - HHIMERA   Потому что проблема надуманная... Делов то... макс...   Jun 2 2014, 15:18
- - Golikov A.   а как расшифровывается ETR?   Jun 2 2014, 15:33
|- - A. Fig Lee   Цитата(Golikov A. @ Jun 2 2014, 15:43) а ...   Jun 2 2014, 22:15
- - Golikov A.   ЦитатаExternal TRigger спасибо Цитатасчет фотонов...   Jun 3 2014, 00:37
|- - Tanya   Цитата(Golikov A. @ Jun 3 2014, 08:47) ко...   Jun 3 2014, 02:25
- - Леонид Иванович   10 лет назад решал подобную задачу - делал двухкан...   Jun 3 2014, 04:27
- - alexen   Цитата(Xenia @ Jun 4 2014, 00:15) огранич...   Jun 3 2014, 17:34
|- - Леонид Иванович   Цитата(alexen @ Jun 4 2014, 00:44) Таймер...   Jun 3 2014, 17:43
- - alexen   Цитата(Леонид Иванович @ Jun 4 2014, 01:5...   Jun 3 2014, 18:17
|- - jcxz   В LPC17xx - частота периферии получается делением ...   Jun 3 2014, 22:14
- - uu5jkb   Убедили. Потратил некторое время на знакомство с П...   Jul 13 2014, 17:13


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:14
Рейтинг@Mail.ru


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