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

 
 
 
Reply to this topicStart new topic
> Счетчик, Как считать импульсы?
moonrock
сообщение Mar 25 2005, 14:07
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 24-03-05
Из: Санкт-Петербург
Пользователь №: 3 661



cranky.gif
Первый раз столкнулся с ПЛИС ( MAX3000 & MAXIIplus). Каким образом считать глобальные клоки везде написано. А вот каким образом подсчитывать асинхронно поступающие импульсы? И вообще каким образом ловить фронты? Помогите разобраться, пожалуйста!
Go to the top of the page
 
+Quote Post
Rok
сообщение Mar 25 2005, 14:16
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894



Вот так к примеру:
process(clk,clr)
begin
if clr = '1' then
addr <= (others => '0');
elsif falling_edge(clk) then
addr <= addr + 1;
end if;
end process;
Go to the top of the page
 
+Quote Post
M_A
сообщение Mar 25 2005, 14:39
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 27-12-04
Из: г. Иркутск
Пользователь №: 1 689



На счет фронтов не понял, а если просто считать, до делается обычный счетчик и на вход clk ему подается произвольная последовательность, считает в любом случае, не зависимо от длительности импульсов.

то Rok простите, это VHDL или verilog? я пока на AHDL сижу, не совсем понимаю данную конструкцию...
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Mar 25 2005, 15:20
Сообщение #4


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Это VHDL. Кусочек кода вполне жизнеспосбен. Счет идет асинхронно по заднему фронту импульса CLK не зависимо от его длительности. При установке clr в 1 происходит сброс счетчика и пока clr не опустится в ноль счетчик считать не будет.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
moonrock
сообщение Mar 25 2005, 16:47
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 24-03-05
Из: Санкт-Петербург
Пользователь №: 3 661



Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается.
to M_A: Я интересовался как правильно делать схему выделения фронта от какого-либо входа, если у схемы только один глобальный клок.

а пока все идет так - smile3046.gif
Go to the top of the page
 
+Quote Post
M_A
сообщение Mar 26 2005, 00:46
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 27-12-04
Из: г. Иркутск
Пользователь №: 1 689



Цитата(moonrock @ Mar 25 2005, 16:47)
Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается.

*

Странно, такого в принципе не должно быть, ведь языки описывают одно и то же, может быть разными конструкциями. Не может же быть такого, что на одном языке что то сделать можно, а на другом нельзя, тем более в такой элементарной вещи, как счетчик. Объясните подробно, что значит получается подать только глобальный клок? А почему нельзя любой другой сигнал?

Я сейчас сам использую в проекте на AHDL счетчики, которые считают не глобальный клок, а другие сигналы, совершенно не связанные с клоком.
Вот пример восьмиразрядного счетчика/делителя на 100

--делаю массив триггеров dff

variable CTR[8..0] :dff;

--далее сам счетчик
--counter
CTRA[].clrn = !c;
CTRA[].clk = b;
CTRA[].d = CTRA[].q + 1;

--делю на 100
--division by 100
if CTRA[].q == 100
then c = VCC;
end if;

выходной сигнал подаю на clear счетчика, тот обнуляется и считает заново
global clock на счетчик вообще не подается. Считает все, что подашь на вход b

На счет фронта, может из-за своей некомпетентности, но опять ничего не понял wacko.gif
Может нарисуете временную диаграмку что приходит на вход/что желаете получить при появлении фронта/как это связано с глобал клоком, если вообще связано?
Go to the top of the page
 
+Quote Post
alexf
сообщение Mar 26 2005, 08:51
Сообщение #7


Местный
***

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



Цитата(moonrock @ Mar 25 2005, 09:47)
Я интересовался как правильно делать схему выделения фронта от какого-либо входа, если у схемы только один глобальный клок.


Элементарно, дорогой Ватсон smile.gif

reg xxx;
wire front, spad;

always @ (posedge globalclock) begin
xxx <= my_input;
end

front = my_input & ~xxx;
spad = ~my_input & xxx;
Go to the top of the page
 
+Quote Post
Victor®
сообщение Mar 26 2005, 11:32
Сообщение #8


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(M_A @ Mar 26 2005, 03:46)
Цитата(moonrock @ Mar 25 2005, 16:47)
Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается.

*

Странно, такого в принципе не должно быть, ведь языки описывают одно и то же, может быть разными конструкциями. Не может же быть такого, что на одном языке что то сделать можно, а на другом нельзя, тем более в такой элементарной вещи, как счетчик. Объясните подробно, что значит получается подать только глобальный клок? А почему нельзя любой другой сигнал?

Я сейчас сам использую в проекте на AHDL счетчики, которые считают не глобальный клок, а другие сигналы, совершенно не связанные с клоком.
Вот пример восьмиразрядного счетчика/делителя на 100

--делаю массив триггеров dff

variable CTR[8..0] :dff;

--далее сам счетчик
--counter
CTRA[].clrn = !c;
CTRA[].clk = b;
CTRA[].d = CTRA[].q + 1;

--делю на 100
--division by 100
if CTRA[].q == 100
then c = VCC;
end if;

выходной сигнал подаю на clear счетчика, тот обнуляется и считает заново
global clock на счетчик вообще не подается. Считает все, что подашь на вход b

На счет фронта, может из-за своей некомпетентности, но опять ничего не понял wacko.gif
Может нарисуете временную диаграмку что приходит на вход/что желаете получить при появлении фронта/как это связано с глобал клоком, если вообще связано?
*



Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа:
...
count[].clrn = res_n;

IF load THEN
count[].d = GND;
ELSE
count[].d = count[].q + 1;
END IF
load = count[].q == 99


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
M_A
сообщение Mar 26 2005, 11:46
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 27-12-04
Из: г. Иркутск
Пользователь №: 1 689



Цитата(Victor® @ Mar 26 2005, 11:32)
Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа:
...

*


Поясните пожалуйста чем не нравится и почему лучше с синхронной загрузкой? Все ведь и так работает?
Go to the top of the page
 
+Quote Post
bve
сообщение Mar 26 2005, 12:17
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 316
Регистрация: 20-02-05
Из: Ленинградская обл.
Пользователь №: 2 765



А почему Вы не хотите использовать стандартные мегафункции?
Можно из вызвать и напрямую, а можно и покопаться в их коде,
который( по крайней мере в Max+Plus ) есть в виде .tdf файлов.
Go to the top of the page
 
+Quote Post
prototype
сообщение Mar 27 2005, 04:45
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 1-02-05
Из: Харьков, СССР
Пользователь №: 2 334



Цитата(moonrock @ Mar 25 2005, 19:47)
Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается.

а пока все идет так -  smile3046.gif
*

Это надо рултиь в опциях логического синтеза в МАКСе - снять галочку с обязательного использования глобальных входов для клока, ресета и т.д.
Такой подход снижает быстродействие - но лично в моих проектах для 30..40 Мгц по барабану. В общем каждой схеме индивидуальный подход biggrin.gif
Go to the top of the page
 
+Quote Post
_LD
сообщение Mar 27 2005, 21:26
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 837



Цитата(M_A @ Mar 26 2005, 14:46)
Цитата(Victor® @ Mar 26 2005, 11:32)


Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа:
...

*


Поясните пожалуйста чем не нравится и почему лучше с синхронной загрузкой? Все ведь и так работает?
*



всегда лучше с синхронной загрузкой. по определению smile.gif

а если серьезно - предложенный асинхронный пример будет сносно работать
на PLD (из-за архитектуры, в которой почему-то все задержки оказываются равными), а на FPGA может случиться облом sad.gif при массовом переключении выходов счетчика один из сигналов может иметь меньшую задержку, и произойдет необоснованный сброс.
Go to the top of the page
 
+Quote Post
_LD
сообщение Mar 27 2005, 21:29
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 837



Цитата(prototype @ Mar 27 2005, 07:45)
Цитата(moonrock @ Mar 25 2005, 19:47)
Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается.

а пока все идет так -  smile3046.gif
*

Это надо рултиь в опциях логического синтеза в МАКСе - снять галочку с обязательного использования глобальных входов для клока, ресета и т.д.
Такой подход снижает быстродействие - но лично в моих проектах для 30..40 Мгц по барабану. В общем каждой схеме индивидуальный подход biggrin.gif
*



нет там такой опции. есть automatic global, но это совсем другое.
Go to the top of the page
 
+Quote Post
moonrock
сообщение Mar 28 2005, 08:44
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 24-03-05
Из: Санкт-Петербург
Пользователь №: 3 661



Все дело было в настройках макса. Компилятор все время ругался так: Illegal assigment - global clock 'clk' on pin 9. Когда убрал галочку Global signal для clk все заработало. Вот только насколько это правильно делать? Если остальная схема синхронная, не будет ли ошибок при считывании из счетчика?
Go to the top of the page
 
+Quote Post

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

 


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


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