Jump to content

    

Kluwer

Участник
  • Content Count

    289
  • Joined

  • Last visited

Everything posted by Kluwer


  1. Коллеги, возникла потребность компиляции Си-кода для древнего как известно что мамонта DSP-процессора TMS320C10. Ни у кого случаем не валяется на древних дискетах компилятор, который в состоянии делать под него код? Или может кто знает, где можно качнуть такю древность. Смотрели самые старые версии Код Композера (2.1 по-моему), но даже там ничего старше C40 уже нет.
  2. Если канал распространения глубоководный, то (если не принимать во внимание аналоговую часть и пьезокерамику), то построить такой модем можно чуть ли не на мощном восьмирёночке. А на каком-нибудь 32-х-разрядном АРМе почти как 2 пальца. И зачем вам вообще такие сложные модуляции? Если вам нужно "дёшево и просто" зачем вы в OFDM лезите? Обычный тональник, как в телефонии и фильтр Гёрцеля вам в помощь. Зависит от частоты сильно, но выше звука работает прерасно. А если на мелководье, то, скорее всего, у вас ничего работать вообще не будет даже на таких смешных скоростях: там из-за дикой реверберации и многолучёвости, ISI у вас будут такие, что вы о 100битах/cек надёжной передачи будете мечтать.
  3. Цитата(doom13 @ Jan 16 2018, 14:26) Входные/выходные порты идут на ножки FPGA. Ругается на путь от reg_B[7] до sum1[7], смотрю как разбросал все в ChipPlanner-e. Если в Chip Planner-e подвинуть reg_B[7] максимально близко к sum1[7] и применить изменения в нетлисте, то все тайминги соблюдаются. Вопрос - почему автоматом не хочет поставить ячейки в нужные места (куча свободных ресурсов), чтоб все тайминги соблюдались. Это - не такое "очевидное" решение. Потому что он тупо боится ставить reg_B[7] далеко от остальных, справедливо опасаясь, что у вас может шина "разбежится" (400МГц, так между прочим, не хухры мухры!). А вы ещё зачем-то прилепили никому не нужный промежуточный регистр reg_sum, который явно назначили на выход sum. А компилятор Квартуса совсем не такой интеллектуальный, как вы могли подумать и он достаточно тупо выполнил ваши указания, повесив reg_sum чуть ли не на ногу sum. Была б его воля он бы его ещё на двухфазный выходной триггер (altddio) залепил, но права не имеет. И проблема тут не в мифических глюках Квартуса, а элементарно в том, что каменюга у вас выбрана огромная, схемка вшивая, а если он начнёт гонять по кристаллу туда-сюда отдельные триггеры, каждый раз заглядывая в результаты таймингов, то более серъёзные схемы он будет месяцами оптимизировать. Поэтому, да, тяжек труд плисовода: приходится либо за компилятор думать, либо, что более правильно, для здоровых камней ваять из IP-кирпичиков. Ибо об оптимизации последних уже позаботились до нас.
  4. Коллеги! Где-то видел тему, но не могу найти. Суть в следующем: с ацп на 200МГц+ идут отсчёты и клок по lvds`ам. Далее они принимаются, есс-но altddio. Но, судя по оценкам таймквеста между данными и клоком набегает достаточно прилично, что бы отдельные биты защёлкивались не стабильно (что и наблюдается на практике). Пришлось делать целое исследование и крутить руками задержки D1..3, что бы подобрать что-то вменяемое. Но в Квартусе можно, вроде же, прописать констрейны так, что бы он эти все задержки подбирал сам автоматически. Вот как это сделать?
  5. Цитата(quato_a @ Jan 2 2018, 13:15) Пилообразная и линейная - одно и тоже. Фаза же циклична ph = 2pi + ph. А у Вас и АЧХ с разрывами (значения не определены), может быть там где-нибудь деление на нуль (NaN), посмотрите в workspace. Точнее, коль скоро график в Дб, там у неё нулевые значения
  6. Цитата(quato_a @ Dec 4 2017, 22:18) Для снижения влияния фазовых переходов есть оконное взвешивание (windowing) Угу. Не забывайте только, что за оконное взвешивание вы немедленно расплатитесь "расплыванием" спектра, несущие станут не строго ортогональны и вы получите ненулевую добавку в знаменатель отношения "сигнал/(помеха+шум)". Поэтому, обычно, даже если и используют оконное взвешивание, то весьма примитивное, типа W_0 = 0; W_1 = 0.5; все остальные - единицы. И тоже самое на хвосте символа: 1, 0.5, 0.
  7. Цитата(Tpeck @ Dec 11 2017, 13:32) А зачем удалили? Походу, товарищч случайно ноу-хау выдал Топикстартеру: не переживайте, я различных вариантов пороговиков за свою жизнь видел не меньше сотни наверное, ваш не самый оригинальный, поверьте
  8. Цитата(Марк_Я @ Dec 9 2017, 12:37) del А чего удалили? Довольно оригинальное решение было для пороговика. Жаль вы его описали несколько сумбурно. Но некий смысл в таком решении по сравнению с классическим ("один на фоне пачки") возможно был.
  9. Цитата(coding4dsp @ Dec 11 2017, 10:37) Kluwert, а какие у вас коэффициенты интерполяции/децимации? Весьма разные. В связных задачах и до сотни доходило, потому что там в какой-нибудь системе связи на КВ/УКВ выходная полоса измеряется единицами килогерц, а на входе - десятки мегагерц. Сначала - "гетеродинирование на АЦП" (когда АЦП работает на частоте в несколько раз ниже частоты сигнала, обобщённая т. Котельникова) давала 3-4-кратный сброс частоты оцифровки, ну а затем - в цифре. В радиолокационных задачах - меньше, там полосы обычно гораздо шире. Мало того, было даже как-то "соревнование", когда в 4 руки делали квадратурный приёмник на разных плисовских платформах. Я - на базе обычных фильтров, "соперник" - на CIC. Я сделал раза в 2 быстрее Кстати, по поводу CIC я допустил небольшую неточность: если вы решаете радиолокационную/гидроакустическую задачу и фильтры в квадратурных каналах у вас - это фильтры сжатия или согласованные фильтры, ну, или, дальше у вас стоит коррелятор (кому что нравиться), то компенсирующий фильтр на выходе можно вообще не ставить: вы просто можете учесть завалы в АЧХ CIC'а в АЧХ фильтров, или в опорном сигнале в коррелятора. Правда, здесь могут начаться тонкие игры с разрядностью: ибо разрешение как раз определяется в основном ВЧ-частью спектра, а эта часть как раз и будет давиться и проваливаться в младшие разряды. Так что ... вот.
  10. Цитата(quato_a @ Nov 28 2017, 15:26) CIC - это FIR (КИХ) ? По-сути, CIC (фильтр Хогенауэра) - это совершенно тупой (нерекурсивный изначально) фильтр скользящего среднего. Заслуга Хогенауэра (можно легко найти его статью в Инете), что, используя формулы бинома Ньютона, он представил его в виде рекурсивного фильтра. Мало того, при конечной разрядности, он использует сумматоры с циклическим перполнением, у которых ещё и переменная разрядность как функция номера секции. Во времена, когда ещё даже не сущестовало даже БМК (и, тем более, ПЛИС) - это было великим делом. Но у CIC-фильтров есть один существенный недостаток: легко прикинуть, что, т.к. он равноценен некому фильтру СС, то его АЧХ будет типа sinc(f), что приводит к дикой неравномерности АЧХ в полосе пропускания. Как правило этот фильтр используется в квадратурных приёмниках и если допустимо, что бы частота оцифровки квадратур была заметно больше полуширины полосы сигнала, то - можно с этим жить. Но, как правило, это не позволительная роскошь. А тогда, на выходе этого фильтра приходится примастрячивать компенсирующей фильтр весьма нехилой длины. Да, он уже работает на пониженной частоте. Но по аппаратурной сложности все плюсы CIC-фильтра сходят на нет. Кроме того, CIC страдает просто фантастическом ростом выходной разрядности, поледующее грамотное упихивание оной в заданную - это не такая тривиальная задача, как кажется. Поэтому, у нас в конторе, например, уже давно от CIC-фильтров отказались - в квадратурных приёмниках производится 2-3-ступенчатое понижение частоты на обычных нерекурсивных фильтрах невысокого порядка. Для современнных мощных и скоростных ПЛИС - это гораздо более экономичное и практичное решение (во всех смыслах).
  11. Коллеги, что-то не могу сообразить как решить такую простую задачку. Есть простой модуль, который задаёт следующие друг за другом временные интервалы. Он работает на некоторой тактовой частоте. Соответственно, по ТЗ временные интервалы заданы в миллисекундах. Можно, конечно, пересчитать длительность интервалов в число на выходе счётчика на данной тактовой частоте и успокоиться. Но как-то это не изящно: изменилась тактовая частота, или временнАя диаграмма - садись за калькулятор и пересчитывай. А как бы вот так сделать, что бы время и тактовая частота задавалась в параметрах модуля сразу в мсек и МГц, соответственно, а в модуле автоматом пересчитывалось в такты счётчика?
  12. Цитата(RobFPGA @ Nov 20 2017, 19:19) И опят же надо проверять в конкретном синтезаторе. А то у меня была эпопея когда "...return integer'(...)" в Vivado для всех отрицательных значений real выражения в скобках всегда выдавал -1. А просто "...return (...)" работал правильно. А позвольте полюбопытствовать. Я по смыслу понимаю, что конструкция integer' - это приведение типа к целому. Но, перерыл IEEE'шный стандарт Верилога-2001(ieee_std_1364_2001) ничего такого не нашёл. Это какая-то узко-Vivado'вская фича, или я просто не нашёл?
  13. Цитата(blackfin @ Nov 20 2017, 16:46) Так проверьте еще через параметр: пост #10. Сорри, коллега, не заметил ваш пост. Слушайте, да, похоже работает и ваш способ похоже лучший на данный момент!Спасибо! Вот ведь меня на define'ах заклинило
  14. Цитата(iosifk @ Nov 20 2017, 15:43) У ТС речь идет о "localparam", который вычисляется по формуле. И при чем тут "логики немеренно уйдет"? Ведь сама формула - не синтезируется... Иосиф прав, во-первых, синтезироваться-то ничего и не должно, это - постоянные. Во-вторых, аппроксимировать деление на степени 10 делением на степени 2 - это как-то уж совсем грубо. Но, ваша идея мне подсказала, походу самый оптимальный путь: время не в мкс, а в нс. Т.е., как-то так: parameter F_CLK_MHZ = 230; parameter T_PULSE_NS = 275300; `define COUNTER_MAX (F_CLK*T_PULSE_NS/1000) Проверил, Квартус прожевал, вроде работает. Но всё-таки осадочек остался: почему нельзя было хотя бы для постоянных реализовать функцию $rtoi я не понимаю.
  15. Цитата(RobFPGA @ Nov 20 2017, 12:27) Можно просто max_cntr = (frequency * interval); Обычно синтезатор сам округлит результат умножения до целого. Поворчав warning-ом для причия что "... мол округляю...". Увы, тоже мимо. Округлять синтезатор Квартуса не захотел: сообщил, что с real variable data type он работать не намерен. Единственным пока решением проблемы оказалось установка в модуль подмодулей FP-умножения и округления до целых. Когда на входе постоянные, то компайлер этот огромный умножитель несколько упрощает, но, всё равно всё настолько громоздким становится, что, похоже, калькулятор - самое простое решение
  16. Цитата(blackfin @ Nov 20 2017, 11:28) localparam max_cntr = $rtoi(frequency * interval) ; Спасибо, но, увы: Error (10174): Verilog HDL Unsupported Feature error at encodersimitation.v(26): system function "$rtoi" is not supported for synthesis
  17. Цитата(yanusa @ Sep 26 2017, 18:48) А у меня не работает((( Если вы под Виндовозом, то он очень капризен по части скурпулёзности выставки параметров пакетов. В большинтсве случаев, если в IP-заголовке не верно установлен IP-адрес, или макушник, то Варешарк пакеты покажет, т.к. он "садится" прямо по верх специального сетевого драйвера-насадки, но до верхних приложений они не доберутся. Проверяйте, что IP-адрес и макушник соотвествуют хосту и у вас открыт UDP-порт, который прописан в UDP-заголовке пакетов. Кроме того, проверьте ещё раз, что контрольные суммы прописаны. UDP позволяет закатать значение +0 в поле КС, которое означает, что его не вычисляли, но такой пакет практически 100% не пройдёт через крупную сеть (тем более - через Инет). КС IP-заголовка, теоретически, тоже можно не считать, но такой пакет приедет в Варешарк, но будет 100% прибит системой и до Матлаба не доедет. Кроме того, у некоторых сетевых карта есть опция, позволяющая всасывать в хост пакеты даже с битым crc32! И, по закону подлости, она (конечно!) оказывается включённой по умолчанию. Такой пакет железно дальше драйвера не уедет. А вообще, если разрешается, то вот внешняя ссылка (http://we.easyelectronics.ru/electro-and-pc/neskolko-slov-ob-otladke-1gb-ethernet-proektov-na-plis-chast-ii.html) на мою статью на "Изиэлектроникс", там больше подробностей. Заранее прошу прощения у модераторов, если ссылку ставить нельзя.
  18. Цитата(lennen @ Oct 28 2017, 16:47) Разве две гармоники все время ортогональны между собой? Как это правильно доказать? Потому что помню из учебника Баскакова, что либо во временной области должен быть правильный разнос, либо в частотной... Но вроде же ортогональны только синус и косинус? Одной частоты. Просто правильно подобран временной сдвиг. Ну хоть Баскакова читали, уже хорошо. А ответ, если подумать вы знаете: преобразование Фурье. Дискретный вариант (ДПФ) раскладывает по ОРТОГОНАЛЬНОЙ системе комплексных экспонент. С каким шагом берутся частоты этих экспонент? Вот, подсказки я все дал, дальше - сами.
  19. Коллеги! А не подскажет кто простые алгроитмы борьбы с т.н. "джиттером" при пакетной передачи голоса. Везде пишут про буферы длиной аж в 1-2 сек. Но, если идёт двусторонняя связь и на стороне удалённого абонента не достаточно эффективно давится эхо, то с задержкой больше где-то 500мс говорить становится не возможно. Нужны алгоритмы, не требующие такой задержки, но не дающие, с одной стороны "щелчков" при запаздывании/пропадании очередного пакета, а, с другой стороны, не накапливающие задержку из-за разбегания кварцев.
  20. Спасибо за ответ! Но вопрос ещё такой, а как быть, если пакет либо вообще не пришёл, либо очень сильно запоздал. Либо, кстати, что делать, если вообще пакеты перестали поступать. Если ничего не делать, что в звуковом потоке слышны отчётливые и неприятные для слуха "щелчки". Вот как их грамотно "замаскировать"?
  21. Добрый день! Специалист с опытом почти 20-летней разработки, ищет интересную подработку. Огромный опыт разработки на ПЛИС Altera и Xilinx, владение всеми технологиями, практически все возможные интерфейсы (от детсадовских I2C, I2S, SPI и т.д. до гигабитных эзернетов, SRIO, Хайперлинков и т.д.), реализация алгоритмов цифровой обработки сигналов на ПЛИС и DSP-процессорах от научной статьи до готового железа и кода. C DSP-процессорами многолетний опыт работы, начиная от древних C25 до многоядерных С6670/ C6678 у Ti и от древних 2101 до 21469 у AD. Кроме того, большой опыт в обычной электронике, аналоговые и цифровые схемы, разводка печатных плат, программирование микроконтоллеров и т.д. Кроме того, свободное владение Matlab/Simulink, тулбоксами, средствами разработки/моделирования FPGA/DSP-проектов из Матлаба (DSPBuilder и т.д.), опыт обычного программирования для хостов (Visual C/C++, Delphi и т.д.) для стыковки, скоростного приёма/передачи и обработки данных с внешних устройств. Есть опыт создания автоматизированных проверочно-измерительных стендов со сложной обработкой сигналов и изображений от различных датчиков. Имеется отличные знания и богатый опыт по цифровой обр-ке сигналов. Имеются как научные статьи (включая в серии IEEE), так и популярные статьи (например в "Компонентах и технологиях", на "Хабре"). Области: радиолокация, акустика, обработка изображений и звука, связь. Подобласти: антенные решётки, синтез аппертуры, оптимальный приём сигналов в шуме, сжатие изображений с сохранением контуров и т.д. и т.п. Создание новых алгоритмов или аналитическая оценка существующих, экспертный выбор методов для конкретной задачи, оценка вычислительной нагрузки, подготовка презентаци и статей/докладов на конференции, подготовка Матлаб-кода или Симулинк-кода в стиле "готово-для-переноса-в-железо" (собственная успешная технология) и т.д. Был опыт участия как в сторонних стартапах, так одно время был и собственный проект, так что в бизнес-процессах кое-что понимаю. Дальше перечислять не буду, т.к. полное моё резюме составляет несколько страниц, потенциальным работодателям/клиентам отвечу в привате. Текущей работой в принципе доволен и в ближайшее время менять точно не намерен, так что постоянную работу НЕ предлагать. Работа ищется не только для доп.денег (хотя и это тоже, привык к обеспеченной жизни ), но и для дальнейшего расширения опыта. Особенно интересны проекты из области обработки/распознавания изображений.
  22. Цитата(_Anatoliy @ Oct 12 2017, 10:59) Спасибо! Можете что то предложить? Я пробовал вариант с пиковым детектором - отказался. Слишком большое время наблюдения нужно для достижения желаемой вероятности ложного срабатывания компаратора от шума. Вариант с вычислением (D1^2 + D2^2 + D3^2 + DN^2) / N не подходит из за логарифма. Во-первых, что мешает сделать антилогарифмирование, хотя бы тем же кусочно-линейным способом аппроксимации экспоненты, типа применяемого в VoIP обратного A/мю-закона? Во-вторых, можно вспомнить простейшую математику логарифмов. Например то, что в вашем случае log(d1^2) = 2D1, где D1 = log(d1). Но это может не прокатить, если вы не знаете масштабных коэффициентов (из вашего поста не понятно, знаете ли вы точный закон логарифмирования?). Наконец, всё-таки наверное, нужно предполагать, что шум в вашей системе не велик, а значит, зная разрядность вашей системы и применив соотвествующее смещение, можно при оценке уровня порога работать на том участке, где логарифм будет хорошо аппроксимироваться прямой. Ну или ломанной из двух сегментов. Короче, вариантов много. Всё зависит от того, что вы знаете о предыдущих блочках на вашей блок-схеме. Но, судя по тому, что она нарисована в Симулинке, вы знаете не мало.
  23. Цитата(Acvarif @ Oct 12 2017, 11:13) Знаковый коррелятор работает по принципу совпадений или несовпадений выборок по сигналу с выборками по квадратурной модели. В качестве демонстрации Матлаб модель знакового коррелятора для ЛЧМ сигнала 47...53 кГц. Имеется ввиду, что сигнал и модель это цифровые (не синусоида) сигналы. Тоесть грубо говоря пропущенные через компаратор синусоидальные радиосигналы. Во-первых, вы сами-то поняли, что написали? Во-вторых, если вы приводите код, то нужно выдрать ключевой кусок, а не вываливать всё ваше творчество, включая подготовку .mif-файлов и прочую требуху на форум. В-третьих, если вы всё-таки действительно понимаете, что такое "знаковый коррелятор", то кто вам мешает просто "отнормировать" результат. Если опорный сигнал у вас длиной N бит, то максимальное число совпадений равно N, а минимальное равно нулю. Так кто мешает просто "сдвинуть" шкалу?
  24. Цитата(gin @ Oct 9 2017, 16:49) Так они взводятся именно с первым байтом преамбулы (0x55) или байтом SFD (0xD5 - который непосредственно переда данными)? И еще, правильно ли я понял, что для 1 Gb преамбула будет такая - 55 55 55 55 55 55 55, затем D5? Например, в 10 Gb (xgmii) несколько иная она - FB 55 55 55 55 55 55, затем D5. А по поводу клока GTX_CLK - идея кстати не плохая, использовать DDR. И еще по поводу клока, у Альтеры есть такой апликейшн ноут - AN 477: Designing RGMII Interfaceswith FPGAs and HardCopy ASICs Так там написано, что необходимо дополнительно настраивать внешний PHY на прием клока. Если не настраивать - то необходимо самому сдвигать фазу выходного клока на 90 градусов. Кто как делает: настраиваете PHY или двигаете клок? Я не знаю, кто чем взводится, но я вам написал выше: всё современное сетевое оборудование прекрасно работает, если даже все 55 пропущены. По клоку: настраивать физику по MDIO (хотя у некоторых это делается по умолчанию), если она такое вообще позволяет. Сдвигать клок на 4ом Циклоне практически не реально. А вообще, прежде чем вопросы задавать, не плохо бы ознакомится с вами же найденной литературой, сделать пару проектиков, набить шишек и потом уже задавать конкретные вопросы. Если вы хотите мастер-класса, то можете договориться с вашим работодателем и я могу за определённый гонорар провести обучение. А обучать вас разработке сетевых модулей через форум за бесплатно никакого интереса нету.
  25. Цитата(AVR @ Oct 9 2017, 14:58) Извините что вклиниваюсь, стоит аналогичная задача что и у автора темы, вот эти altddio как спасут здесь? Какую роль они выполняют? Обеспечивают жёсткую времЕнную привязку gtx_clk, стробов и самих данных друг к другу и плюс обеспечивают формирование достаточной крутизны фронтов (на передаче есс-но). Эти мегакоры просто настраивают двухтактные регистры, висящие на входе/выходе соответствующих выводов (см. IOE structure в описании к Циклону). Кстати, учтите один момент, т.к. эти регистры практически прицеплены к самой ноге, то STP дотянуться до них физически не может - посмотреть сигнальчики на этих выходах вы сможете только осциллографом