Jump to content

    

Kluwer

Участник
  • Content Count

    302
  • Joined

  • Last visited

Everything posted by Kluwer


  1. Можно и это будет работать, но это дико не удобно. Нет, смена разрешения файла ничего не даёт. Хоть .sip, хоть .qsf, хоть что угодно (хотя, ваша мысль про связь .qip и IP-кор интересна: возможно он изначально мой .qip рассматривает как результат работы мегавизарда, а стандартной шапки в коде модуля не находит и ему малость плохеет). Изменение имени - да, как MaratZuev выше предлагал, но по мне это дико не удобно. Кроме того, ещё одна проблема есть, не стал сразу в первом сообщение писать. Вот, например, вы перегенерили графический символ для блока Module1 (Module1.bsf) и хотите его обновить. Причём, хотелось бы это сделать из меню "Update Symbol or Block ...". Но, даже если вы любитель всё руками делать (один удалить, второй вставить, inst руками поменять) он должен быть прицеплен к проекту. Для этого его нужно прицепить к проекту через тот же скриптовик (.qip, ну или, пожалуйста, с другим расширением). Если вы его цепляете как set_global_assignment -name "BSF_FILE" [file join $::quartus(qip_path) "Module1.bsf"] то при щелчке на графическом элементе в схем ещё и он будет в списке выдаваться! Т.е помимо "Module1.sv" и "Module1.qip" он вам любезно ещё и Module1.bsf" предолжит :( А если его вообще не прописывать, или прописать как "прочий" файл set_global_assignment -name "MISC_FILE" [file join $::quartus(qip_path) "Module1.bsf"] то тут вообще какой-то вынос мозга начнётся, потому что Квартус, в зависимости от ваших действий (например, вы файл вообще из другого проекта открыли в другом каталоге) переодически вообще перестаёт графический символ видеть. Проблему полностью решает, как ни странно, прописывание абсолютных путей. Но при работе командой (разбросанной в нескольких странах, тем более) за абсолютные пути расстреливать надо. А прописывание относительных путей, типа set_global_assignment -name SEARCH_PATH [file join $::quartus(qip_path) "." ] помогает Квартусу всё что надо видеть во время сборки (вот при сборке и сразу после неё, странное дело, он всё прекрасно находит, если пути поиска прописаны). Но стоит даже во вне Квартуса (!!!) открыть какой-то каталог другой, Квартус моментально перестаёт видеть графические символы. Короче, заколдованный круг какой-то: либо каждый раз список из трёх файлов, либо постоянный геморр с путями :(
  2. Да, оказалось всё ещё проще: в Квартусе уже есть подгруженный Tk. Подгружается к скрипту командой "package require Tk <версия>". В подкаталоге \quartus\bin<32 или 64>\tk<версия>\demos уже лежат готовые примеры. Например, hello (почему-то без расширения, я добавил для удобства .tcl). После этого в той же "Систем консоли", wish'е, или в рукопашную из DOS-строки "quartus_sh ..." запускаем, получаем такую картинку. Там есть более навароченная версия widget, она демонстрирует работу вообще со всеми доступными управлениями (менюшки, списки и т.д.). Но у меня она работает частично, как всегда начинается рубилово с путями (скрипт умудряется не найти каталог из которого его запустили :( ) В общем, первый шаг сделан, направление понятно, буду копать дальше.
  3. Попробуйте опцию "default_nettype" поставить в "none".
  4. Ну, например, сейчас над одним проектом работает сразу три плисовода, в т.ч. и я. У меня большой модуль, к-рый ведёт обработку сигналов и обеспечивает передачу данных по сети. Он лежит в отдельном подкаталоге, внутри всё тоже по подкаталогам разложено. Мы пробовали всякие CVS'ы, но переплевались и по старинке, просто кидаем друг другу обновлённые версии своих модулей. Все эти подпроекты, есс-но, подключаются с помощью головных .qip-файлов (а как ещё?), в к-рых всё досконально прописывается. И есть одна большая накрывающая графика, где просто глобально соеденены наши модули. В рез-те, если у меня появилась новая версия, то я просто тупо бросаю один-два файла коллегам и всё. В особо запущенных случаях (например, я что-то глобально переделал в своём подпроекте) архивируется и кидается весь каталог под замену. Но коллеги ни о чём не думает, ибо .qip-файл прописан уже в списке файлов: заменили или добавили то, что я присла и понеслась. Всё удобно и прекрасно работает за исключением вот этой мелочи с запросным окном, к-рая жизнь немного портит.
  5. Ну смотрите. Я сделал модуль на HDL, условно Module1.sv сгенерил по нему графику. Оба файла подключаю к проекту с помощью .qip-файла, в к-ром пишу, типа: set_global_assignment -name "SYSTEMVERILOG_FILE" [file join $::quartus(qip_path) "Module1.sv" ] set_global_assignment -name "MISC_FILE" [file join $::quartus(qip_path) "Module1.bsf"] Далее вставляю графический символ Module1 в некий .bdf-файл верхнего уровня. Всё замечательно. Теперь, мне понадобилось отредактировать Module1. Я щёлкаю два раза (ну или вываливаю меню "Open design file") по графическому символу, но вместо того, что бы просто открыть мне Module1.sv в редакторе, он мне сначала вываливает окно "Что вы хотите открыть Module1.sv или Module1.qip?". Вот можно как-то Квартусу объяснить, что бы он по умолчанию открывал именно HDL-код, не задавая вопросов?
  6. А зачем вам это всё, да ещё крепко заточенное под "Латтайс"? Берёте любой подходящий тулбокс, коих тучи, для задания и обучения НС (да хоть тот же Матлабовский), задаёте кол-во слоёв и "нейронов", обучаете, получаете коэффициенты. Дальше слепить НС с любым кол-вом слоёв руками - как два пальца обсасать, лишь бы влезло по скорости и ёмкости. В чём проблема-то? P.S. И, кстати, если у вас задача распознования лиц на изображении, то она гораздо эффективнее и проще решается без идиотских "нейронных сеточек". Например, тот же метод Виолы-Джонса.
  7. Если честно, никогда не мог понять ценности подобных опросов. На вкус и цвет ... как известно. Разве только очередной пустопорожний холивар устроить на тему "настоящие плисоводы пишут ручками или рисуют в графике". Пустое ...
  8. RTL-код перестал вдруг портироваться на асики? Really, Elon Mask?!
  9. Коллеги, а никто не знает какого-нибудь кастомного препроцессора, к-рый бы переводил несинтезируемые конструкции в синтезируемые? Поясню мысль. Например, вам просто хочется сгенерировать меандр длиной N импульсов, и частотой в 5 раз меньше тактовой. Какие варианты? Первый: написать руками на 2х счётчиках - не бог весть как сложно, но, блин, сколько ж можно. Второй: использовать готовый модуль, написанный на стороне, или заложенный, например, в Квартусовские шаблоны. Свои плюсы и минусы. А третий - просто написать repeat (N) #5 a = !a; - но это не синтезируемая конструкция. Но, в обычном программинге сплошь и рядом сейчас используются пользовательские конструкции. Перед тем, как скормить код компилятору, код прогоняется через "кастомный" препроцессор, к-рый эти конструкции заменяет на понятное компилятору. В нашем случае, заменить это repeat на некий модуль - элементарно. Вот, ну наверняка же есть уже что-то (полу)готовое?
  10. Коллега, я извиняюсь, но мой пост был не с целью обсудить "выгоду". Я просто написал, что существует такой способ, точка. И хотелось бы понять есть ли какие-то инструменты для реализации данного способа. Если у вас есть что на примете - буду благодарен, а обсуждать "да зачем оно нужно..." я не намерен.
  11. Спасибо, что хоть кто-то ответил :) Leka, я так понимаю, один из форумчан?
  12. А кто мешал вам, простите, параметры прямо в корке менять? Корка чем и хороша, что она генерит, в т.ч. на указанном вами языке "шапку". Копируйте эту шапку себе в проект и параметризуйте как вам угодно. Вот, например, подмодуль стэка с переменной глубиной и разрядностью, первоначально сгенерённый в gui мегавизарда module FIFO_template #( parameter WIDTH_U = 14, parameter WIDTH_D = 16 ) ( input aclr, input clock, input [(WIDTH_D-1):0] data, input rdreq, input wrreq, // ----------------------------------- output [(WIDTH_D-1):0] q, output [(WIDTH_U-1):0] usedw ); scfifo scfifo_component (.aclr (aclr), .clock (clock), .data (data), .rdreq (rdreq), .wrreq (wrreq), .usedw (usedw), .q (q), .almost_empty (), .almost_full (), .empty (), .full (), .sclr ()); defparam scfifo_component.add_ram_output_register = "OFF", scfifo_component.intended_device_family = "Stratix III", scfifo_component.lpm_numwords = 2**WIDTH_U, scfifo_component.lpm_showahead = "OFF", scfifo_component.lpm_type = "scfifo", scfifo_component.lpm_width = WIDTH_D, scfifo_component.lpm_widthu = WIDTH_U, scfifo_component.overflow_checking = "ON", scfifo_component.underflow_checking = "ON", scfifo_component.use_eab = "ON"; endmodule
  13. За "молодёжь", спасибо за комплимент, но увы :( 20 лет уже плисоводством занимаюсь и на Альтере и на Ксайлинксе и даже других вендоров успел попробовать. Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект. А с семейства на семейство, например, в новых версиях Квартуса вообще автоматически происходит апдейт всех кор, проблем практически не возникает. Всю свою карьеру даже для элементарных вещей (типа сумматоров, счётчиков или постоянных) генерю корки - всё прекрасно работает. А рядом тут как раз работает любитель "да всё надо писать руками, мы уже 15 лет ... и никаких проблем". Ага, только сейчас товарищч впервые в жизни столкнулся реально с высокими клоками, натанцевался, наползался по кристаллу в "Чип Планере", увидел как у меня то же самое с мегафункциями взлетает на раз и ... сдулся: "да, наверное, ты был прав ..." :)) Но, в прочем, никому не навязываю - каждый ходит по своим граблям.
  14. Никогда не мог понять желание всё подряд писать руками и обвешивать атрибутами синтеза, к-рые, на самом деле синтезатор Квартуса игнорит только в путь. Для таких задач специально сделаны удобные и вылизанные IP-коры или мегафункции. Всё можно настроить как из удобного gui, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать?
  15. В окне "Tasks" есть кнопка "Customize...". С помощью неё делаете на базе одного из существующих наборов нужный вам и сохраняете под вменяемым именем. При пересборке проекта просто выбираете его в списке "Flow" окна "Task".
  16. Кстати, вспомнил название этого процесса: quartus_map.exe. Он, причём, показывается в Task Manager'е не как дочерний от Квартуса и мегавизарда, а там запускается отдельная Джава-машина и от неё наследует этот процесс. Нужно дождаться, когда он покажет нулевую загрузку процессора и прибить его. А вот если вы при генерации корки поставите флажок "генерить список цепей для сторонней EDA", то там запустится ещё и процесс quartus_eda.exe, точно так же повиснет, но его таким же способом не перезапустить. Так что тому, кому нужно генерить список цепей для каих-то сторонних САПР сочувствую.
  17. Вы просто не понимаете, что такое DSP builder.
  18. Совершенно аналогичная штука - это DSPbuilder для Моделсима. И да, уже много лет её использую для разработки блоков обработки сигналов под ПЛИСины. Причём, это реально удобно, если, например, сравнивать с моделированием в том же Modelsime/Questasim'е. Преимущества: 1) графическое представление для человека завсегда удобнее "сухого" кода; 2) нативная интеграция с Матлабом (тут же можно вручную или с помощью скриптов сопоставить результат моделирования с теоретическим, расчитать всякие хар-ки, типа, статистик, спектров и т.д.); 3) простота замены блоков/смены параметров, импорта внешнего кода, матлабовских скриптов, короче юзер-френдли среда. Но есть и недостатки: 1) графика даже относительно небольших блоков может легко не вместиться даже в 2 экрана; 2) очень медленно (Матлаб всё-таки). У меня, например, сжатие на базе альтеровских БПФ на длине 3х-4х-зондирований - уснуть можно; 3) довольно неудобное отображением цифровых данных; 4) сложно документировать и передавать такой проект: DSPbuilder генерит громоздкий и слабочитаемый код. Руками этот код сопровождать сложно, а разрабов, владеющих Матлабом/Симулинком, мягко говоря, не много; 5) моделировать реально только куски (пусть и важные). Загнать туда реально большую систему (например, тракт радиолокатора от ацп до MTI-фильтров хотя бы - а это не так и много) - не реально. Если вы даже её и нарисуете и по-блочно отладите, то потом умрёте ждать рез-ов моделирования. Уже проще в живом железе собрать. Вот какие-то такие у меня впечатления от подобных штучек.
  19. Во-первых, не лоджиклок, ни фиксация партиции в положении "post-fit" не гарантирует вам непереразводки вашего модуля: как только вам нужно провести доп.верёвки к вашему модулю (хотя бы к тому же STP или MCE), он может изменить раскладку до полной неузнаваемости. Но, лоджиклок всё-таки, по нашей практике, более полезен, тем более, когда у вас такая невменяемая частота клока. Собственный пример: у нас с АЦП идёт ddr-сигнал, частота клока 240, но, т.к. ddr, то, де-факто 480. Дальше - квадратурный 2-ступенчатый детектор, что бы как можно быстрее понизить клок. Ежу понятно, что нужно ставить всю схему как можно ближе к выходам ddr-регистров. Нифига! Даже если умышленно прописать Квартусу завышенную частота на ацп'шном клоке (даже 300 ставили), он упорно лепит всю схему в центр кристалла. Пока она одна - никаких слаков. Как только включаем весь проект (а там ещё есть скоростные блоки, несколько ацп и т.д.). Всё летит к чертям. И вот пока вручную детектор не прижали лоджиклоком к краю плисины с запретом разводить в этом регионе что-либо ещё, ничего не получалось. Возможно и вам так надо.
  20. Коллеги, часто вывожу всякие диагностические сообщения из кода функциями типа $display. Но проблема в том, что он их закидывает всех в окно варнингов, где итак туча сообщений. Можно, конечно, на подобные сообщения накинуть флаги, но как-то это всё не технологично. Но, где-то читал, что у Квартуса есть команда создать пользовательское окно и назначить нужные сообщения туда, но не могу найти в help'е инфу по этому поводу. Может, кто знает?
  21. Там надо войти Task Manager (по Ctrl-Alt-Del) и прибить один из процессов, к-рый Виззард создаёт. У нас такая же фигня была с FFT'шной корой. Там бужет видно, один из дочерних процессов мегавизарда работает, потом у него в графе "загрузка процессора" падает до нуля и дальше ничего не происходит неограниченно долго. Вот этот подпроцесс надо прибить, мегавиззард его создаст вновь и успешно сгенерит вам всё.
  22. Что значит "переучиваться"? Знания никакие лишние не бывают. Иметь представление, безусловно, нужно. Какие-то задачи эти "сеточки" всё ж таки криво-коряво, но решают. Они осмысленны там, где задача ну практически никакой формализации не поддаётся. Как раз яркие примеры - это распознование изображений, звука и т.д. Как только задача допускает такую формализацию и, тем более, позволяет получить более-менее вменяемое решение (пусть и в квадратурах, например), то все ваши эти "диииип лёнинги" и прочие игрушки сразу пролетают. А к таким задачам как раз и относятся задачи радиолокации, гидроакустики и цифровой связи. Уже, можно сказать, ставший классическим пример. Одна из крупных конференций по этим делам в РФ. Секция радиолокации. В радиолокации, благодаря бурному развитию оной в 50-60-х с привлечением туда в т.ч. крупных математиков и базируясь на ранее не плохо развитой теории веороятности и статистики, удалось получить математические решение во многих практически интересных задачах. Но каждый год на эту конференцию обязательно приезжают пару-тройку восторженных мальчиков, к-рые рассказывают как они тут успешно применили очередную нейронную сеточку для обнаружения сигнала. И каждый такой докладик заканчивается саркастическим вопросом из зала типа: "ну и что ваша сетка показала? То, что в той ж ситуации, где МАП-обнаружителю нужно ОСШ столько-то Дб, вашей сетке нужно на 15дБ больше? (дружный хохот в зале)" :)
  23. Добрый день, коллеги! Возникла необходимость поиска софтовых моделей альтеровских мегафункций. Условно, задача в том, что заказчику поставляется некая платформа на ПЛИС и, вместе с бинарником прошивки заказчик хочет иметь программную bit-accurate модель DSP-части прошивки. Проблема в том, что на Альтере ничего кроме моделей для сред моделирования типа Моделсима и dll-библиотек для DSP Builder'а ничего найти не можем. Но заставлять заказчика ставить даже бесплатный вариант Квартуса с Моделсимом - не приемлимо. Можно, кончено, скомпилировать в Матлабе отдельный софт с этими моделями, но это всё очень медленно работать будет. Может, кто чего подскажет?
  24. Ну, приходите ко мне на лекции, тем более в СПб живёте, я вам расскажу про Френелевские, Фраунгоферовские, "дальние" и "ближние" зоны. Как раз читаю эти темы третьекурсникам :) Ибо то, что вы написали - это, простите, какие-то ваши внутренние представления, с учебниками по электродинамике и распространению радиоволн они как-то вообще никаки не стыкуются :)
  25. Из этой статьи, я так понял, что модель работает на частотах от 20МГц. Если речь идёт о 20МГц, то длина волны около 15м. Соотвественно, для антенны, работающей на такой длине волны, "ближняя" (френелевская) зона может простираться на десятки метров, поэтому, вероятно, авторы и подстраховались километром.