|
Общие вопросы |
|
|
|
Apr 27 2016, 10:48
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 19-10-15
Пользователь №: 88 917

|
Доброго времени суток. Я начал вторую итерацию своего обучения ПЛИС (XILINX). И появилось множество вопросов. Вот есть простая VHDL модель, отлаженная в симуляторе.
Какие шаги чтобы ее подконтрольно "залить" в ПЛИС нужно пройти? Просто обозначить контакты и прошить, это опять не то, как я понял. С чего начинается (какие шаги) создание проекта с целью загрузить прошивку из готовой VHDL модели?
timing constraints как ими пользоваться? Есть ли литература /статьи (документацию начал читать). Как оценить проект по временным параметрам? Как узнать время hold, setup в проекте? Как узнать возможны нарушения по временам и устранить их?
Как возможно устранить всякие возможные проблемы , которые могут всплыть?
Я пока пользуюсь ISE и ориентируюсь на xilinx spartan 6 серии . _______________________________________________________ Проект создается через Planahead или ISE profect navigator? Какую документацию необходимо изучить и держать под рукой включая на софт(документации много для себя пока держу несколько, связанных с DSP, IO.) В общем хочется научиться так же на базовой уровне пользоваться ПО для ПЛИС, чтобы перед прошивкой быть в проекте уверенным и понимать на что он способен и какие ограничения имеет.
Приму любые толковые ссылки на статьи/литературу/обучалки/советы
PS. чтобы не засорять вторым топиком, еще один вопрос задам тут. Я столкнулся с такой ситуацией. Один и тоже проект на одно и том же кристалле в одной точке дает разные (две платы-два кристалла -одна и та же конфигурация) результаты. Т.к. проект не мой , но я как раз изучаю схожие вопросы, я хочу данный проект проверить на временные параметры. Как вот в таких ситуациях, когда используешь чужие проекты их сопровождаешь и устраняешь неисправности? (проект схемотехнический, в смысле не описан языком. ). И как оформлять свои проекты, чтобы их удобней и самому сопровождать и другим? Тк. кроме vhdl кода еще же нужно прикладывать какие-то данные (насйтроки среды и т.п.)
|
|
|
|
|
Apr 27 2016, 11:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Начните с простого - назначьте пины и определитесь с тактовой частотой (для начала используйте всего один временной домен). Все ограничения пропишите в .ucf файле (может либо хелпом воспользоваться, либо переводом Зотова), топовый (головной модуль) подключите в ISE. Для проверки рабоспособнтсти используйте ChipScope. Ну, к примеру, простой проект счетчика(по хорошему синхросигнал требуется пропустить через pll, но в простейшем случае неважно) (verilog): Код module cnt_8 ( input clk, output tst_led );
reg [7:0] counter;
always @(posedge clk) counter<=counter+1;
assign tst_led=|counter;
endmodule Для данного случая, требуется назначить вход тактовой частоты и какой-нибудь тестовый выход (исходя из документации). Далее прописываете в UCF-файле ограничения: Код NET "clk" TNM_NET = "clk"; TIMESPEC TS_clk = PERIOD "сlk" 8.138 ns HIGH 50%;//тактовая частота 122,88МГц от осциллятора NET "clk" LOC = AF20;//назначение ноги NET "tst_led" LOC = L23;//назначение ноги Создаете новый модуль Chipscope и выводите необходимые сигналы для проверки работоспособности на железе -задаете опорную частоту, глубину, триггеры и т.д. (project->new_source->chip scope....). Компилируете все и после окончания проверяете, выполнились ли Ваши временные ограничения (design overview->static timing-> отсутствие временных ошибок, т.е. нет путей, подсвеченных красным цветом). Если временных ошибок нет, проверяете работоспособность с помощью chipscope. Если алгорим работает в соответствии с заданным, проект работоспособен.
|
|
|
|
|
Apr 27 2016, 12:11
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 19-10-15
Пользователь №: 88 917

|
Цитата(bogaev_roman @ Apr 27 2016, 11:31)  Я пока на этом и остановился, перед тем, как написал сюда. Т.е. сделал простой проект назначил Ucf файле тактовую и ножки. Только chipscope не пользовался. Как часто им оперируют? Сяду, попробую ,посмотрю , как им оперировать. Еще вопрос. Вот есть асинхронный сброс . Но откуда он берется для начальной инициализации (сигнал) ? Обычно я, не думая, в тестбенче делал начальный короткий импульс сброса. А в железе как? кто дает этот начальный короткий импульс для инициализации? , Или нужно заранее в архитектуре при объявлении сигналов и т.п. определять начальные значения , а ассинхронный сигнал только для кнопки reset? Тут мне в общем тоже не понятно немного.
|
|
|
|
|
Apr 27 2016, 12:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(go2winner @ Apr 27 2016, 15:11)  Только chipscope не пользовался. Как часто им оперируют? Сяду, попробую ,посмотрю , как им оперировать. С помощью внутреннего анализатора можно посмотреть большинство сигналов, т.е. тоже самое, что Вы делаете с помощью симулятора. Для счетчика, к примеру, вытащить все разряды - сформировать из них шину - сделать тип шины unsignement - вывести на waveform и увидеть пилу в режиме реального времени (ну или почти), т.е. это просто один из способов отладки в железе. Цитата Еще вопрос Один из способов следующий - пускать тактовую частоту на pll, в ней задействовать выход locked и его использовать в качестве сброса. В жизни это означает, что после загрузки прошивки в плисину тактовая частота поступает на pll и требуется некоторое минимальное время (указано в документации) для ее стабилизации на выходе, после чего автоматически выставляется сигнал locked, до этого момента все находится под сбросом. В случае, если Вы, в качестве сброса хотите применить внешнюю кнопку/джампер требуется поставить защиту от дребезга, В некоторых случаях применяется и софтовый сброс - переданный по какому-либо (uart,ethernet) интерфейсу например с ПК.
|
|
|
|
|
Apr 27 2016, 15:05
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(bogaev_roman @ Apr 27 2016, 15:55)  пускать тактовую частоту на pll, в ней задействовать выход locked и его использовать в качестве сброса Дополню. Этот locked изменяется асинхронно относительно тактовой частоты выдаваемой с PLL, потому его хорошо бы синхронизировать, пропустив через D-триггер.
Сообщение отредактировал Jackov - Apr 27 2016, 15:05
|
|
|
|
|
Apr 28 2016, 06:59
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 19-10-15
Пользователь №: 88 917

|
Цитата(Bad0512 @ Apr 28 2016, 05:18)  А вообще неплохо бы определиться нужен ли вам ресет вообще (тем более асинхронный!). У Кена Чапмана есть хорошая статься на эту тему. Стиль описания такой привился, везде на VHDL все проекты с асинхронны сбросом, те которые я видел и на которых учился. (статью назовите, ознакомлюсь ) ------------------------------------------------------------------------------------------------------------------------------------ Тогда еще вопрос, получается в таких ситуациях, где сброс может не произойти сразу , (счетчик тот же, где сброс на кнопке или т.п.) я должен в определении сигналов сразу задать начальные значения (до этого я в процессе при сбросе задавал их, считая, что сначала происходит некоторый сброс)? Тогда буду читать и пробовать, а вопросы уже более конкретные кидать Кроме списка литературы. Если можете и имеется под рукой название хороших статей/книг для начинающего (кроме самой документации ее обязательно прочитаю), то не откажусь
Сообщение отредактировал go2winner - Apr 28 2016, 06:59
|
|
|
|
|
Apr 28 2016, 07:14
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(go2winner @ Apr 28 2016, 12:59)  Стиль описания такой привился, везде на VHDL все проекты с асинхронны сбросом, те которые я видел и на которых учился. (статью назовите, ознакомлюсь )
------------------------------------------------------------------------------------------------------------------------------------ Тогда еще вопрос, получается в таких ситуациях, где сброс может не произойти сразу , (счетчик тот же, где сброс на кнопке или т.п.) я должен в определении сигналов сразу задать начальные значения (до этого я в процессе при сбросе задавал их, считая, что сначала происходит некоторый сброс)?
Тогда буду читать и пробовать, а вопросы уже более конкретные кидать Кроме списка литературы. Если можете и имеется под рукой название хороших статей/книг для начинающего (кроме самой документации ее обязательно прочитаю), то не откажусь Вот статья. Ищется гуглом кстати за 1 секунду... Устанавливать началшьные значения сигналов - это хорошая практика. Для FPGA как правило если ничего специального не предпринято, то после загрузки конфигурации все триггера в состоянии 0. Для ASIC всё не так очевидно. Сделать сброс с помощью обычного счётчика - элементарно, однако повторюсь не факт что в вашем конкретном случае сброс нужен, не стОит усложнять конструкции без необходимости.
|
|
|
|
|
Apr 28 2016, 07:34
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 19-10-15
Пользователь №: 88 917

|
Так .. Т.к. мои проекты маленькие и простые с ними проблем пока нету. Я взял проект (не свой (писал выше об этом)) Включил timing constraints на тактовую частоту (хотя там несколько глоб сигналов...на каждый глобальный свой констрайн или минимально необходимо тактовый основной ограничить?) Подождал пока соберется проект . и Полезли ошибки Static Timing. Как понять и как использовать эту информацию (я пока в общих чертах понимаю)? Как определить на какой частоте тогда соберется проект? Какими путями возможно решения таких проблем ? Как найти пути, которые подсвечиваются красным и исправить ситуацию? вот к примеру,  Каков алгоритм действий в таких ситуациях?
|
|
|
|
|
Apr 28 2016, 07:36
|

Местный
  
Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002

|
Цитата(go2winner @ Apr 27 2016, 12:48)  Я начал вторую итерацию своего обучения ПЛИС (XILINX). Вот есть простая VHDL модель, отлаженная в симуляторе.
Какие шаги чтобы ее подконтрольно "залить" в ПЛИС нужно пройти? Просто обозначить контакты и прошить, это опять не то, как я понял. С чего начинается (какие шаги) создание проекта с целью загрузить прошивку из готовой VHDL модели? Тут Вы немного поспешили. Настоятельно рекомендую "простую VHDL модель, отлаженную в симуляторе" имплементировать в ФПГА и прогнать т.н. временнУю симуляцию. При этом Вы переходите от абстракций VHDL модели к ее конкретной практической реализации в железе. При временнОй симуляции (моделировании) схема работает "как настоящая", со всеми аппаратными задержками и проч. УзнАете много нового. Выяснится, что одновременные события на VHDL ни разу не одновременны в реальности. Из плюсов - если схема заработала во временнОм моделировании, она практически гарантированно заработает в реальности. То есть вот Вам программа: - научиться имплементировать проект; - научиться моделировать его в Моделсиме с подключенным .sdf файлом. (прошивать пока бессмысленно).
--------------------
Умею молчать на 37 языках...
|
|
|
|
|
Apr 28 2016, 08:02
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 19-10-15
Пользователь №: 88 917

|
Цитата(Gorby @ Apr 28 2016, 07:36)  Тут Вы немного поспешили. Настоятельно рекомендую "простую VHDL модель, отлаженную в симуляторе" имплементировать в ФПГА и прогнать т.н. временнУю симуляцию. При этом Вы переходите от абстракций VHDL модели к ее конкретной практической реализации в железе. При временнОй симуляции (моделировании) схема работает "как настоящая", со всеми аппаратными задержками и проч. УзнАете много нового. Выяснится, что одновременные события на VHDL ни разу не одновременны в реальности. Из плюсов - если схема заработала во временнОм моделировании, она практически гарантированно заработает в реальности.
То есть вот Вам программа: - научиться имплементировать проект; - научиться моделировать его в Моделсиме с подключенным .sdf файлом.
(прошивать пока бессмысленно). Я создаю проект в VHDL. С начало выполняю behavior симуляцию. Как я понимаю это без учета задержек. Т.е. идеальный случай. И выполняю Post-Route симуляцию. Выполняю с помощью ISIM, кажется так называется Это достаточно? Правда я файлов sdf не подключаю..он сам цепляется? Просто дело не в прошивке (загрузки конфигурации). Я хочу делать проект и быть уверенным, что завтра, когда я его запущу он заработает и я смогу его отдаить в случае чего. А не написать модель абстрактно, а потом еще сидеть огромное количество времени и думать как средой пользоваться, как выявлять ошибки , исправлять, отлаживать, откуда reset брать. Я пока дальше симулятора не хожу. Еще вопрос попутный раз уж про симуляцию. Иногда я вырабатываю в проектах сигнал разрешения, который длиться один такт (от фронта rising до фронта rising)..как его надежней использовать? Читать в другом процессе тоже по возрастающему фронту.....или есть ситуации когда читать лучше по падающему(тогда по диограмме падающий фронт приходиться ровно по середине импульса разоен\щшения )
|
|
|
|
|
Apr 28 2016, 08:10
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(go2winner @ Apr 28 2016, 13:34)  Так .. Т.к. мои проекты маленькие и простые с ними проблем пока нету. Я взял проект (не свой (писал выше об этом)) Включил timing constraints на тактовую частоту (хотя там несколько глоб сигналов...на каждый глобальный свой констрайн или минимально необходимо тактовый основной ограничить?) Подождал пока соберется проект . и Полезли ошибки Static Timing. Как понять и как использовать эту информацию (я пока в общих чертах понимаю)? Как определить на какой частоте тогда соберется проект? Какими путями возможно решения таких проблем ? Как найти пути, которые подсвечиваются красным и исправить ситуацию? вот к примеру,  Каков алгоритм действий в таких ситуациях? Судя по отчёту у вас возможно где-то gated clock используется. Ну и 4 уровня логики для 200МГц многовато - лучше распилить с помощью промежуточных триггеров. И ещё бесплатный совет - завязывайте со схемами, это - вымирающая тема.Любой HDL пользуйте. VHDL - он построже, но в нём писанины больше. Verilog - лаконичнее, но есть возможность "выстрелить себе в ногу" по неопытности.
|
|
|
|
|
Apr 28 2016, 08:27
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 19-10-15
Пользователь №: 88 917

|
Цитата(Bad0512 @ Apr 28 2016, 08:10)  Судя по отчёту у вас возможно где-то gated clock используется. Ну и 4 уровня логики для 200МГц многовато - лучше распилить с помощью промежуточных триггеров. И ещё бесплатный совет - завязывайте со схемами, это - вымирающая тема.Любой HDL пользуйте. VHDL - он построже, но в нём писанины больше. Verilog - лаконичнее, но есть возможность "выстрелить себе в ногу" по неопытности. Не...я пока на VHDL. Чуть позже для кругозора Verilog и SystemVerilog. Просто мне непонятно пока, что тема с временами. Взял чужой проект, который я заранее знал, что имеет ошибки с распостранениями сигнала и хочу посмотреть какую информацию можно узнать из отчетов об ошибках и как ее использовать. Т.е. высокий уровень логики лечиться применением конвееров. Где-то читал статью, про расчет скорости проекта, что она состоит из разных состовляющих и одна из них задержка на самый длинный путь комбинированной логики от одного тригера до другого (при условии одной частоты) и там говорилось, что логику следует разбивать (разумно) последовательной схемой. Ладно вопрос опять новичка.....на схеме понятно, где логика. А в проекте VHDL, синтезатор сам схему составляет (по идее разработчик должен понимать сам во что вльется код), но тем не менее....Получается по данной тематике лучше про конвейер почитать...? подскажите простой проект, чтобы применить данный подход и посмотреть на каком-то примере результаты с конвейером и без: ?
|
|
|
|
|
Apr 28 2016, 08:49
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(go2winner @ Apr 28 2016, 10:34)  Каков алгоритм действий в таких ситуациях? Решайте проблемы по мере их поступления. Конкретно меня смущает название источника клока - XLXN_9945 - что это? Зайдите в Tools->constraints editor и посмотрите, какие ограничения подчеркнуты красным (это то, что используется в качестве тактового сигнала, но реальные значения в ограничениях не прописаны). Вся логика должна быть синхронна, а это либо гэйтед клок (как уже писали), либо вообще какой-то сигнал, не имеющий к тактовому отношения. Теперь к клоку назначения - Inv_100 - классический переход сигнала от одного тактового домена в другой, т.е. Ваш сигнал зарождается на частоте XLXN_9945 и поступает в домен, работающей на частоте Inv_100. Вы вообще это планировали (если да, то каким образом реализован переход из одного тактового домена в другой)? to GorbyЦитата При временнОй симуляции (моделировании) схема работает "как настоящая", со всеми аппаратными задержками и проч. УзнАете много нового. За 10 лет практики в области именно fpga ни разу не видел разработчика, который бы занимался симуляцией на уровне выше функционального с пользой для дела (чиста для себя поиграться да, сам gate-моделированием занимался). Для работоспособности достаточно функционального моделирования, правильное описание всех ограничений и отсутствие временных ошибок на анализаторе. ЗЫ go2winner Для понимания процесса прохода сигнала по критическому пути ниже того, что Вы привели должен быть отчет о прохождении сигнала (следующие строчки). Там будет подробная интересная информация. А так на куске отчета видно только, что сигнал идет от триггера до триггера.
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|