Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться с внешней шиной и таймингами.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
inco
Не могу понять почему не работает двунаправленная шина данных?
Вернее она работает но такое ощущение что выходной порт сконфигурирован на работу с открытым стоком.

Порт объявлен так:
inout [15:0] mcu_bus, // Input/output data from/to MCU

// Output pin block
assign mcu_bus = oe ? data_out : 16'hzzzz;

далее в другом модуле:
input [15:0] mcu_bus, // Input/output data from/to MCU
output reg oe, // Output enable

reg [24:0] rdin;

далее rdin <= {WR, RD, address, mcu_bus};

rdin объявлен как fast input register
oe объявлен как fast output enable register
data_out пдключено к регистру rdout, который тоже объявлен как fast output register

в результате всего этого в recource property editor получилась такая конфигурация:
файл d_bus,
однако картинка на шине поучилась ужасная:
файл print_00

Не пойму что я делаю не так? Вроде и частота не большая!
Шина данных подключена к процессору Silicon, (клон 51) его шина всё время настроена на ввод, без подтяжки! Когда силикон передаёт в плис сигнал очень хороший все фронта чёткие и ровные, а ввод из ПЛИС полный бред!

Выходные порты ПЛИС работают от 3.3В.
Выходные буферы шины также объявлены как 3.3v-lvcmos. current strength 2ma



И вопрос по расстановке выходных констрейнов. Расскажите идеологию их расстановки, не сам синтаксис. Кино от Альтеры смотрел, примеры читал, но всё не то. Ни как не могу въехать в идеологию!

Вот например если рассмотреть такие варианты:

На выходы плис подключен светодиод, для индикации, по идее время установки не играет роли. Какое время писать?
На выходы плис подключена клавиатура - по идее как и для светодиода?
На выходе подключено устройство с шиной SPI частота 13 МГц какое время писать для clk и данных? Сейчас время не задано. Весь проект работает на 80 МГц затем частота делиться на 6 и регистры шины SPI вынесены в io-cell register с частотой clk 80 MHz.
Аналогично внешняя шина рассмотренная выше, какое время писать!

Я не пойму как это время рассчитывать? Из каких соображений?
SM
Ну два варианта. Один - это "automatic open drain pins", если разрешен, сотворил вам в натуре открытый сток. Второй - более вероятный исходя из картинки со схемой - это у вас с ошибкой формируется сигнал OE, срубая выход раньше времени
inco
С шиной разобрался! А вот кто всё таки подскажет как правильно выставлять тайменги (констрейны)?

А на шине плавный подъем - просто дрейф в 3 состояние. Просто сразу не разобрался попал на разряд шины данных где всё время нули! Вот на картинке другой разряд шины данных, видно что всё нормально! Второй сигнал на картинке разрешение выдачи данных, активный ноль.
SM
Цитата(inco @ Nov 24 2009, 15:56) *
А вот кто всё таки подскажет как правильно выставлять тайменги (констрейны)?

Правильно их выставлять так, чтобы они реально соответствовали требованием шины, т.е. всех остальных устройств, с которыми происходит общение. Соответственно надо взять их из документации на шину (или на микросхемы, подключенные к шине, смотря что за шина) и выставить их так, чтобы они соответствовали.
inco
Так я же в первом сообщении спросил 4 конкретных случая: светодиод, клава и т.д в этих же случаях по идее безразлично что ставить, но что-то же надо задать, вот я и спрашиваю что задать? А для случая SPI шины если я задаю на ней плисой частоту, то что мне ставить для sdi и sdo тоже непонятно!
Хотелось бы на каком нибудь конкретном примере увидеть с объяснениями, а то по документации не понятно! В документации везде примеры если частота clk идёт в плис из вне и одновременно на другую схему и от этой другой схемы заданы задержки относительно этой внешней частоты (в этом случае всё понятно). А если частоту clk задает сама плиса и подаёт на внешнюю схему то как тогда считать задержки?
SM
Цитата(inco @ Nov 24 2009, 17:02) *
Так я же в первом сообщении спросил 4 конкретных случая: светодиод, клава и т.д в этих же случаях по идее безразлично что ставить, но что-то же надо задать, вот я и спрашиваю что задать?

Ничего и не задавать вообще.

Цитата(inco @ Nov 24 2009, 17:02) *
А если частоту clk задает сама плиса и подаёт на внешнюю схему то как тогда считать задержки?

Задать их и для самой clk, и для всего остального относительно того клока, из которого они все произрастают. Опять же, если это важно в данном случае. Я же когда делал блок SPI - всегда делал его на входящем клоке, который брался с inout-пина clk. Ну а если надо, на этот же пин клок и выдавался из ПЛИС. Итого весь SPI-блок внутри работал на SPI-ном CLK, и умел быть сконфигурирован и как мастер, и как слейв.
Shivers
Я бы все же указал тайминги. Во-первых, надо указать оба клока с fmax 80 и 14 Мгц. А для внешнего интерфейса указал бы tsu равный 1/4 периода, т.е. около 35нс, и tco гденибудь около 1/2 периода, т.е. 70нс.
Все цифры можно и с запасом указать.
inco
Ничего не задавать не хочется, так-как в таком случае квартус возмущается. Хочется его ублажить. 8-)

Теперь насчет SPI ничего не понял! Хочется всё-таки разобраться досконально! SPI взят просто для примера.

Итак: имеем системную частоту, в данном случае например 80 МГц, имеем делитель на 6 для получения частоты SPI clk 13.(3) МГц.

Теперь допустим с выхода делителя на 6 идет некая связь (синтезированная квартусом) к триггеру, который формирует clk и находится непосредственно на выводе io. Соответственно на D вход io триггера идёт выход делителя на 6, а на вход clk io триггера идёт частота 80 МГц. Собственно вопрос, какая мне разница сколько получится задержка по линии связи с делителя на 6 до D входа триггера (лиш бы успела за период системной частоты 80 МГц). Теперь по сигналу sdi - выдачу данных из плис в SPI тоже самое, триггер для sdi тоже находится в io, тоже работает на частоте 80 МГц, рассинхронизации между SPI clk и sdi нет, так как работают на одном клоке и сидят прямо в io. Вопрос какие задавать задержки? Теперь по sdo входу (выход внешних микросхем, тактируемых с выхода плис SPI clk). Триггер фиксации значений тоже на частоте 80 МГц тоже непосредственно в io. Задержка от фронтов сигнала SPI clk до выдачи данных на sdo внешними микросхемами известна из их документации, плюс задержка по плате, но каким боком эта задержка влияет на проект в плис, по моему никаким образом, кроме того что она должна быть меньше периода SPI clk или пол периода, если работа по фронту и по спаду. Вот собственно и всё.
Исходя из таких параметров дизайна не понимаю как выбирать задержки? По логике вроде мне никакие задержки не мешают. А максимальная задержка на sdo просто ограничивает максимальную частоту шины SPI.

Общая частота дизайна естественно задана - 80 МГц.
Вот я и не пойму как всё-таки задавать эти задержки в случае когда частоту на выходе задаёт плис!
des00
Цитата(inco @ Nov 24 2009, 12:19) *
Вот я и не пойму как всё-таки задавать эти задержки в случае когда частоту на выходе задаёт плис!


ответ ищите тут

an433.pdf
an481.pdf
Clock_Setup_and_Hold_Slack_Explained.doc
Constraining SOPC Designs v1[1].0.doc
mnl_timequest_cookbook.pdf
ug_tq_tutorial.pdf
quartusii_90_handbook.pdf
Shivers
Цитата(inco @ Nov 24 2009, 21:19) *
Ничего не задавать не хочется, так-как в таком случае квартус возмущается. Хочется его ублажить. 8-)

Теперь насчет SPI ничего не понял! Хочется всё-таки разобраться досконально! SPI взят просто для примера.

Итак: имеем системную частоту, в данном случае например 80 МГц, имеем делитель на 6 для получения частоты SPI clk 13.(3) МГц.

Теперь допустим с выхода делителя на 6 идет некая связь (синтезированная квартусом) к триггеру, который формирует clk и находится непосредственно на выводе io. Соответственно на D вход io триггера идёт выход делителя на 6, а на вход clk io триггера идёт частота 80 МГц. Собственно вопрос, какая мне разница сколько получится задержка по линии связи с делителя на 6 до D входа триггера (лиш бы успела за период системной частоты 80 МГц). Теперь по сигналу sdi - выдачу данных из плис в SPI тоже самое, триггер для sdi тоже находится в io, тоже работает на частоте 80 МГц, рассинхронизации между SPI clk и sdi нет, так как работают на одном клоке и сидят прямо в io. Вопрос какие задавать задержки? Теперь по sdo входу (выход внешних микросхем, тактируемых с выхода плис SPI clk). Триггер фиксации значений тоже на частоте 80 МГц тоже непосредственно в io. Задержка от фронтов сигнала SPI clk до выдачи данных на sdo внешними микросхемами известна из их документации, плюс задержка по плате, но каким боком эта задержка влияет на проект в плис, по моему никаким образом, кроме того что она должна быть меньше периода SPI clk или пол периода, если работа по фронту и по спаду. Вот собственно и всё.
Исходя из таких параметров дизайна не понимаю как выбирать задержки? По логике вроде мне никакие задержки не мешают. А максимальная задержка на sdo просто ограничивает максимальную частоту шины SPI.

Общая частота дизайна естественно задана - 80 МГц.
Вот я и не пойму как всё-таки задавать эти задержки в случае когда частоту на выходе задаёт плис!

Задавать очень просто. Для выходов: Надо прикинуть время распостранения сигнала Tрасп по плате, узнать время сетапа в даташите на микросхему - получатель сигнала Tсетап, тогда ваш констрейн tco = Период - (Tрасп + Tсетап вн. микросхемы). Где период - выходной клок из ПЛИС, который тактирует внешний интерфейс. Аналагочно для входов: Берем значение ТСО внешней микросхемы-драйвера, от которой получаем сигнал в ПЛИС. Тогда констрейн по этому сигналу будет tsu=Период - (Tрасп + TСОвн. микросхемы).
Но, я обычно в самопальных синхронных интерфейсах беру tsu = 1/4 периода, а tco = 1/2 периода - примерно по такой схеме считаются констрейны на PCI. Хотя в подобных стандартах описывается все до последней запятой - время распостранения по плате, сетапа, холда, максимальные длины проводников и т.д. и т.п., так что если используется конкретный интерфейс, то вопросов о констрейнах не должно возникать. Вот, кстати, попробуйте разобраться с констрейнами PCI, будет очень наглядно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.