Jump to content

    

Kluwer

Участник
  • Content Count

    270
  • Joined

  • Last visited

Everything posted by Kluwer


  1. RTL-код перестал вдруг портироваться на асики? Really, Elon Mask?!
  2. Коллеги, а никто не знает какого-нибудь кастомного препроцессора, к-рый бы переводил несинтезируемые конструкции в синтезируемые? Поясню мысль. Например, вам просто хочется сгенерировать меандр длиной N импульсов, и частотой в 5 раз меньше тактовой. Какие варианты? Первый: написать руками на 2х счётчиках - не бог весть как сложно, но, блин, сколько ж можно. Второй: использовать готовый модуль, написанный на стороне, или заложенный, например, в Квартусовские шаблоны. Свои плюсы и минусы. А третий - просто написать repeat (N) #5 a = !a; - но это не синтезируемая конструкция. Но, в обычном программинге сплошь и рядом сейчас используются пользовательские конструкции. Перед тем, как скормить код компилятору, код прогоняется через "кастомный" препроцессор, к-рый эти конструкции заменяет на понятное компилятору. В нашем случае, заменить это repeat на некий модуль - элементарно. Вот, ну наверняка же есть уже что-то (полу)готовое?
  3. Коллега, я извиняюсь, но мой пост был не с целью обсудить "выгоду". Я просто написал, что существует такой способ, точка. И хотелось бы понять есть ли какие-то инструменты для реализации данного способа. Если у вас есть что на примете - буду благодарен, а обсуждать "да зачем оно нужно..." я не намерен.
  4. Спасибо, что хоть кто-то ответил :) Leka, я так понимаю, один из форумчан?
  5. А кто мешал вам, простите, параметры прямо в корке менять? Корка чем и хороша, что она генерит, в т.ч. на указанном вами языке "шапку". Копируйте эту шапку себе в проект и параметризуйте как вам угодно. Вот, например, подмодуль стэка с переменной глубиной и разрядностью, первоначально сгенерённый в 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
  6. За "молодёжь", спасибо за комплимент, но увы :( 20 лет уже плисоводством занимаюсь и на Альтере и на Ксайлинксе и даже других вендоров успел попробовать. Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект. А с семейства на семейство, например, в новых версиях Квартуса вообще автоматически происходит апдейт всех кор, проблем практически не возникает. Всю свою карьеру даже для элементарных вещей (типа сумматоров, счётчиков или постоянных) генерю корки - всё прекрасно работает. А рядом тут как раз работает любитель "да всё надо писать руками, мы уже 15 лет ... и никаких проблем". Ага, только сейчас товарищч впервые в жизни столкнулся реально с высокими клоками, натанцевался, наползался по кристаллу в "Чип Планере", увидел как у меня то же самое с мегафункциями взлетает на раз и ... сдулся: "да, наверное, ты был прав ..." :)) Но, в прочем, никому не навязываю - каждый ходит по своим граблям.
  7. Никогда не мог понять желание всё подряд писать руками и обвешивать атрибутами синтеза, к-рые, на самом деле синтезатор Квартуса игнорит только в путь. Для таких задач специально сделаны удобные и вылизанные IP-коры или мегафункции. Всё можно настроить как из удобного gui, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать?
  8. В окне "Tasks" есть кнопка "Customize...". С помощью неё делаете на базе одного из существующих наборов нужный вам и сохраняете под вменяемым именем. При пересборке проекта просто выбираете его в списке "Flow" окна "Task".
  9. Кстати, вспомнил название этого процесса: quartus_map.exe. Он, причём, показывается в Task Manager'е не как дочерний от Квартуса и мегавизарда, а там запускается отдельная Джава-машина и от неё наследует этот процесс. Нужно дождаться, когда он покажет нулевую загрузку процессора и прибить его. А вот если вы при генерации корки поставите флажок "генерить список цепей для сторонней EDA", то там запустится ещё и процесс quartus_eda.exe, точно так же повиснет, но его таким же способом не перезапустить. Так что тому, кому нужно генерить список цепей для каих-то сторонних САПР сочувствую.
  10. Вы просто не понимаете, что такое DSP builder.
  11. Совершенно аналогичная штука - это DSPbuilder для Моделсима. И да, уже много лет её использую для разработки блоков обработки сигналов под ПЛИСины. Причём, это реально удобно, если, например, сравнивать с моделированием в том же Modelsime/Questasim'е. Преимущества: 1) графическое представление для человека завсегда удобнее "сухого" кода; 2) нативная интеграция с Матлабом (тут же можно вручную или с помощью скриптов сопоставить результат моделирования с теоретическим, расчитать всякие хар-ки, типа, статистик, спектров и т.д.); 3) простота замены блоков/смены параметров, импорта внешнего кода, матлабовских скриптов, короче юзер-френдли среда. Но есть и недостатки: 1) графика даже относительно небольших блоков может легко не вместиться даже в 2 экрана; 2) очень медленно (Матлаб всё-таки). У меня, например, сжатие на базе альтеровских БПФ на длине 3х-4х-зондирований - уснуть можно; 3) довольно неудобное отображением цифровых данных; 4) сложно документировать и передавать такой проект: DSPbuilder генерит громоздкий и слабочитаемый код. Руками этот код сопровождать сложно, а разрабов, владеющих Матлабом/Симулинком, мягко говоря, не много; 5) моделировать реально только куски (пусть и важные). Загнать туда реально большую систему (например, тракт радиолокатора от ацп до MTI-фильтров хотя бы - а это не так и много) - не реально. Если вы даже её и нарисуете и по-блочно отладите, то потом умрёте ждать рез-ов моделирования. Уже проще в живом железе собрать. Вот какие-то такие у меня впечатления от подобных штучек.
  12. Во-первых, не лоджиклок, ни фиксация партиции в положении "post-fit" не гарантирует вам непереразводки вашего модуля: как только вам нужно провести доп.верёвки к вашему модулю (хотя бы к тому же STP или MCE), он может изменить раскладку до полной неузнаваемости. Но, лоджиклок всё-таки, по нашей практике, более полезен, тем более, когда у вас такая невменяемая частота клока. Собственный пример: у нас с АЦП идёт ddr-сигнал, частота клока 240, но, т.к. ddr, то, де-факто 480. Дальше - квадратурный 2-ступенчатый детектор, что бы как можно быстрее понизить клок. Ежу понятно, что нужно ставить всю схему как можно ближе к выходам ddr-регистров. Нифига! Даже если умышленно прописать Квартусу завышенную частота на ацп'шном клоке (даже 300 ставили), он упорно лепит всю схему в центр кристалла. Пока она одна - никаких слаков. Как только включаем весь проект (а там ещё есть скоростные блоки, несколько ацп и т.д.). Всё летит к чертям. И вот пока вручную детектор не прижали лоджиклоком к краю плисины с запретом разводить в этом регионе что-либо ещё, ничего не получалось. Возможно и вам так надо.
  13. Коллеги, часто вывожу всякие диагностические сообщения из кода функциями типа $display. Но проблема в том, что он их закидывает всех в окно варнингов, где итак туча сообщений. Можно, конечно, на подобные сообщения накинуть флаги, но как-то это всё не технологично. Но, где-то читал, что у Квартуса есть команда создать пользовательское окно и назначить нужные сообщения туда, но не могу найти в help'е инфу по этому поводу. Может, кто знает?
  14. Там надо войти Task Manager (по Ctrl-Alt-Del) и прибить один из процессов, к-рый Виззард создаёт. У нас такая же фигня была с FFT'шной корой. Там бужет видно, один из дочерних процессов мегавизарда работает, потом у него в графе "загрузка процессора" падает до нуля и дальше ничего не происходит неограниченно долго. Вот этот подпроцесс надо прибить, мегавиззард его создаст вновь и успешно сгенерит вам всё.
  15. Машин лернинг и DSP

    Что значит "переучиваться"? Знания никакие лишние не бывают. Иметь представление, безусловно, нужно. Какие-то задачи эти "сеточки" всё ж таки криво-коряво, но решают. Они осмысленны там, где задача ну практически никакой формализации не поддаётся. Как раз яркие примеры - это распознование изображений, звука и т.д. Как только задача допускает такую формализацию и, тем более, позволяет получить более-менее вменяемое решение (пусть и в квадратурах, например), то все ваши эти "диииип лёнинги" и прочие игрушки сразу пролетают. А к таким задачам как раз и относятся задачи радиолокации, гидроакустики и цифровой связи. Уже, можно сказать, ставший классическим пример. Одна из крупных конференций по этим делам в РФ. Секция радиолокации. В радиолокации, благодаря бурному развитию оной в 50-60-х с привлечением туда в т.ч. крупных математиков и базируясь на ранее не плохо развитой теории веороятности и статистики, удалось получить математические решение во многих практически интересных задачах. Но каждый год на эту конференцию обязательно приезжают пару-тройку восторженных мальчиков, к-рые рассказывают как они тут успешно применили очередную нейронную сеточку для обнаружения сигнала. И каждый такой докладик заканчивается саркастическим вопросом из зала типа: "ну и что ваша сетка показала? То, что в той ж ситуации, где МАП-обнаружителю нужно ОСШ столько-то Дб, вашей сетке нужно на 15дБ больше? (дружный хохот в зале)" :)
  16. Добрый день, коллеги! Возникла необходимость поиска софтовых моделей альтеровских мегафункций. Условно, задача в том, что заказчику поставляется некая платформа на ПЛИС и, вместе с бинарником прошивки заказчик хочет иметь программную bit-accurate модель DSP-части прошивки. Проблема в том, что на Альтере ничего кроме моделей для сред моделирования типа Моделсима и dll-библиотек для DSP Builder'а ничего найти не можем. Но заставлять заказчика ставить даже бесплатный вариант Квартуса с Моделсимом - не приемлимо. Можно, кончено, скомпилировать в Матлабе отдельный софт с этими моделями, но это всё очень медленно работать будет. Может, кто чего подскажет?
  17. Ну, приходите ко мне на лекции, тем более в СПб живёте, я вам расскажу про Френелевские, Фраунгоферовские, "дальние" и "ближние" зоны. Как раз читаю эти темы третьекурсникам :) Ибо то, что вы написали - это, простите, какие-то ваши внутренние представления, с учебниками по электродинамике и распространению радиоволн они как-то вообще никаки не стыкуются :)
  18. Из этой статьи, я так понял, что модель работает на частотах от 20МГц. Если речь идёт о 20МГц, то длина волны около 15м. Соотвественно, для антенны, работающей на такой длине волны, "ближняя" (френелевская) зона может простираться на десятки метров, поэтому, вероятно, авторы и подстраховались километром.
  19. Сравнивать не сравнивал, но c LwIP реально много работал. Мне там нравится, что всё доступно, структурировано и понятно. Нужно свой протокол поднять - пожалуйста, нужно DHCP включить - пожалуйста. Я бы даже сказал, что LwIP-стек - это редкий случай софта, написанного прямыми руками, отлично отдокументированного и где не надо неделями сидеть, распутывая хитросплетения кода какого-нибудь чокнутого перфекциониста, что бы написать простые вещи.
  20. Свою толику добавлю. 2-3 часа для серъёзного проекта для 5го "Стратикса" - это совсем не катастрофа. У нас был проект для 4го "Стратикса", к-рый по 6 часов собирался! Правда, было это уже почти 8 лет назад и компы тогда по-ленивей были. А так, да: 1) более мощный комп (лучше нормальный, а не ноут: ноуты при перегреве часто понижают частоту проца никак об этом не сообщая), важнее число ядер, нежели частота. Мощную КУДовую видеокарту с поддержкой "openCL" тоже не помешает и ssd-диск; во время работы сборщика старатся ему не мешать: повырубать весь навесной софт, желательно даже отрубить сеть. Ну и уж точно на том же компе не стоит смотреть одновременно порнуху в HD-качестве :) 2) настройки проекта (ставить "нормальные усилия"; если не нужно по клокам "тапку в пол", то ставить оптимизацию "баланс" и т.д.); 3) таймквесты старатся использовать в максимально щадящем режиме. Не нужно, например, фильтру, работающему на 200МГц выставлять требования в 300МГц (знаю таких любителей: "а чё? В даташите сказано, что и на 450 должон работать!"); 3) разбиение проекта (создать партишины, поставить всем "пост-фит" и т.д), иногда осмысленен "лоджик-лок" (хотя и не люблю этот инструмент-костыль); также часто имеет смысл 4) кодчекинг. Если есть процессор в системе, или на борту плисины, то всё что можно - пихать в него. Во всяких мегафункциях давать сборщику по-меньше самодеятельности (минимум опций в положении "авто"). Если DSP-мегафункции сразу включать "распихивать по DSP-блокам". Не лениться проверять весь код на наличие всяких глупостей, типа немерянных коммутаторов и прочего мусора.
  21. Коллеги! Работаем сейчас над здоровенным проектом для альтеровской плисины и есс-но всё, что только можно вытащить для внешних настроек через MCE, вытаскивается наружу. Но, в результате в окне MCE уже просто каша из различных параметров и массивов. Хотелось бы научится ваять собственный софт, что бы мимо MCE подключатся к jtag-серверу и закачивать/выкачивать выбранные параметры и представлять их в удобном нам виде. Вот никто не сталкивался с такой задачей или, хотя бы, может указать направление поиска информации?
  22. Спасибо, но, к сожалению, это пример с НИОСом. Нам нужно без софтовых процессоров.
  23. А разработчиков аналогового фронт-энда нельзя там пнуть? Типа, ребята, перенесити промежуток на 60МГц, или, например, на 300? И корректирующий фильтр такого невменяемого порядка (180!!) рельно осмысленно ставить? Не проще на обычных КИХ-фильтрах со ступенчатым понижением частоты давить?
  24. Коллега, Иосиф прав абсолютно, если у вас шина (а не один бит), то тут никакая абсолютно асинхронщина не допустима. Я даже не буду объяснять почему, полно лит-ру по этому вопросу. Причём, если у вас переход шин, то варианта, по-сути, только два: а) навороченный автомат в стиле связнЫх протоколов (а в реальности вы, скорее всего, по-просту поставити стэк (Фифошку); б) жёсткая завязка клоков на ФАПЧе (PLL). В вашем случае, чтения потоковых отсчётов с ацп, скорее всего, вообще только второй вариант доступен. Соотвественно, клок должен быть тот же, что используется ацп (сам он генерит, или внешний), дальше (например, у вас квадратурный детектор с последующим прореживанием (децимацией) либо генерите дочерние клоки на ФАПЧ (в sdc можно их объявить автоматически derive_pll_clocks), либо делите на регистрах (только не на логике!) и тащите либо кратные частоты как таковые, либо тащите исходный клок с прореживающими стробами (каждый вариант имеет свои достоинства и недостатки). Только так, иначе метастабильности приведут к тому, что вы будете бегать вокруг девайса с криками "да это мистика какая-то! как такое может быть вообще?!" :).
  25. Коллеги, не могу найти нужных настроек в Квартусе, что бы он более жёстко проверял правила в hdl-коде наподобие Ксайлинксовского ISE/Вивадо. Ну, например, что бы выкидывал ошибки, если используется не объявленный провод, или если входная разрядность не соотвествует входной (а не забивал молча нулями старшие разряды) и т.д. и т.п.