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

 
 
> Счётчик десятинаносекундных импульсов на 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
Ответов
uu5jkb
сообщение Jul 13 2014, 17:13
Сообщение #2


Участник
*

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



Убедили. Потратил некторое время на знакомство с ПЛИСинами, сделал usbblaster. Потренировался с квартусом.
Программа получилась следующая:

CODE
module counter4bit(
input wire in0,
input wire in1,
input wire in2,
input wire in3,
input wire in4,
input wire reset,
input wire enable,
input wire read,
input wire[3:0] adr,
output reg[7:0] out8bit
);
reg[23:0] counter0;
reg[23:0] counter1;
reg[23:0] counter2;
reg[23:0] counter3;
reg[23:0] counter4;

always @ (posedge in0)
begin : COUNTER0
if (reset == 1'b0)
begin
counter0 <= 0;
end
else if (enable == 1'b1)
begin
counter0 <= counter0 + 1;
end
end

always @ (posedge in1)
begin : COUNTER1
if (reset == 1'b0)
begin
counter1 <= 0;
end
else if (enable == 1'b1)
begin
counter1 <= counter1 + 1;
end
end

always @ (posedge in2)
begin : COUNTER2
if (reset == 1'b0)
begin
counter2 <= 0;
end
else if (enable == 1'b1)
begin
counter2 <= counter2 + 1;
end
end

always @ (posedge in3)
begin : COUNTER3
if (reset == 1'b0)
begin
counter3 <= 0;
end
else if (enable == 1'b1)
begin
counter3 <= counter3 + 1;
end
end

always @ (posedge in4)
begin : COUNTER4
if (reset == 1'b0)
begin
counter4 <= 0;
end
else if (enable == 1'b1)
begin
counter4 <= counter4 + 1;
end
end

always @ (posedge read)
begin
case (adr)
0: out8bit <= counter0;
1: out8bit <= (counter0 << 8);
2: out8bit <= (counter0 << 16);
3: out8bit <= counter1;
4: out8bit <= (counter1 << 8);
5: out8bit <= (counter1 << 16);
6: out8bit <= counter2;
7: out8bit <= (counter2 << 8);
8: out8bit <= (counter2 << 16);
9: out8bit <= counter3;
10: out8bit <= (counter3 << 8);
11: out8bit <= (counter3 << 16);
12: out8bit <= counter4;
13: out8bit <= (counter4 << 8);
14: out8bit <= (counter4 << 16);
endcase
end

endmodule


Несколько идиотских впросов:
1. В коде всё более-менее или есть какие-то страшные принципиальные ошибки?
2. Каким образом выбирать пины входов и выходов, чтобы задержка была минимальной, квартус какие-то намеки делает, что могло бы быть и быстрее.
3. Правильно ли делать такую синхронизацию по каждому из входов или, например, лучше сделать глобальный клок с частотой около 300 МГц и по каждому клоку смотреть состояние всех ног.
4. Счётчик на 24-бита - это есть гут или не гут, в даташитах же все упоминают про 16-битный при описании быстродействия. Резко ли падает скорость с увеличнием разрядности счётчика?
5. Как лучше сделать ногу ресет. При импульсе на счетных входах если ресет в нуле - сброс счётчика, а как бы сделать сброс в отсутствие импкльсов на входах. Пробовал, например, по posedge ресета сбрасывать все счетные регистры в ноль - квартус матерился, как я понял, из-за того, что значения регистров могут устанавливаться в двух местах - по ресету и по счёту, поэтому возникает конфликт.
6. Совсем идиотский: как сделать модуль "счетчик" и вставить пять счетчиком в этот большой модуль вместо пяти раз always @ (posedge in_)?

ПЛИСина - сплд epm240t100c5n.

Спасибо

Сообщение отредактировал IgorKossak - Jul 13 2014, 17:27
Причина редактирования: [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
- - Golikov A.   Ну... код ничего для начальной курсовой. 1. Капит...   Jul 13 2014, 21:44


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

 


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


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