Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Простенький проект CPLD
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Allregia
Есть простенкий проект - буквально пара двоичных счетчиков, регистров и немного вентилей.
Планирую на 3-х вольтовой EPM3032А, БайтБластер уже спаял.

Раньше с програмируемой логикой дел не имел, но слышал что простые вещи можно не писать программу на AHDL/VHDL а просто нарисовать схему, скомпилировать и прошить в альтерку.

Пока Квартус не скачался, поставил MAX+, лицензию у альтеры получил, но что делать дальше - пока не разобрался. С ним даже какие-то примеры куцые идут, или это я баран. Но когда вызываю компилятор, кнопочка "старт" неактивная.
Направьте на путь истинный, плииииз. Куда смотреть, чего читать.
Serhiy_UA
Русскоязычной Европе в помощь...
Allregia
Щiро дякую!
Allregia
Рано я обрадовался sad.gif
Не, вчера все пошло - я просто не вьехал в несколько идиотский интерфейс и идеологию самой программы (мах+), в "проектами" она работает мягко говоря оригинально.
Но не в этом дело, я сделал 99% того что мне надо было, но споткнулся на одной ерунде. понияю что вопросы детские, но если кому не лень - посмотрите пожалуйста, в аттаче все файлы проекта, а я пока словами опишу:

-вход тактовой идет на один вход 2XOR
-та-же тактовая идет на 5 подряд включенных инверторов (NOT)
- с выхода 5-го инвертора сигнал идет на второй вход 2XOR, и для контрлля - на вход out1
- выход 2XOR идет на выход out.

на out1 вижу задержанный клок, а на выходе out - по=стоянно висит 0

для проверки, параллельно 2XOR поставил 2AND, с выходом на out2 - там тоже постоянно висит 0.

Что я "не так" делаю ?
Думаю не надо обьяснять. что я хотел получить короткие импульсы от обоих фронтов клока (для чего неважно - это только фрагмент схемы).

P.S. Соррри если не в том разделе, но в "начинающим" я раздела про ПЛИСы не нашел.
Victor®
Цитата(Allregia @ Nov 30 2010, 17:38) *
Рано я обрадовался sad.gif
Не, вчера все пошло - я просто не вьехал в несколько идиотский интерфейс и идеологию самой программы (мах+), в "проектами" она работает мягко говоря оригинально.
Но не в этом дело, я сделал 99% того что мне надо было, но споткнулся на одной ерунде. понияю что вопросы детские, но если кому не лень - посмотрите пожалуйста, в аттаче все файлы проекта, а я пока словами опишу:

-вход тактовой идет на один вход 2XOR
-та-же тактовая идет на 5 подряд включенных инверторов (NOT)
- с выхода 5-го инвертора сигнал идет на второй вход 2XOR, и для контрлля - на вход out1
- выход 2XOR идет на выход out.

на out1 вижу задержанный клок, а на выходе out - по=стоянно висит 0

для проверки, параллельно 2XOR поставил 2AND, с выходом на out2 - там тоже постоянно висит 0.

Что я "не так" делаю ?
Думаю не надо обьяснять. что я хотел получить короткие импульсы от обоих фронтов клока (для чего неважно - это только фрагмент схемы).

P.S. Соррри если не в том разделе, но в "начинающим" я раздела про ПЛИСы не нашел.


Дело не в CPLD или MAX+PLUS II...
Дело в Вашем подходе к цифровой схемотехнике.
И если в стиле "а-ля 74`" такие фокусы проходили, то в мире CPLD\FPGA это "дурной тон"
(Я о способе выделения фронтов)
Allregia
Цитата(Victor® @ Nov 30 2010, 17:15) *
Дело не в CPLD или MAX+PLUS II...
Дело в Вашем подходе к цифровой схемотехнике.
И если в стиле "а-ля 74`" такие фокусы проходили, то в мире CPLD\FPGA это "дурной тон"
(Я о способе выделения фронтов)


Ну я как бы и не скрывал что в CPLD/FPGA я новичек smile.gif
Если такой вариант не подходит, подкажите "как надо" это делат с CPLD? Я волшебное слово знаю - пожалуйста.

(и все же интересно, почему и такое не работает? может там как типа как в Си компиляторах - оптимизатор повыбрасывал с его точки хзрения лишнее?)
ViKo
Цитата(Victor® @ Nov 30 2010, 17:15) *
И если в стиле "а-ля 74`" такие фокусы проходили, то в мире CPLD\FPGA это "дурной тон"

В эпоху 7400 это тоже считалось "дурным тоном" или "высшим пилотажем", смотря кто как оценивает.

2 Allregia
Оптимизатор повыбрасывал, вы правы. Можете повыводить на выходы все свои сигналы, тогда они должны остаться.
Allregia
Цитата(ViKo @ Nov 30 2010, 17:31) *
В эпоху 7400 это тоже считалось "дурным тоном" или "высшим пилотажем", смотря кто как оценивает.


Да нет, это как раз считалось вполне нормальным. "Дурным тоном" считалось - когда вместо цепочки инверторов ставили RC-цепочку, вот за это надо бить по рукам.

Цитата
2 Allregia
Оптимизатор повыбрасывал, вы правы. Можете повыводить на выходы все свои сигналы, тогда они должны остаться.


ОК, так как все-таки "правильно" сделать в CPLD выделение фронта ? Частота клока относительно небольшая - 100-120кгц.
ViKo
Цитата(Allregia @ Nov 30 2010, 17:41) *
ОК, так как все-таки "правильно" сделать в CPLD выделение фронта ? Частота клока относительно небольшая - 100-120кгц.

Все делать синхронным. Иметь в ПЛИС тактовый сигнал, частоты которого хватит для любых манипуляций со входными сигналами. Задержать сигнал на триггере, тактируемым этим тактовым сигналом (как и все остальные триггеры). Когда входной сигнал уже в 1, а на триггере еще 0 - вот и фронт.
На входе для сигналов требуется ставить так называемые "синхронизаторы" на паре триггеров. Чтобы избежать метастабильных состояний, когда тактовый сигнал по времени совпадает с изменением входного. Издержки синхронного дизайна.
dvladim
Цитата(Allregia @ Nov 30 2010, 18:41) *
Да нет, это как раз считалось вполне нормальным. "Дурным тоном" считалось - когда вместо цепочки инверторов ставили RC-цепочку, вот за это надо бить по рукам.

Готов поспорить. По температурной стабильности RC значительно более стабильна чем цепочка инверторов. И для ASIC это тоже справедливо.

Вы бы объяснили более конкретно что вам нужно. А выделение фронта делается на 2-х разрядном сдвиговом регистре сравнением его с 2'b01 (или 2'b10 в зависимости от требуемого фронта), плюс еще регистр для подавления метастабильности.
Allregia
Цитата(dvladim @ Nov 30 2010, 22:51) *
Вы бы объяснили более конкретно что вам нужно.


Мне нужно сформировать импульсы, длительностью не более 20нс, после обеих фронтов сигнала, который примерно меандр 100кгц.
Можно и менее 20нс, эти импульсы будут исопльзоваться для сброса счетчика, находященося в той-же CPLD.

Цитата
А выделение фронта делается на 2-х разрядном сдвиговом регистре сравнением его с 2'b01 (или 2'b10 в зависимости от требуемого фронта),


Зачем "2-х разрядном"? Нельзя 1-разрядным? Т.е. как тут выше советовали - задержать Д-триггером и потом сложить вход и выход триггера XORом ?
Цитата
плюс еще регистр для подавления метастабильности.


Можно поподробнее - что такое "метастабильность и как ее подавлять? Я может и знаю о чем речь, но не знаю этого термина.
Serhiy_UA
Цитата(Allregia @ Dec 1 2010, 01:53) *
Мне нужно сформировать импульсы, длительностью не более 20нс, после обеих фронтов сигнала, который примерно меандр 100кгц.
Можно и менее 20нс, эти импульсы будут исопльзоваться для сброса счетчика, находященося в той-же CPLD.

Инверторы, коньюнкторы, исключающее ИЛИ и Ваш личный опыт, Вам и помогут.
Изучение Altera Quartus II посмотрите в http://marsohod.org/index.php/aquartus2
Про верилог, который лучше схематики на все 100%, смотрите для начала в http://marsohod.org/index.php/component/tag/Verilog

Да и просто, специально для начинающих и для Вас тоже, смотрите все в http://marsohod.org/index.php/howtostart
EvgenyNik
Я когда-то тоже начинал с маленьких CPLD. Собственно, и сейчас выше младшего Циклона3 не ушёл. Сначала в графике делал (а-ля 74хх), потом на AHDL перешёл...
Так вот, когда я более-менее созрел до написания правильных синхронных проектов без всей этой комбинаторики на Искл.ИЛИ для пропуска или удвоения импульсов и т.д., то попробовал переписать часть своих старых поделок (кодовый замок, например, на EPM7032S) на верилоге без шаманских заморочек. И что вы думаете? Не влезло! smile.gif Все эти триггеры, регистры синхронизаций, антидребезга и т.п. съедают поболее ячеек, чем комбинаторика.
Allregia, Вы, как будто, не совсем сначала перекладываете решение задачи на ПЛМ. Вам надо выделить фронты для сброса счётчика. А счётчик что считает? Не эти же ли импульсы 100 кГц? Если эти, то нет необходимости в столь шустрых сбросах. Если не эти, то нужно синхронизировать сначала 2 сигнала, а потом уже управление им доверять.
MrYuran
Цитата(Евгений Николаев @ Dec 1 2010, 11:45) *
И что вы думаете? Не влезло! smile.gif Все эти триггеры, регистры синхронизаций, антидребезга и т.п. съедают поболее ячеек, чем комбинаторика.

Естественно, это ж CPLD, там с триггерами напряжёнка.
Зато многотермовой логики - навалом.
dvladim
Цитата(Allregia @ Dec 1 2010, 00:53) *
Мне нужно сформировать импульсы, длительностью не более 20нс, после обеих фронтов сигнала, который примерно меандр 100кгц.
Можно и менее 20нс, эти импульсы будут исопльзоваться для сброса счетчика, находященося в той-же CPLD.

Нет, это ерунда какая-то. Переходите к нормальному синхронному дизайну, сброс будет шириной в такт и вопросов о длительности сигнала сброса возникать вообще не будет.

Цитата(Allregia @ Dec 1 2010, 00:53) *
Зачем "2-х разрядном"? Нельзя 1-разрядным? Т.е. как тут выше советовали - задержать Д-триггером и потом сложить вход и выход триггера XORом ?

Можно поподробнее - что такое "метастабильность и как ее подавлять? Я может и знаю о чем речь, но не знаю этого термина.

В поиск. Обсуждалось многократно.

Цитата(Евгений Николаев @ Dec 1 2010, 11:45) *
Так вот, когда я более-менее созрел до написания правильных синхронных проектов без всей этой комбинаторики на Искл.ИЛИ для пропуска или удвоения импульсов и т.д., то попробовал переписать часть своих старых поделок (кодовый замок, например, на EPM7032S) на верилоге без шаманских заморочек. И что вы думаете? Не влезло! smile.gif Все эти триггеры, регистры синхронизаций, антидребезга и т.п. съедают поболее ячеек, чем комбинаторика.

Если разработчик сознательно уходит от синхронного дизайна к асинхронному, то он точно знает что делает и чем ему это грозит. Он не будет спрашивать как сделать то или иное, а новичку лучше разобраться с нормальным синхронным дизайном, а уж потом заниматься с асинхронщиной.
Allregia
Цитата
Сначала в графике делал (а-ля 74хх), потом на AHDL перешёл...


Вы будете смеяться, но у меня почти все схемы с микроконтроллерами, для которых я и программы (или их часть) пишу на Си и Асме, но почему-то в данном случае мне проще нарисовать схему чем вникать в AHDL/VHDL/Verilog.
В этом проекте тоже стоят два ARM7 и один DSP, так что программирования хватает (на DSP к счастью программу другие пишут, на ARMы - я).

Цитата(dvladim @ Dec 1 2010, 20:51) *
Нет, это ерунда какая-то. Переходите к нормальному синхронному дизайну, сброс будет шириной в такт и вопросов о длительности сигнала сброса возникать вообще не будет.


Уже перешел smile.gif Сброс счетчиков вообще не понадобился - они теперь как простые делители работают, крутятся по кругу.
Раньше меня волновала не сама по себе длительность сброса, а чтобы она небыла больше чем полпериода тех импульсов, которые счетчик считает.
Если по простому - счетчик должен был выдать сигнал после определенного числа импульсов, после фронта сигнала 100кгц. Импульсы и сигнал синхронные, но нельзя было потерять первый счетный импульс что после фронта.
Цитата
В поиск. Обсуждалось многократно.


Если бы еще этот поиск нормально работал...

Цитата
Если разработчик сознательно уходит от синхронного дизайна к асинхронному, то он точно знает что делает и чем ему это грозит.


В данном случае - знаю. Более того - схема на 74хх была спаяна на макетке и прекрасно работала. Просто решено было добавить некоторые дополнительные возможности да заодно упаковать все в один чип. Потому к CPLD и перешли.

Цитата
Он не будет спрашивать как сделать то или иное, а новичку лучше разобраться с нормальным синхронным дизайном, а уж потом заниматься с асинхронщиной.


Я переделал вообще всю концепцию и сигналы все идут из CPLD, только один общий клок идет снаружи. Пока все хорошо получается, во всяком случае на экране...
EvgenyNik
Цитата
Более того - схема на 74хх была спаяна на макетке и прекрасно работала. Просто решено было добавить некоторые дополнительные возможности да заодно упаковать все в один чип. Потому к CPLD и перешли.

Во-во-во smile.gif Как раз это и надо искоренять из своего сознания. Медленно и мучительно, путём проб и ошибок.
Рассыпуха будет работать такой, какой её выпустил завод и какой Вы её спаяли на макетке. А в плисине работать будет не то, что Вы видите в редакторе, а то - как Вас поймёт синтезатор и как разложит фиттер.
А конкретно на "схема на 74хх была спаяна на макетке и прекрасно работала" замечу, что Вам, наверняка, знакома ситуация (с тем же APM'ом), когда один и тот же исходник либо работает, либо нет в зависимости от того - какую оптимизацию Вы выбрали. Здесь абсолютно тоже самое: макетка это без оптимизации вообще, плиска - с оптимизацией.
Allregia
Цитата
замечу, что Вам, наверняка, знакома ситуация (с тем же APM'ом), когда один и тот же исходник либо работает, либо нет в зависимости от того - какую оптимизацию Вы выбрали.


Еще как знакома! Правда, с АРМами не сильно - там Кейл шибко вумный, но вот с 430-ми - ИАР с оптимизацией иногда ТАКОГО намутит, вплоть дополной неработоспособности.

Цитата
А в плисине работать будет не то, что Вы видите в редакторе, а то - как Вас поймёт синтезатор и как разложит фиттер.


Но тому что рисует симулятор хоть можно верить ?smile.gif
Serhiy_UA
Цитата(Allregia @ Dec 2 2010, 20:50) *
Но тому что рисует симулятор хоть можно верить ?smile.gif

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

Maverick
Цитата(Serhiy_UA @ Dec 2 2010, 20:21) *
Полностью нельзя. Примерно, как полностью нельзя верить рекламе... smile.gif
Но начинающим работать с ПЛИС, верить симулятору и применять его надо обязательно.

это почему полностью верить нельзя симулятору?
EvgenyNik
Цитата(Maverick @ Dec 2 2010, 22:37) *
это почему полностью верить нельзя симулятору?

Например, в случае с объявлением регистра без инициирующего значения. Симулятор покажет одно, а в жизни может быть другое.
С времянками - аналогично.
Serhiy_UA
Цитата(Maverick @ Dec 2 2010, 22:37) *
это почему полностью верить нельзя симулятору?

Полностью, это на 100%, так я понял? Т.е. после симуляции Вы уверены во всем так, что готовы на любые жертвы?

Я симулировал FSM средней сложности в MAXII+plus на тактовых частотах 80 и 100 МГц, симулятор показывает, что FSM не работает, так как надо.
В QuartusII 7.2 картина аналогичная, хотя и результаты другие, т.е. уже лучше, но полного доверия нет.
А в аппаратуре же, путем подборок и перестановок местами микроопераций в FSM, как бы шаманством, все же требуемый результат получен на частотах 80 и 100 МГц .
Могу ли я после этого готовым к любым жертвам, т.е. к 100% уверенности? Нет, не могу, но я симулятору все равно где-то верю, и советую это начинающим, они же не работают вблизи пределов….
sazh
Цитата(Евгений Николаев @ Dec 3 2010, 08:51) *
Например, в случае с объявлением регистра без инициирующего значения. Симулятор покажет одно


Симулятор покажет неопределенное состояние. И уже по барабану, что будет реально в жизни.


Цитата(Serhiy_UA @ Dec 3 2010, 09:24) *
А в аппаратуре же, путем подборок и перестановок местами микроопераций в FSM, как бы шаманством, все же требуемый результат получен на частотах 80 и 100 МГц .


На столе при комнатной температуре в одном экземпляре.
Serhiy_UA
Цитата(sazh @ Dec 3 2010, 10:05) *
На столе при комнатной температуре в одном экземпляре.

экземпляров с FPGA много они работают на объектах ...
диапазон температур коммерческий...
EvgenyNik
Цитата(sazh @ Dec 3 2010, 10:05) *
Симулятор покажет неопределенное состояние. И уже по барабану, что будет реально в жизни.

Обычно да, но я написал про реальный случай, с которым столкнулся. Регистр был внутренним и представлял собой счётчик байт в контроллере SPI. Сброс регистра осуществлялся автоматически либо по подъёму CS, либо по выходу длины пакета за разумный предел. Видимо, логика этих сбросов синтезировалась так, что состояние было не неопределённым. И только явное объявление начального значения расставило всё по места.
А в большинстве случаев - да, ХХХ там.
sazh
Цитата(Евгений Николаев @ Dec 3 2010, 10:39) *
по подъёму CS, либо по выходу длины пакета за разумный предел.


Получается, Вы просто не дождались на временном интервале формирования cs.
Serhiy_UA
*
Allregia
Цитата
И только явное объявление начального значения расставило всё по места.

Если я использую разные счетчики/делители - нужно ли объединить им все входы спроса, и вывести на пин глобального сброса?
Если да - что с этим пином потом делать? Достаточно обычной RC-цепочки сброса, или чего посильнее надо (типа супервизора, дергуть ногой с МК и т.п) ?
Allregia
Друзья, нужно помощь!

Все тах хорошо шло и прекрасно получалось (в симуляторе MAX+plus II) пока Device стояло на Auto.
Брало они при этом MAX7000, проект сначала влазил в 7032, потом я расширил функции в в итоге влез в 7064.

Но (!) как только я поставил MAX3000A (а именно она и предполагается в конечном итоге, ибо у меня 3.3в питание почти везде), я получил кучу ворнингов симулятора типа "Found Clock high time violation at aaa us at node bbb", и глитчи на его графиках (см график i2wc - это всего -навсего выход переноса счетччика!).

Я сократил проект до минимального, при котором это проявляется, и вот он в пркрепленном файле.
Посмотрите пожалуйста - в чем проблемы?

Есть еще несколько вопросов, но о них потом.

Заранее большое спасибо.
Allregia
Привет всем еще раз. Никто не может помочь? Я застрял sad.gif
Serhiy_UA
Цитата(Allregia @ Dec 6 2010, 19:51) *
Я сократил проект до минимального, при котором это проявляется, и вот он в пркрепленном файле.
Посмотрите пожалуйста - в чем проблемы?

Может и помог бы чем, да не могу загрузить файл с проектом....
Allregia
Цитата(Serhiy_UA @ Dec 7 2010, 11:46) *
Может и помог бы чем, да не могу загрузить файл с проектом....

Нет МАХа или какие-то проблемы с моими файлами ?
Я загружаю в МАХе ttf.gdf, делаю его текущим (Control+Shift+J), затем жму Ctrl-L (или Start в окне компилятора), открываю окно симуклятора, тоже жму Start, затем "Open SCF".
EvgenyNik
Цитата(Allregia @ Dec 7 2010, 10:55) *
Привет всем еще раз. Никто не может помочь? Я застрял sad.gif

Схема у Вас простая, но лучше бы Вы дополнили её описанием входных сигналов и требованиями к выходным:
1. Входные частоты _au и _cp примерно одного диапазона?
2. Всегда ли существуют оба сигнала частоты, один из них?
3. Сигналы управления мультиплексорами поступают синхронное с одной из входных частот?
4. Допустимо ли формировать выходные сигналы с задержкой на такт (два и т.п.) относительно входных частот?
sazh
Цитата(Allregia @ Dec 6 2010, 19:51) *
Друзья, нужно помощь!

Все тах хорошо шло и прекрасно получалось (в симуляторе MAX+plus II) пока Device стояло на Auto.
Брало они при этом MAX7000, проект сначала влазил в 7032, потом я расширил функции в в итоге влез в 7064.

я получил кучу ворнингов симулятора типа "Found Clock high time violation at aaa us at node bbb", и глитчи на его графиках (см график i2wc - это всего -навсего выход переноса счетччика!).


Это он говорит, что Вы взяли все самое худшее от схемотехники на 74 серии.
Что касается глича, так Вы нестробированный перенос задействовали. Через триггер пропустите.
Кстати, у Вас и на макетке на 74 серии на этом переносе (если синхронный счетчик) такие же пички есть.
Allregia
Цитата(sazh @ Dec 7 2010, 14:36) *
Это он говорит, что Вы взяли все самое худшее от схемотехники на 74 серии.
Что касается глича, так Вы нестробированный перенос задействовали. Через триггер пропустите.
Кстати, у Вас и на макетке на 74 серии на этом переносе (если синхронный счетчик) такие же пички есть.


На "макетке с 74-й серией" была совсем другая схема, я же говорил - я поменял абсолютно всю концепцию.
Через триггер - попробую, но мне все равно непонятно почему эта схема прекрасно работает в симлуяторе на МАХ7000 и не работает на МАХ3000A, МАХ700S ? Некорректности в модуле LPM_COUNTER ?

Цитата(Евгений Николаев @ Dec 7 2010, 13:51) *
Схема у Вас простая, но лучше бы Вы дополнили её описанием входных сигналов и требованиями к выходным:
1. Входные частоты _au и _cp примерно одного диапазона?


Да.

Цитата
2. Всегда ли существуют оба сигнала частоты, один из них?
3. Сигналы управления мультиплексорами поступают синхронное с одной из входных частот?


Частоты существуют всегда, сигнал управления мультьиплексором - Вы про br1,br0 ? Они вообще статические, т.е. они могут меняться, но с периодом в минуты (входные частоты - десятки МГц).

Цитата
4. Допустимо ли формировать выходные сигналы с задержкой на такт (два и т.п.) относительно входных частот?


Допустимо.
EvgenyNik
Цитата(Allregia @ Dec 7 2010, 15:49) *
Частоты существуют всегда, сигнал управления мультьиплексором - Вы про br1,br0 ? Они вообще статические, т.е. они могут меняться, но с периодом в минуты (входные частоты - десятки МГц).

А я про синхронность управляющих сигналов (br[x]) относительно частот спросил вот почему - допустим, clk_au только поднялся вверх (пикосекунды какие-то), а clk_cp, например, в это время в нуле, но приходит сигнал переключения и с мультиплексора "слетает" эдакий пичок... Тоже самое про другой мультиплексор, который между одинарной и половинчатой частотами переключает.
Если на это внимания обращать не стоит, то это одно, а если важно, то так нельзя. Да и вообще, надо привыкать, что так нельзя, потому что когда-нибудь такой пичок крепко завесит какой-нибудь автомат или ещё что будет лишний раз что-нибудь делать или не делать, причём, "по настроению" и "в зависимости от фазы луны".
Поищите информацию про перенос сигналов и тактовых импульсов из одного тактового домена в другой и ваш мультиплексор станет немного сложнее, но гораздо корректнее. Тем более, что, как Вы сами говорите, задержка допустима.
P.S. выложите скриншоты ttt и t1, не у всех есть MAX+plusII...
sazh
Цитата(Евгений Николаев @ Dec 7 2010, 17:14) *
не у всех есть MAX+plusII...


В Квартус есть опция конвертации из МАХ+ в квартус.
Allregia
Цитата(Евгений Николаев @ Dec 7 2010, 16:14) *
А я про синхронность управляющих сигналов (br[x]) относительно частот спросил вот почему - допустим, clk_au только поднялся вверх (пикосекунды какие-то), а clk_cp, например, в это время в нуле, но приходит сигнал переключения и с мультиплексора "слетает" эдакий пичок... Тоже самое про другой мультиплексор, который между одинарной и половинчатой частотами переключает.
Если на это внимания обращать не стоит, то это одно, а если важно, то так нельзя. Да и вообще, надо привыкать, что так нельзя, потому что когда-нибудь такой пичок крепко завесит какой-нибудь автомат или ещё что будет лишний раз что-нибудь делать или не делать, причём, "по настроению" и "в зависимости от фазы луны".


В данном случае - безразлично, но я понял о чем Вы говорите.

Сейчас тут вопрос в другом - я ничего не переключаю, сигналы br[x] статические, оба нули.
И проблема (ворниги при симуляции и глитч) возникает не в том мультиплексора, а в 17-м счетчике, при использовании его выхода переноса (на нем глитч повялется, которго нет в MAX7000)
.
Если перенос не использовать - проблемы нет, но почему с переносом проблема есть в MAX3000 и в 7000S, а в MАX7000 нет ни единого ворнинга, ни глитча при симуляциии?

Цитата
Поищите информацию про перенос сигналов и тактовых импульсов из одного тактового домена в другой и ваш мультиплексор станет немного сложнее, но гораздо корректнее. Тем более, что, как Вы сами говорите, задержка допустима.
P.S. выложите скриншоты ttt и t1, не у всех есть MAX+plusII...


OK.
sazh
Цитата(Allregia @ Dec 7 2010, 17:48) *
но почему с переносом проблема есть в MAX3000 и в 7000S, а в MАX7000 нет ни единого ворнинга, ни глитча при симуляциии?


Потому что у Вас по умолчанию - временное моделирование. Есть определенные правила.
Нельзя комбинаторную логику на с вход триггеров подавать.
Добавите убавите в проекте - появится, скроется. для любого семейства.
dvladim
Цитата(Allregia @ Dec 7 2010, 17:48) *
Сейчас тут вопрос в другом - я ничего не переключаю, сигналы br[x] статические, оба нули.
И проблема (ворниги при симуляции и глитч) возникает не в том мультиплексора, а в 17-м счетчике, при использовании его выхода переноса (на нем глитч повялется, которго нет в MAX7000)

Проект не синхронный. Основная проблема - использование выходов cout в качестве клоков для других счетчиков и триггеров. В вашем проекте 1 клок, выбираемый br1 из clock_au, clock_cp, после этого мультиплексора поставьте lcell, получившийся клок используйте для всех остальных элементов. Разрешение счета делайте через enable.

А насчет отсутствия проблемы в MAX7000 - просто повезло.
Allregia
Цитата
Основная проблема - использование выходов cout в качестве клоков для других счетчиков и триггеров.


Т.е. лучше использовать не выход переноса а выход старшего разряда счетчика для подачи на другие счетчики ?
В таком варианте ворнингов действительно нет и при MAX3000А.

Цитата
В вашем проекте 1 клок, выбираемый br1 из clock_au, clock_cp,


Да, все остальное к нему привязано.
Цитата
после этого мультиплексора поставьте lcell, получившийся клок используйте для всех остальных элементов. Разрешение счета делайте через enable.


Спасибо завтра попробую.

Попутно еще если можно небольшой ликбез:

1) по назначению входов/выходов на пины - их можно как угодно распределять, или есть какие-то ограничения?
2) не очень понял про отдельные пины глобальных "clock, clear, enable" и что-то еще четвертое.
На их выводы можно назначать какие-то входы/выходы?
Или они должны оставаться не занятыми?
rezident
Цитата(Allregia @ Dec 8 2010, 01:08) *
1) по назначению входов/выходов на пины - их можно как угодно распределять, или есть какие-то ограничения?
Ограничения могут накладываться дизайном схемы и требуемыми временными характеристиками. Рекомендуется вначале спроектировать дизайн и только потом назначать выводы. Особенно, если от ПЛИС требуется максимальное быстродействие.
Цитата(Allregia @ Dec 8 2010, 01:08) *
2) не очень понял про отдельные пины глобальных "clock, clear, enable" и что-то еще четвертое.
На их выводы можно назначать какие-то входы/выходы?
Или они должны оставаться не занятыми?
Можно назначать как угодно, но опять же для обеспечения максимального быстродействия рекомендуется использовать эти пины по прямому назначению, т.е. clock как глобальный тактовый сигнал, clear - как глобальный сброс и т.п. Посмотрите блочную структуру ПЛИС в даташите.
Allregia
Цитата
Рекомендуется вначале спроектировать дизайн и только потом назначать выводы.


А чем руководствоваться при назначении пинов, ну кроме желания упростить трассировку платы?
EvgenyNik
Цитата(Allregia @ Dec 8 2010, 00:56) *
А чем руководствоваться при назначении пинов, ну кроме желания упростить трассировку платы?

Про тайминги уже сказали, но это не во всех проектах требуется. С маленькими CPLD иногда не хватает внутренних интерконнектов для желаемого назначения, хотя LE полно. Бывало такое, что убедившись в том, что проект влезает, заказывали плату, а только потом назначали пины и... sm.gif тут начиналось...
Я учитываю суммарную токовую нагрузку (управление светодиодами, например), импульсные синхронные нагрузки при одновременном переключении нескольких каскадов. Например, если это параллельная шина, то линии данных стараюсь делать из одного банка напряжений, а линии управления из другого, чтобы при одновременном щёлканье данными шина управления не словила чего-нибудь из-за броска напряжения на индуктивностях внутренних линий нуля и питания.
При трассировке надо учитывать межпроводниковую ёмкость и не располагать сильноточные и/или высокочастотные выходы с высокоомными входами, либо сразу же на плате их растаскивать и не вести в одной шине рядом.
dvladim
Цитата(Allregia @ Dec 7 2010, 23:08) *
Т.е. лучше использовать не выход переноса а выход старшего разряда счетчика для подачи на другие счетчики ?

Нет. Используйте cout как вход enable для других счетчиков.
Останется только сделать безглитчевый переключатель клоков.
Allregia
Спасибо, еще вопрос - как я понял из даташита МАХ3000А, она толерантна к 5в, но надо ли для этого специально указывать в свойствах дизайна "MuliVolt", если у меня могут быть некоторые входные сигналы 5-вольтовые?
Victor®
Цитата(Евгений Николаев @ Dec 8 2010, 10:35) *
При трассировке надо учитывать межпроводниковую ёмкость и не располагать сильноточные и/или высокочастотные выходы с высокоомными входами, либо сразу же на плате их растаскивать и не вести в одной шине рядом.


Что значит учитывать? Вы лично каким образом это делаете? Может предоставите методику расчета?
EvgenyNik
Allregia, если придётся управлять 5В сигналом по выходу, то используйте открытый коллектор (см. картинку).
Нажмите для просмотра прикрепленного файла
Victor®, sm.gif Я лично не веду такие проводники с зазором 0.25 мм на расстояние 10 см, как самый наглядный пример.
Коллеги по отделу пользуют HyperLynx. Для себя усвоил, что проводник оказывает влияние на соседний, если между ними расстояние меньше, чем между проводником и планом нуля. Ну а дальше на чутье - если 10 см и более, то строго не менее толщины до плана земли, если меньше, то зазор можно сокращать.
P.S. Прошу прощения у модератора за оффтоп, просто уж речь зашла...
Allregia
Цитата
Allregia, если придётся управлять 5В сигналом по выходу, то используйте открытый коллектор (см. картинку).


С выходами-то понятно, меня больше входы альтеры беспокоят - некоторые из подаваемых на нее сигналов, 5-вольтовые.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.