Привет, Хабросообщество.
Хочу поделиться с вами решением проблемы, с которой я столкнулся и на решение которой у меня ушло много времени.
Более того, куча разных специалистов по радиоэлектронике (к которым я обращался за помощью и советом), а также 2 отечественных и 1 зарубежный форум по радиоэлектронике не смогли помочь решить эту проблему.
Я хочу быть уверен, что тот, кто это прочитает, никогда не «встанет на те грабли», на которые я напал и с которыми мучился долгое время.
Проблема заключалась в том, что я не мог использовать более 1 контакта на одном разъеме IDC. Если на разъеме использовалось более 1 контакта (2 и более), то при проверке осциллографом разъем молчал.
Как теперь выяснилось, проблема была в правилах именования в Quartus II при использовании Schematic. Всех, кому это будет полезно или интересно, прошу обращаться под кат. Демонстрация проблемы Я также столкнулся с этой проблемой на целевых (ручных) устройствах.
Но для наглядности хотелось бы продемонстрировать на ките Альтера DE1 (Рисунок 1).
Рис.
1 – Совет по развитию и образованию Altera DE1 Я загрузил в Quartus II файл «Altera_DE1_pin_assignments.csv» с назначениями выводов ПЛИС (Имя в проекте — номер вывода ПЛИС), который взял с диска от кита.
На рисунке 2 вы можете увидеть названия контактов сорокаконтактного разъема IDC «GPIO_0» в планировщике контактов.
Рис.
2 — Планировщик контактов Quartus II для Altera DE1 Для наглядности опишу проблему подробнее на проекте, показанном на рисунке 3. Тактовая частота 50 МГц поступает с вывода «CLOCK_50» (от тактового генератора на ките, который подключен к определенному выводу ПЛИС).
«lock_50_to_1» — рукописный модуль на языке Verilog, преобразующий тактовую частоту 50 МГц в тактовую частоту 1 МГц с помощью счетчика (аналогичные проблемы наблюдались при использовании мегафункции ALTPLL, встроенной в Quartus II).
Преобразованные часы выводятся на 2 разъема IDC — GPIO_0 и GPIO_1. Разъем GPIO_0 использует 1 пин ([1]) и все работает, разъем GPIO_1 использует 2 контакта ([1],[3]) а сигнала нет.
Рис.
3 — Скриншот Quartus II и фото с осциллографа Для наглядности на картинке в спойлере представлена фотография разъемов:
Причина проблемы
Один из пользователей форума Альтера Форум , заметил «краем глаза» какие-то странные предупреждения при компиляции проекта (который показан на рисунке 3) в Quartus II, и сказал: «Я с этим не сталкивался, не знаю, что делать, но я советую вам сделать модуль верхнего уровня проекта не схематично, а в Verilog или VHDL." Текст предупреждения следующий: Предупреждение (275080): элементы имени шины «GPIO_1» преобразованы с использованием устаревших правил именования.
Делайте любые назначения для новых имен, а не для исходных имен.
Предупреждение (275080).
Сопоставленные элементы на шине с именем «GPIO_1» используют устаревшие соглашения об именах.
Назначайте новые имена, а не исходные имена.
- Предупреждение (275081): имена элементов преобразованы из «GPIO_1[1]» в «GPIO_11».
- Предупреждение (275081): преобразование имени элемента из «GPIO_1[1]» в «GPIO_11».
- Предупреждение (275081): имена элементов преобразованы из «GPIO_1[3]» в «GPIO_13».
- Предупреждение (275081): преобразование имени элемента из «GPIO_1[3]» в «GPIO_13».
Критическое предупреждение (169085): нет точного расположения контактов для 2 контактов из 4 контактов.
Серьезное предупреждение (169085): точное расположение контактов не назначено 2 контактам из 4 контактов.
— Информация (169086): контакт GPIO_11 не назначен точному местоположению на устройстве.
— Информация (169086): Точное расположение контакта GPIO_11 на устройстве не назначено.
- Информация (169086): контакт GPIO_13 не назначен точному местоположению на устройстве.
— Информация (169086): Точное расположение вывода GPIO_13 на устройстве не присвоено Короче, проанализировав предупреждения стало понятно, что Quartus II переименовывает «GPIO_1[1]» — «GPIO_11» «GPIO_1[3]» — «GPIO_13» А для имен GPIO_11 и GPIO_13 не назначены конкретные выводы ПЛИС.
Что об этом сказано в базе знаний Альтеры: Программное обеспечение Max+Plus II имеет ограниченную поддержку имен шин на схеме и иногда переименовывает элементы шины, чтобы работать в рамках этих ограничений.
Например, программное обеспечение Max+Plus II переименовывает имена шин a[1.0], b[1], b[0] на a1, a0, b1, b0 соответственно.
Программное обеспечение Quartus II изначально сохраняло такое поведение для обратной совместимости, но теперь поддерживает метод, который сохраняет естественные имена шин (в квадратных скобках) в вашем проекте.
Однако, чтобы избежать изменения поведения программного обеспечения для существующих проектов, Quartus II продолжает использовать старые соглашения об именах для наследования файлов проектов BDF (файл блочного дизайна) и GDF (файл графического дизайна).
Для новой схемы программное обеспечение Quartus II сохраняет настоящие имена (в квадратных скобках) в проекте во время компиляции.
Соглашения об именах для Quartus II версии 7.1 и более ранних:
(СХЕМА ПЕРЕИМЕНОВАНИЯ MAX+Plus II):
Если шина a[0.3] разбита на части, то создаются 4 вывода: a0, a1, a2, a3. Соглашения об именах для Quartus II версии 7.2 и более поздних версий:
(СХЕМА ПЕРЕИМЕНОВАНИЯ Quartus II):
Если шина a[0.3] разбита на части, то создаются 4 контакта: a[0], a[1], a[2], a[3]
Способ решения проблемы №1
Итак, мы выяснили, что существует две схемы переименования — Max+Plus II и Quartus II.
Вы можете явно переключить эти схемы именования для проекта:
Назначения => Настройки => Настройки анализа и синтеза => Дополнительные настройки => Именование конструкции блока Для наглядности в спойлере есть скриншоты пошагового переключения правил переименования:
Как видно из рисунка 4, если явно переключить схему переименования на Quartus II, проблема решена.
Рис.
4 — Скриншот Quartus II и фото с осциллографа
Способ решения проблемы №2
Если начать использовать контакты разъема IDC по порядку (от 0 до n), то даже при установке схемы переименования Auto Quartus II ничего не переименовывает.
Рис.
5 — Скриншот Quartus II и фото с осциллографа Для наглядности на картинке в спойлере представлена фотография разъемов:
P.S. Я буду очень рад, если смогу облегчить кому-то жизнь и сэкономить его время.
Теги: #Quartus II #altera #altera #altera de1 #схема #Программирование микроконтроллера
-
Сикорский Игорь Иванович.
19 Oct, 24 -
10 Профессий 10 Величайших Умов Человечества
19 Oct, 24 -
Странное Нововведение От Мегафона
19 Oct, 24 -
Relativity Space Напечатает Всю Ракету
19 Oct, 24 -
Особенности Работы С Умными Указателями В Qt
19 Oct, 24