Перейти к содержанию
    

Vinnetu

Свой
  • Постов

    265
  • Зарегистрирован

  • Посещение

Весь контент Vinnetu


  1. Мои 5 копеек. Хоть и запоздало, но, думаю, в тему. Подобные задачи возникают сплошь и рядом. По стробу выдать импульс определённой длины либо один раз, либо в цикле. Либо выдать или принять данные в последовательном коде для какого-либо устройства и пр.. Я нашёл для себя удачную конструкцию и всегда ею пользуюсь. Вот пример: ------------------------------------------------ LIBRARY ieee; USE ieee.std_logic_1164.all; -- Entity Declaration ENTITY REPLY_CONTROL IS PORT ( START : IN STD_LOGIC; CLK_IN : IN STD_LOGIC; DATA_OUT : OUT STD_LOGIC ); END REPLY_CONTROL; -- Architecture Body ARCHITECTURE REPLY_CONTROL_architecture OF REPLY_CONTROL IS signal count: integer range 0 to 15; BEGIN process (START, CLK_IN) -- declarations begin if START = '0' then -- Asynchronous reset code count <= 0; DATA_OUT <= '0'; elsif CLK_IN='0' and CLK_IN'event then -- synchronous code count <= count +1; if count > 8 then count <= 8; end if; case count is when 6 => DATA_OUT <= '1'; when 7 => DATA_OUT <= '1'; when others => DATA_OUT <= '0'; end case; end if; end process; END REPLY_CONTROL_architecture; ------------------------------------------------ Что получается? Пока START = '0', вся схема ждёт. Как только START отпускаем в '1', начинает работать счётчик count. Когда он досчитает до 6, на выходе появится импульс длиной в два такта, после чего схема остановится. Чтобы снова получить имаульс на выходе, нужно уронить START в '0' и снова поднять в '1'. Если нужно, чтобы импульсы шли постоянно, нужно только изменить условие: if count > 8 then count <= 0; end if; Понятно, что первая строчка определяет период следования импульсов. Так можно делать одновибраторы или делители частоты на произвольную величину, не кратную 2. Если программу немного изменить, то её можно использовать для программирования сериальных устройств. Например, программирование PLL: ------------------------------------------------ LIBRARY ieee; USE ieee.std_logic_1164.all; -- Entity Declaration ENTITY PLL_Program IS PORT ( START : IN STD_LOGIC; DATA_IN : IN STD_LOGIC_VECTOR(71 downto 0); CLK : IN STD_LOGIC; RST : IN STD_LOGIC; PLL_EN : OUT STD_LOGIC; PLL_DATA : OUT STD_LOGIC; PLL_CLK : OUT STD_LOGIC ); END PLL_Program; -- Architecture Body ARCHITECTURE PLL_Program_architecture OF PLL_Program IS signal count: integer range 0 to 226; BEGIN process (CLK, START, DATA_IN, RST) -- declarations begin if RST = '1' then count <= 222; elsif START = '1' then -- Asynchronous reset code count <= 0; PLL_EN <= '1'; PLL_DATA <= '0'; PLL_CLK <= '0'; elsif CLK='1' and CLK'event then -- synchronous code count <= count + 1; if count > 222 then count <= 222; end if; case count is -- Initialization Latch 11h when 0 => PLL_EN <= '1'; PLL_CLK <= '0'; PLL_DATA <= DATA_IN(71); when 1 => PLL_EN <= '0'; PLL_CLK <= '0'; PLL_DATA <= DATA_IN(71); when 2 => PLL_EN <= '0'; PLL_CLK <= '1'; PLL_DATA <= DATA_IN(71); when 3 => PLL_EN <= '0'; PLL_CLK <= '0'; PLL_DATA <= DATA_IN(70); when 4 => PLL_EN <= '0'; PLL_CLK <= '1'; PLL_DATA <= DATA_IN(70); .... when 210 => PLL_EN <= '0'; PLL_CLK <= '0'; PLL_DATA <= DATA_IN(1); when 211 => PLL_EN <= '0'; PLL_CLK <= '1'; PLL_DATA <= DATA_IN(1); when 212 => PLL_EN <= '0'; PLL_CLK <= '0'; PLL_DATA <= DATA_IN(0); when 213 => PLL_EN <= '0'; PLL_CLK <= '1'; PLL_DATA <= DATA_IN(0); when 214 => PLL_EN <= '0'; PLL_CLK <= '0'; PLL_DATA <= DATA_IN(0); when 215 => PLL_EN <= '1'; PLL_CLK <= '0'; PLL_DATA <= DATA_IN(0); when 216 => PLL_EN <= '1'; PLL_CLK <= '0'; PLL_DATA <= '0'; when 217 => PLL_EN <= '1'; PLL_CLK <= '0'; PLL_DATA <= '0'; when 218 => PLL_EN <= '1'; PLL_CLK <= '0'; PLL_DATA <= '0'; when 219 => PLL_EN <= '1'; PLL_CLK <= '0'; PLL_DATA <= '0'; when others => PLL_EN <= '1'; PLL_CLK <= '0'; PLL_DATA <= '0'; end case; end if; end process; END PLL_Program_architecture; ------------------------------------------------ Входные сигналы: RST - аппаратный сброс (Global Reset); DATA_IN - данные; CLK - задающая частота; START - сигнал запуска. Если RST = '1', пришёл сброс при включении питания, счётчик count сразу загоняется в верхнее значение. Схема молчит. Это значит, что по сбросу, когда данные ещё не готовы, никаких сигналов вырабатываться не будет. START = '1'. Приготовились! START = '0'. Начало передачи. Для программирования PLL нужно 3 сигнала: PLL_EN - если ='0', PLL выбран. PLL_DATA - последовательные данные, которые стробируются передним фронтом PLL_CLK. Циклы: 0 - готовим старший бит. 1 - опускаем PLL_EN в '0' (активный). 2 - стробируем данные. 3 - готовим следующий бит данных. 4 - стробируем. ... и так далее ... 213 - стробируем последний (младший бит). 214 - выжидаем 1 такт. 215 - поднимаем PLL_EN. Передача завершена. 216-219 - выжидаем небольшую паузу. ----------------------------------------------------- Подобным же образом можно делать и приёмные регистры. Данная конструкция очень универсальная. На её основе можно сделать миллион и одно устройство. Она легко читается и самое главное - не создаёт никаких проблем с гонками.
  2. 6.25 - это просто величина, кратная 50. Только и всего. Лично я предпочитаю последнее время ставить 4mil. Раньше выбор шага сетки был напрямую связан со степенью сложности (точности) изготовления PCB. От класса сложности зависела и цена платы. Сейчас технологии продвинулись значительно вперёд, позволяя не задумываться о таких вещах. Сетка осталась фактически лишь для удобства, не более. Причём, во многих случаях, Layout-программы сами отходят от сетки, если это необходимо. Например, если надо подсоединить дорожку к выводу или провести трек между двумя pad-ами.
  3. Вы не понимаете разницы между сеточными и бессеточными трассировщиками. Если мне доверяете, то можете почитать здесь: http://rapidshare.com/files/21109005/sOLP223_279.pdf Стр. 251 - 6.21: Растровая и векторная графика. Типы автотрассировщиков.
  4. По большому счёту - лишь как вам удобнее. Если выбрать шаг 1mil, это будет равносильно отключению сетки. Правильно. Но если вы укажете ей, что хотите работать с сеткой, то она, разумеется, подчинится вам. Никакого отношения к алгоритму прокладки трасс это не имеет. Трассировщик лишь будет стараться придерживаться координат, кратных размеру сетки.
  5. См. неск. постов выше.
  6. А разве выдаёт ошибку? По-моему, нет. DRC в Layout очень умный, хотя я знаю пару случаев, когда он молчит. Впрочем, я также знаю, как это проверить. :) Если DRC выдаёт вам ошибку на две соседние vias одной цепи, вы ему верьте: что-то тут не так. Посмотрите подробное описание ошибки в Query Window. Хотите, выложите тут свою плату, мы глянем. Если это возможно, конечно. А вот тут никакого панибратства. Свой pad или чужой: правила для всех едины и указываются в таблице Global Spacing (Route Spacing) - Via to Pad. Поздравляем! :) И спасибо. Кстати, мой друг недавно тоже, используя мою книгу, нарисовал свою первую плату. Конечно, попросил меня глянуть потом, но в целом всё сделал сам и почти без замечаний. Надо ли говорить, как я рад!
  7. Kotovskii, спасибо. sawtooth, смотрите ПМ и пост чуть выше этого.
  8. Может быть... 2 all: всем, кто просил, я отправил (наверно, придётся ещё раз где-то выложить). Все, кто не ответил, я считаю, что получили.
  9. Dmitrij_80, отправил, проверьте. На счёт вопросов - посмотрите на стр. 266. Про Free vias - следующая глава. PS. Остальным, кто просил, тоже отправил. Если что-то напутал, напишите ещё раз, pls. PPS. Знакомые свели с одним издателем в Питере. Если всё пойдёт как надо, то раздача, скорее всего, прекратится. Пока не знаю.
  10. Я сохранял в GIF по той причине, что размер получается небольшой и нет искажений. Не уверен, что сохранил все картинки, но посмотрю вечером дома. Завтра пришлю.
  11. bgc, спасибо большое! Это - то, что мне сейчас нужно. Я уже писал кое-куда, но пока безрезультатно. Думаю, может, просто не все печатают техническую литературу? Или просто ещё подождать надо? По поводу тиража ничего не могу сказать. Книги издавать прежде не приходилось. Однажды только, ещё в институте напечатался в журнале "Техника-Молодёжи". :) Поэтому, хоть это и по-детски, наверно, но я рассчитываю на чутьё и профессионализм издателя. Первый тираж можно сделать вообще пробным. Если разойдётся, то можно будет добавить то, что пока не вошло и что пока не успел ещё написать. Там ведь ещё много чего не хватает, на мой взгляд. Просто это требует ужасно много времени, вы даже не представляете! Не сам текст, а составление примеров, многократное их выполнение, потом выполнение начисто со снятием картинок и т.д.. Словом, если можете с кем-то поговорить, спросить, буду очень и очень признателен. Спасибо ещё раз!
  12. Georgy, вы меня своими стихами/восклицаниями просто смущаете. Заставляете краснеть и без того краснокожего седого индейца. Мне просто неудобно будет на форуме появляться. Спасибо, конечно, только не надо больше мне стихов посвящать, ладно? Я ж не девушка. :) Надеюсь, всё нашлось? 8 частей должно быть.
  13. Проверь, может в спам отфильтровалось?
  14. Georgy, я ж посылал тебе ещё 15-го числа! У меня в Sent Items лежит как отправленное! Издеваешься, что ли? Куда оно могло деваться?
  15. Да их везде полно. ;) И в Израиле тоже постараемся. Кстати, у нас солнце! И тепло. :) :)
  16. Издателя для книжки ищем.
  17. Всё, пока раздача закончилась. И так лежало очень долго. Хочу исправить то, что было и добавить дальше. Кстати, м#даки в России издатели. Написал по двум адресам, найденным по сайтам издательств. Один адрес липовый - письмо вернулось. По другому - ни ответа ни привета.
  18. Ну точно так же. Либо с помощью перемычек. Либо прямо на плате, не обращая внимания на вопли DRC. Либо на схеме сделать всё одной землёй, а во время разводки просто помнить, где и как эта земля должна располагаться: сделать раздельные зоны заливки и соединить их в нужной точке.
  19. Ничего этого нет, как правило, в бытовой технике. Изделия производят тысячами, технология известна, поэтому смысла в избыточности нет. Наоборот, имеет смысл сэкономить на всём, что только можно. В других случаях: заказная разработка, для врачей или военных, небольшие партии или, например, если планируется развивать проект дальше, вся избыточность остаётся. В последующих партиях просто не устанавливаются "лишние" покупные элементы. Но ни программа ни PCB не меняются.
  20. Э-э-э! Если б знал, где упал, там б соломки подстелил. Спаял, включил, и всё работает, и никакого дебага не надо! Я вам скажу, что даже если вы такой гений, то работать вы будете с обычными людьми, которые в вашей гениальности будут сомневаться. И правильно, кстати. Поэтому на вашей плате должны присутствовать и контрольные точки, выведенные, если надо из внутренних слоёв, и дополнительный коннектор и дополнительные элементы, цель которых только одна - перевести часть устройства или всё устройство целиком в режим отладки. Если этого не будет, вы только с божьей помощью сможете гадать, почему этот девайс работает, а точно такой же - нет. Я сейчас работаю над одним проектом. Всё, о чём я говорил, на схеме (и на плате) присутствует. Более того, 2/3 содержимого Альтеры, которая стоит на плате - дополнительные регистры/сигналы, которые служат исключительно для дебага. С помощью специальных команд я смогу управлять любой частью устройства по отдельности.
  21. А если плюс-минус перепутали? А если кофе пролили? Что значит - забыли? А остальные детали впаять не забыли? И как вы потом плату проверяете? Дорожки пилите или ножки у микросхем поднимаете? Эти резисторы для того и существуют, что продаются по полдоллара за килограмм, а зато потом позволяют сэкономить не только время но и деньги. И в случае чего не нужно всю плату курочить.
  22. На схеме делаете разные земли, даёте им понятные имена. А для соединения предусматриваете 0-Ом (Zero-Ohm) резисторы. Знаете, есть такие в разных корпусах: и 0805 и 0603. Работают как перемычки. Это абсолютно правильно и корректно. Кроме того, такие резисторы используются для последующей отладки готового устройства, чтобы можно было включать не всё сразу, а по частям. В этом случае, правда, надо ставить перемычки не на землю, а на питание. И не 0-резисторы, а индуктивности. Например: http://search.murata.co.jp/Ceramy/image/im...S0100BLM18S.pdf Резисторы: http://www.vishay.com/docs/20008/dcrcw.pdf Смотрите строчки "Zero-Ohm-Resistor". Практически все корпуса. Размер зависит от пропускаемого тока.
  23. OrCAD Layout Plus

    Согласен, сдаюсь! :) Если компонентов сотня, то конечно, надо исправлять причину. Только тогда уж площадки править не на плате, а сразу в библиотеке, откуда футпринт был взят. А потом на плате сделать update. Верно?
×
×
  • Создать...