|
|
  |
Счетчик, Как считать импульсы? |
|
|
|
Mar 25 2005, 14:16
|
Участник

Группа: Свой
Сообщений: 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;
|
|
|
|
|
Mar 25 2005, 16:47
|

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

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

Частый гость
 
Группа: Свой
Сообщений: 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 На счет фронта, может из-за своей некомпетентности, но опять ничего не понял Может нарисуете временную диаграмку что приходит на вход/что желаете получить при появлении фронта/как это связано с глобал клоком, если вообще связано?
|
|
|
|
|
Mar 26 2005, 08:51
|
Местный
  
Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608

|
Цитата(moonrock @ Mar 25 2005, 09:47) Я интересовался как правильно делать схему выделения фронта от какого-либо входа, если у схемы только один глобальный клок. Элементарно, дорогой Ватсон  reg xxx; wire front, spad; always @ (posedge globalclock) begin xxx <= my_input; end front = my_input & ~xxx; spad = ~my_input & xxx;
|
|
|
|
|
Mar 26 2005, 11:32
|

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 На счет фронта, может из-за своей некомпетентности, но опять ничего не понял Может нарисуете временную диаграмку что приходит на вход/что желаете получить при появлении фронта/как это связано с глобал клоком, если вообще связано? Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа: ... 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
|
|
|
|
|
Mar 26 2005, 11:46
|

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

|
Цитата(Victor® @ Mar 26 2005, 11:32) Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа: ... Поясните пожалуйста чем не нравится и почему лучше с синхронной загрузкой? Все ведь и так работает?
|
|
|
|
|
Mar 27 2005, 04:45
|
Знающий
   
Группа: Свой
Сообщений: 513
Регистрация: 1-02-05
Из: Харьков, СССР
Пользователь №: 2 334

|
Цитата(moonrock @ Mar 25 2005, 19:47) Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается. а пока все идет так -  Это надо рултиь в опциях логического синтеза в МАКСе - снять галочку с обязательного использования глобальных входов для клока, ресета и т.д. Такой подход снижает быстродействие - но лично в моих проектах для 30..40 Мгц по барабану. В общем каждой схеме индивидуальный подход
|
|
|
|
|
Mar 27 2005, 21:26
|
Участник

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

|
Цитата(M_A @ Mar 26 2005, 14:46) Цитата(Victor® @ Mar 26 2005, 11:32) Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа: ... Поясните пожалуйста чем не нравится и почему лучше с синхронной загрузкой? Все ведь и так работает? всегда лучше с синхронной загрузкой. по определению  а если серьезно - предложенный асинхронный пример будет сносно работать на PLD (из-за архитектуры, в которой почему-то все задержки оказываются равными), а на FPGA может случиться облом  при массовом переключении выходов счетчика один из сигналов может иметь меньшую задержку, и произойдет необоснованный сброс.
|
|
|
|
|
Mar 27 2005, 21:29
|
Участник

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

|
Цитата(prototype @ Mar 27 2005, 07:45) Цитата(moonrock @ Mar 25 2005, 19:47) Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается. а пока все идет так -  Это надо рултиь в опциях логического синтеза в МАКСе - снять галочку с обязательного использования глобальных входов для клока, ресета и т.д. Такой подход снижает быстродействие - но лично в моих проектах для 30..40 Мгц по барабану. В общем каждой схеме индивидуальный подход  нет там такой опции. есть automatic global, но это совсем другое.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|