moonrock 0 25 марта, 2005 Опубликовано 25 марта, 2005 · Жалоба :cranky: Первый раз столкнулся с ПЛИС ( MAX3000 & MAXIIplus). Каким образом считать глобальные клоки везде написано. А вот каким образом подсчитывать асинхронно поступающие импульсы? И вообще каким образом ловить фронты? Помогите разобраться, пожалуйста! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rok 0 25 марта, 2005 Опубликовано 25 марта, 2005 · Жалоба Вот так к примеру: process(clk,clr) begin if clr = '1' then addr <= (others => '0'); elsif falling_edge(clk) then addr <= addr + 1; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_A 0 25 марта, 2005 Опубликовано 25 марта, 2005 · Жалоба На счет фронтов не понял, а если просто считать, до делается обычный счетчик и на вход clk ему подается произвольная последовательность, считает в любом случае, не зависимо от длительности импульсов. то Rok простите, это VHDL или verilog? я пока на AHDL сижу, не совсем понимаю данную конструкцию... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexandr 0 25 марта, 2005 Опубликовано 25 марта, 2005 · Жалоба Это VHDL. Кусочек кода вполне жизнеспосбен. Счет идет асинхронно по заднему фронту импульса CLK не зависимо от его длительности. При установке clr в 1 происходит сброс счетчика и пока clr не опустится в ноль счетчик считать не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
moonrock 0 25 марта, 2005 Опубликовано 25 марта, 2005 · Жалоба Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается. to M_A: Я интересовался как правильно делать схему выделения фронта от какого-либо входа, если у схемы только один глобальный клок. а пока все идет так - :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_A 0 26 марта, 2005 Опубликовано 26 марта, 2005 · Жалоба Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается. <{POST_SNAPBACK}> Странно, такого в принципе не должно быть, ведь языки описывают одно и то же, может быть разными конструкциями. Не может же быть такого, что на одном языке что то сделать можно, а на другом нельзя, тем более в такой элементарной вещи, как счетчик. Объясните подробно, что значит получается подать только глобальный клок? А почему нельзя любой другой сигнал? Я сейчас сам использую в проекте на 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 На счет фронта, может из-за своей некомпетентности, но опять ничего не понял Может нарисуете временную диаграмку что приходит на вход/что желаете получить при появлении фронта/как это связано с глобал клоком, если вообще связано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexf 0 26 марта, 2005 Опубликовано 26 марта, 2005 · Жалоба Я интересовался как правильно делать схему выделения фронта от какого-либо входа, если у схемы только один глобальный клок. Элементарно, дорогой Ватсон :) reg xxx; wire front, spad; always @ (posedge globalclock) begin xxx <= my_input; end front = my_input & ~xxx; spad = ~my_input & xxx; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 26 марта, 2005 Опубликовано 26 марта, 2005 · Жалоба Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается. <{POST_SNAPBACK}> Странно, такого в принципе не должно быть, ведь языки описывают одно и то же, может быть разными конструкциями. Не может же быть такого, что на одном языке что то сделать можно, а на другом нельзя, тем более в такой элементарной вещи, как счетчик. Объясните подробно, что значит получается подать только глобальный клок? А почему нельзя любой другой сигнал? Я сейчас сам использую в проекте на 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 На счет фронта, может из-за своей некомпетентности, но опять ничего не понял Может нарисуете временную диаграмку что приходит на вход/что желаете получить при появлении фронта/как это связано с глобал клоком, если вообще связано? <{POST_SNAPBACK}> Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа: ... count[].clrn = res_n; IF load THEN count[].d = GND; ELSE count[].d = count[].q + 1; END IF load = count[].q == 99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_A 0 26 марта, 2005 Опубликовано 26 марта, 2005 · Жалоба Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа: ... <{POST_SNAPBACK}> Поясните пожалуйста чем не нравится и почему лучше с синхронной загрузкой? Все ведь и так работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bve 1 26 марта, 2005 Опубликовано 26 марта, 2005 · Жалоба А почему Вы не хотите использовать стандартные мегафункции? Можно из вызвать и напрямую, а можно и покопаться в их коде, который( по крайней мере в Max+Plus ) есть в виде .tdf файлов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prototype 2 27 марта, 2005 Опубликовано 27 марта, 2005 · Жалоба Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается. а пока все идет так - :smile3046: <{POST_SNAPBACK}> Это надо рултиь в опциях логического синтеза в МАКСе - снять галочку с обязательного использования глобальных входов для клока, ресета и т.д. Такой подход снижает быстродействие - но лично в моих проектах для 30..40 Мгц по барабану. В общем каждой схеме индивидуальный подход Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_LD 0 27 марта, 2005 Опубликовано 27 марта, 2005 · Жалоба Что-то мне не нравится этот код. Лучше сделать с синхронной загрузкой, типа: ... <{POST_SNAPBACK}> Поясните пожалуйста чем не нравится и почему лучше с синхронной загрузкой? Все ведь и так работает? <{POST_SNAPBACK}> всегда лучше с синхронной загрузкой. по определению :) а если серьезно - предложенный асинхронный пример будет сносно работать на PLD (из-за архитектуры, в которой почему-то все задержки оказываются равными), а на FPGA может случиться облом :( при массовом переключении выходов счетчика один из сигналов может иметь меньшую задержку, и произойдет необоснованный сброс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_LD 0 27 марта, 2005 Опубликовано 27 марта, 2005 · Жалоба Спасибо за ответ. Вопрос возник вот откуда. Когда на AHDL делаю счетчик из триггеров типа DFF то на вход CLK триггера у меня получается подать только глобальный CLK. А если писать на Verilog то все получается. а пока все идет так - :smile3046: <{POST_SNAPBACK}> Это надо рултиь в опциях логического синтеза в МАКСе - снять галочку с обязательного использования глобальных входов для клока, ресета и т.д. Такой подход снижает быстродействие - но лично в моих проектах для 30..40 Мгц по барабану. В общем каждой схеме индивидуальный подход <{POST_SNAPBACK}> нет там такой опции. есть automatic global, но это совсем другое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
moonrock 0 28 марта, 2005 Опубликовано 28 марта, 2005 · Жалоба Все дело было в настройках макса. Компилятор все время ругался так: Illegal assigment - global clock 'clk' on pin 9. Когда убрал галочку Global signal для clk все заработало. Вот только насколько это правильно делать? Если остальная схема синхронная, не будет ли ошибок при считывании из счетчика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться