Jump to content

    

TABKP

Участник
  • Content Count

    24
  • Joined

  • Last visited

Everything posted by TABKP


  1. Коллеги, прошу помощи. Создал несколько проектов в XPS, а небольшие модули из ISE цеплял как периферию. И хорошо все работало. А теперь встала необходимость сделать ISE проект головным, а в него уже добавить проц. Есть готовый проект в ISE. Создаю новый компонент Embedded Processor. Запускается XPS. Как обычно собираю процессор. Запускаю Generate Netlist. И он вываливается мне с ошибкой: "Error: NgdBuild:25 - Cannot both read and write file. Далее путь к Ngc файлу проца в папке implementation. Please specify a file other than the destanation NGD file as the top level input design file." Ну думаю ладно - ISE сам наверно скомпилит проц. Запускаю Export Hardware Design to SDK. Создаю пустой c++ проект. И в процессе формирования своих рабочих папок и файлов выдаются сообщения вида: unable to rename '../../../lib/libxil.a' reason: Device or resource busy. И действительно файл libxil.a НЕ создается, а без него в процессе компиляции проекта выдаются ошибки на все функции описанные в стандартных библиотеках, хоть все эти библиотеки и подключены. Прям засада какая-то. Что я не правильно делаю? Что упустил?
  2. Создал небольшой проект на VHDL. В нем есть DCM. Надо создать из него свое пользовательское ядро и подключить к Microblaze. При импорте проекта VHDL файлы указываем, ngc файлы IP ядер указываем, но как быть с DCM? У него есть только XAW файл и VHDL. В VHDL файле прописан компонент DCM_ADV, но где брать его ngc файл не ясно. К Microblaze вообще можно внешний DCM подключить или надо только его генератором пользоваться?
  3. Mad_max большое Вам спасибо. Помогло. З.Ы. а malloc я так и не победил. Даже проект создал пустой, в котором один malloc и был.
  4. ISE 12.2 Я знаю что heap размером всего 1кб по умолчанию. Это не принципиально - я и 10 байт для пробы пытался зарезервировать - тот же результат, возвращает ноль. Массив объявлен в начале main вместе с другими переменными. void main() { .......... объявление переменных u8 *DataBuf; DataBuf = (u8 *)malloc(1500 * sizeof(u8)); .......... тело программы } Ладно, пусть malloc не работает. Переживу. Почему он не дает просто линейный массив создать? Где ему прописать в линкере это?
  5. Да я честно говоря не знаю как линкскрипты писать. Все настройки по умолчанию стоят. Попытался использовать динамическое выделение памяти: u8 *DataBuf; DataBuf = (u8 *)malloc(1500 * sizeof(u8)); if(DataBuf == NULL) XGpio_DiscreteSet(&Gpio0, GPIO_0_CHANNEL1, 0x07); память не выделилась. Указатель нулевой возвращается. Да чтож такое. Нет в жизни счастья! Видимо линкскрипт в этом окне надо править. Вопрос что и где?
  6. ПЛИС Virtex 4 XC4VLX80. Создал процессор. Память BRAM используется для команд и данных. Объем 64К. Написал маленькую программу. Отладил. Работает. В программе используются два массива данных. Встала необходимость увеличить их размер до 1,5 кбайт каждый. В результате программа перестала работать - она даже не стартует. Если уменьшить размер массивов в половину - работает. Увеличил объем используемой BRAM до 128К - не изменилось НИЧЕГО. Такое ощущение, что ему не памяти не хватает, а где-то прописано ограничение на длину последовательно размещаемых данных в памяти. Как побороть проблему? Инициализация: u8 DataBuf1[1500]; u8 DataBuf2[1500];
  7. Если да, то прошу дать номер. Спасибо
  8. Нету в сгенеренном PlanAhead UCF файле таких констрейнов. Может где галку в настройках PlanAhead ставить надо?
  9. Есть ответственный высокочастотный модуль, который вставляется в большой проект в ISE. С этим модулем постоянно происходят Timing Errors при малейшем изменениии остальной части проекта. Чтобы при каждом изменении проекта не заниматься борьбой с Timing Errors хочу раз и навсегда зафиксировать положение этого модуля ка кристалле. Что сделано: в PlanAhead для этого модуля создан Pblock, а также этот модуль отмечен как Partition. PlanAhead скомпилировал и разложил этот модуль без ошибок. Теперь главный вопрос - как импортировать этот модуль и его разводку обратно в ISE проект?
  10. Так в том то и дело, что и в ucf файле топология не прописана. Там собраны временные констрены, размер Pblock-а и его состав. Все. Добавив содержимое ucf файла в головной ucf - макрос-то раскладывается естественно в границах Pblock-a, но те так как это было сделано в PlanAhead.
  11. Да сейчас добился нормального размещения в PlanAhead. Но проект только в начале, а уже сейчас добавление любого модуля приводит к появлению ошибок. Не хочу заниматься шаманством на каждой компиляции. ucf файл просто скопировал в папку проекта. Никак его не использую.
  12. Продолжу монолог. После задания Pblock и Partition на нужный модуль я сделал Export IP. В настройках экспорта указал Physical constraints, галку fixed placement only не ставил. Получил файлы edn и ucf на нужный модуль. Далее последовательно порпустил edn файл через программы EDIF2NGD NGD2SPL и SPL2SYM и получил SYM файл. Поскольку головной файл проекта у меня в схематике сделан. Далее скопировал все полученные файлы в рабочую папку проекта. Добавил в проект edn файл. Вставил SYM файл в схему. Все нормально откомпилировалось. Без ошибок. Глянул в FPGA editor как разложился проект на кристале и ....... проект опять раскидан по всему кристалу. Как будто и не создавал я Pblock и Partition. В чем дело? Что я не правильно делаю? Как мне раз и на всегда зафиксировать на кристалле ответственный высокоскоростной модуль? Я осознаю, что для гуру - все эти вопросы на уровне ликбеза, но я бьюсь уже третий день. Не проходите мимо.
  13. В UCF файле появился только констрейм AREA_GROUP, который относится к Pblock. А как с partition то быть. Мне надо чтобы модуль на 400МГц стал черным ящиком с неизменным размещением примитивов на кристалле. Кстати при попытке скомпилировать в ISE тот же проект с новым UCF (добавлен только AREA_GROUP) - ISE выдал что недостаточно ресурсов, в то время как Planahead нормально развел. Чудеса.
  14. Так и не понимаю как сформированный partition из PlanAhead вставить обратно в ISE проект
  15. Разобрался. В настройках компилятора в ISE надо галку поставить keep hierarchy. Создал один единственный компонент внутрь которого запихнул все, что связано с 400МГц. Pblock создал. Плохо что нельзя его создавать произвольным по форме - у меня почти все DSP48 использованы, поэтому блок получился длиной почти на вест кристал. После имплемента получил запас по setup 32пС. Затем этот же модуль назначил как partition. Снова сдела имплемент - и получил запас по setup равным 0. Это почему так? Ну да ладно. Нажал remote partitions. Вроде как должен был создаться компонент для вставки в свой проект, но я так и не понял где он и как его вставить в общий проект. Подскажите!
  16. Продолжим. Ошибки побеждены. Минимальный запас по setup есть. Посмотрел как 400МГц часть разложилась на кристалл - схема раскинулась аж на пол кристалла. Есть желание сделать 2 вещи: 1) создать Pblock и указать чтобы вся 400МГц часть располагалась в этом блоке 2) создать partition с 400МГц частью, чтобы раз и навсегда отладить этот кусок и не зависеть от того как будет написана остальная часть проекта Читаю мануал к PlanAhead. Прочитал Hierarchical_Design_Methodology_Guide и PlanAhead_Tutorial_Design_Preservation. Да, и видео посмотрел с оф. сайта. Вроде все просто, но применить эти знания не могу. Не могу понять как выделить нужные компоненты проекта для создания partition - если коры идут отдельным списком, то компоненты написанные мной на VHDL автоматичеки разбиваются на примитивы. Нужно все примитивы компонента выискивать?
  17. Копаю дальше проект. Изменив алгоритм и упростив все что можно сократил ошибки до 3-ех. Timing Score уменьшился до 136. Уровни логики 9. Количество проблемных путей по анализатору равно 9. Замена чипа на 12-ый полностью устраняет ошибки. Все бы хорошо, да помимо куска проекта на 400МГц, есть еще огромный кусок на значительно более низких частотах. И его еще дорабатывать сильно надо, но при добавлении чего-либо в него, количество ошибок снова растет. Добавлю - проекты на столь больших частотах мне не встречались. Зачастую не требовалось вообще констрейны использовать. Так что прошу извинить за серость, но многих советов я не понимаю. Теперь по порядку: Не знаю что такое retiming. Где он включается? Осознаю, что добавление триггеров увеличивает скорость работы. Но как их добавить? В ручную через FPGAEditor? "Мультицикловые констрейны и те, которые можно сунуть в игнор" - можно для чайника рассказать что это? smartexplorer - как его запустить? Результаты обработки идут далее в низкочастотную часть проекта Данные идут в режиме DDR, поэтому обработка на 400МГц должна быть.
  18. Распараллелил и упростил все что можно. Количество ошибок сократилось с 800 до 60, сейчас timing score около 11000. Судя по анализу в местах где есть ошибки Levels of Logic колеблется 9-11. Ситуация не улучшилась - проект по прежнему работает не стабильно. При включении питания проект может или сразу нормально работать, или не работать совсем. Да к тому же исправление одних ошибок приводит к появлению других - замкнутый круг. Может надо руками проект на кристалл как-то раскладывать? Не умею я этого, увы.
  19. Задача в общих чертах выглядит так. Есть FPGA Virtex4 11 speed grade. К ней подключен АЦП. С АЦП данные идут на частоте 200МГц (CLK1) и попадают в FIFO. Вся логика дальнейшей обработки данных тактируется внешним генератором 400МГц (CLK2). Так вот по CLK2 при компиляции и фиксируются множественые Timing Errors. В UCF файле на тактовую цепь есть запись NET "CLK" TNM_NET = "CLK"; TIMESPEC "TS_CLK" = PERIOD "CLK" 2.5 ns HIGH 50%; Ошибки не исчезают. И логика обработки данных работает не стабильно, хотя в симуляторе все проверено и отлажено. Возможно ли победить данную проблему и какие пути решения существуют без замены ПЛИС.
  20. Казалось бы все просто. При чтении данных из FSL при установленном control бите командой get в регистре MSR флаг FSL Error устанавливается в 1, а при чтении командой cget этот же флаг устанавливается в 0. И в SDK даже команда специальная есть для проверки этого флага - fsl_iserror. Написал простейший код: принимаем данные по FSL, если control бит установлен - гасим светодиод, не установлен - зажигаем. Так вот переменная flag никогда не становится равной 1, не зависимо от того был установлен control бит или нет. u32 TempFSLData; u16 flag; getfslx(TempFSLData,0,FSL_NONBLOCKING); fsl_iserror(flag); if ( flag == 1) XGpio_DiscreteClear(&Gpio, GPIO_CHANNEL, 0x03); else XGpio_DiscreteSet(&Gpio, GPIO_CHANNEL, 0x03); Тогда я пошел дальше и начал читать непосредственно бит FSL Error в регистре MSR. И результат еще более интересный - пока control бит не установлен, не устанавливается и FSL Error, как только установили control бит первый раз в 1, то и FSL Error устанавливается в 1. И после этого в 0 никогда не возвращается не за висимо от значения control бита. getfslx(TempFSLData,0,FSL_NONBLOCKING); flag=mfmsr( ); if ( (flag & 0x0010) == 0x0010) XGpio_DiscreteClear(&Gpio, GPIO_CHANNEL, 0x03); else XGpio_DiscreteSet(&Gpio, GPIO_CHANNEL, 0x03); Вот такие чудеса. Что я не правильно делаю? Камрады, покажите как правильно нужно использовать control бит
  21. Интересует ближний диапазон 200-400нМ. Ну и чем мощнее тем лучше. Есть ли какие-нибудь другие изучатели УФ кроме ламп? Не хотелось бы с чем-либо бьющимся связываться. Но если на большую мощность только лампы делают, то готов и их рассматривать. Какие порекомендуете? Заранее спасибо.
  22. Благодарю и прошу прощения за задержку с ответом. Свой мини проект я победил. Достаточно было убрать ibuf с одной из цепей и все заработало стабильно. Временных ошибок не было - это проверил в первую очередь. Клоков в проекте действительно несколько, но весь проект синхронный. В UCF файле на каждую клоковую цепь стояла запись вида NET xxx PERIOD=19.56ns HIGH 50%. Обычно этого хватало. А здесь видимо сказывалось соотношение фаз клоков. Крупный проект с моим куском тоже работает, но правда на 20-30 раз включения питания работает не стабильно. В самом проекте разных клоков еще больше и влияние рассогласования их фаз сильнее. Поэтому сижу читаю мануал Xilinx Timing Constraints User Guide. Надо хорошенько разобраться.
  23. Исходные данные: - ПЛИС Xilinx Virtex4, среда ISE 12.2 - мини проект состоит из 8-ми больших FIR - фильтров и небольшой программы на vhdl по обработке выходных данных фильтров. Фильтры занимают процентов так 70 ресурсов ПЛИС. - работоспособность этого мини проекта полностью проверена в моделсиме - непосредственно при загрузке в ПЛИС этот проект не заработал. При помощи логического анализатора и многократного переписывания кода (код изначально без ошибок - просто разными способами одно и тоже делается) удалось добиться стабильной правильной работы мини проекта. Суть проблемы: - при установке моего проекта в более крупный проект - он опять перестает работать - более того - часть сигналов выведены на контрольные контакты платы и при удалении любого из этих сигналов из проекта с последующей перекомпиляцией - проект снова перестает работать. - при отладке есть ощущение что ходишь по кругу - исправишь что-то в одном куске коде, перестает правильно работать другой кусок - и так до бесконечности Подозреваю что все это результат неких "гонок" сигналов, каких-то проблем синхронизации и пр. в результате значительного заполнения ресурсов ПЛИС. Код полностью работоспособен, ибо при уменьшении количества фильтров проект начинает стабильно работать. Вопросы к форумчанам: 1. Из-за чего возможно такое поведение проекта 2. Возможно ли победить данную проблему путем настроек компилятора 3. Возможно ли сохранить конфигурацию аппаратных средств ПЛИС после единственной работоспособной компиляции проекта и вставить ее уже в более крупный проект.