Jump to content

    

Kluwer

Участник
  • Content Count

    302
  • Joined

  • Last visited

Everything posted by Kluwer


  1. Послушайте, во-первых, не сигнал-шум, а сигнал-помеха+шум. Для одного пользователя остальные являются помехами, шум какой был такой и остался. Во-вторых, фразы типа "амплитуда всего сигнала не возросла, так как где-то 1+(-1) может дать вообще ноль, но так-то есть амплитуды и 3 и 4 после сложения юзеров..." говорят о том, что вам для начала просто нужно отложить в сторону чтение про CDMA и спустится на уровень ниже: прочитать (или перечитать) основы, хотя бы того же Баскакова.
  2. Видимо что-то поменялось с тех времён, когда я последний раз юзал Квестасим. На тот момент Квестасим даже не понимал расширенного объявления входов и выходов в заголовках верилоговских модулей, в то время как даже урезанная альтеровская версия Моделсима прекрасно понимала объявления и в "старом" и в "новом" стиле. С тех пор к Квестасиму я потерял интерес. Сейчас глянул на "Менторовский" сайт, да, теперь, типа, Квестасим в флагманах, ну рад за него.
  3. Каждого байта, или каждого бита? То, что я вижу у вас, не проще вообще написать как CNT <= CNT ^ ~100'b0 ?
  4. Слушайте, у вас исходная частота выборок 100МГц, а конечная - 20КГц, если нигде опечатки нет. Передискретизация в 5000 раз?! Вы точно этого хотите? Это некая учебная задача? Потому что я не очень могу представить откуда в практических задачах мог приехать НЧ-сигнал с полосой порядка 20КГц оцифрованный на 100МГц.
  5. Слушайте, Моделсим, конечно, убожество ещё то. У меня по этому поводу в совё время даже язвительная статья на другом ресурсе была. Но, с другой стороны, без него сейчас никуда. Ну можно ещё DSPbuilder задействовать, но он удобен для ваяния алгоритмических вещей, "тупой" HDL-код лучше мучать в Моделсиме (ну или его урезанной версии - Квестасиме). А по поводу всех этих ваших проблем с синтаксисом я, например, не заморачиваюсь даже особо: генерю вхолостую какую-нибудь кору, поставив галочку "сгенерить тестбенчы для Моделсим", дальше эти тестбенчи вместе с командным батничком (тоже терпеть не могу копаться в убогом моделсимовском gui) копирую себе и подставляю свои файлы. Всегда так работало, никаких проблем. Ещё учтите, что у Моделсима часто случается несварение желудка от верилоговского кода. Он по-моему нормально поедает только vhdl.
  6. Коллеги, есть ли в квартусовском варианте tcl'я какая-то предопределённая переменная, которая бы указывала, где корневой каталог установки Квартуса? По типу qip_path?
  7. Если в названии модуля присутствует "MAC", то его прямая обязанность корректно формировать MAC-уровень и корректно поднимать интерфейс с физикой. Значит, как минимум, у него должен на входе с внешней шиной стоять буфер на один пакет (стандартный или Jumbo - это уж как там в настройках). Иначе, вообще говоря, нафиг он нужен?
  8. Коллеги, неожиданно возникла дискуссия на работе по поводу способа понижения частоты. Для примера, у вас есть квадратурный детектор, в котором есс-но частота выходных отсчётов сигналов с некоторой кратность понижается по отношению к входной. Соответственно, сопровождать выходные отсчёты можно двумя способами: 1) тащить дальше по камню высокий клок, но сопровождать его стробами valid, как на комповых шинах (тот же "Авалон"); 2) поделить частоту на ФАПЧе, или тупо на регистре и раздавать дальше вместе с выходными данными. Вот кто что может прокомментировать о преимуществах/недостатках каждого способа.
  9. Цитата(a123-flex @ May 5 2018, 12:26) на самом деле 88e1111 имеет если не ошибаюсь 4 режима тактирования выходных данных: как с derived clock, так и с независимым и elastic буфером. Соответственно в разных режимах работает по разному. Последнее время на 88e1111 ценник такой, что она стала непопулярна. Мы ее больше не ставим Да а что такого нехорошего с ценником? По-моему, вменяемая цена вполне. И она проверенная и надёжная как автомат Калашникова. А что взамен-то? Мы пробовали KSZ9031, но это кошмар какой-то
  10. Спасибо за развёрнутый ответ. Но ещё есть аспект: ЭМС. Ведь, строго говоря, оба метода можно рассматривать как одно и тоже, только с разной шириной строба. В первом случае, строб равен 1 такту высокого клока, а во втором (ну если мы говорим о скважности примерно 2) - N/2 тактов, где N - кратность частот (я пока только кратное понижение рассматриваю). Конечно, в крайнем случае, можно просто строб из первого способа взять в кач-ве клока для второго, но это - уже экстрим, я его не рассматриваю. А тогда: в первом случае мы получаем пониженный уровень помех на исходной (высокой) частоте, но сильно размазанный спектр. Проще говоря, "звенеть" будет в широком диапазоне. А во втором - повышенный уровень помех на исходной (энергия импульса просто больше), но примерно в N/2 раз более узкий спектр. Вот как с этим? Помехи на соседние (особенно аналоговые) схемы, да и даже на аналоговые схемы самой ПЛИСины (ну те же ФАПЧи, например).
  11. Цитата(Alex11 @ May 5 2018, 00:18) Клоки на выходе PHY - это не востановленные клоки из потока, а свои внутренние от кварца. И дальше elastic buffer между принятыми данными и выдаваемыми наружу (по крайней мере, как пишут в подробных описаниях работы). В результате есть ограничения на бесконечный поток. Отсюда, как я понимаю, и ограничения на jumbo-frame в PHY - то 2, то 8 кб в зависимости от реализации. Нету никаких ограничений: забивали на пакетную передачу и гнали через гигабитные физики непрерывный поток - всё работает отлично. Цитата(_pv @ May 5 2018, 10:23) ну у mii, rgmii клоки на приём передачу отдельные, имхо было бы глупо вместо того чтобы на rxc просто вытащить восстановленный клок, городить ещё фифо. хотя вот у rmii клок общий, и иногда только на вход, там проблема синхронизации должна быть. Чего-то вы странное что-то пишите. Вот кусок описания ноги RX_CLK популярной 88e1111: "Receive Clock provides a 125 MHz ref- erence clock with ± 50 ppm tolerance derived from the received data stream". По-моему, прямо протеворечит тому, что вы написали.
  12. Цитата(Mr_Doomsday @ Feb 18 2018, 00:29) Руками писал. Можно было использовать и готовые ядра, но мне это было не столь интересно Что значит "не столь интересно"? КИХ-фильтр, например, пишется за 10 мин. Но, типичный проигрыш по быстродействию рукописного, например, КИХ-фильтра его же IP'шному аналогу типично составляет в районе 1,5 раз, как вы не играйтесь с локерами и таймквестами. Даже если разложить фильтр руками по DSP-блокам, т.е., по-сути, сделать за компилёр 80% его работы, и то, разница всё равно будет процентов 15-20. Проверяли сотни раз. Но раз это вас устроило, значит у вас камень был выбран с чрезмерным запасом. Ну можно конечно для перевозки тумбочки вызывать трейлер, но наш опыт показал, что, когда нужно из камня выжать всё, никакие рукописные аналоги кор не прокатывают. Позволю себе чутка откомментировать сообщение коллеги: Цитата(Alexey_Rostov @ Feb 20 2018, 23:47) Если речь идет о первичной обработке радиолокационного сигнала например, то можно делать примерно так: 1. ... Например, у вас ЛЧМ. Ну, наверное, НЧМ всё-таки, использование ЛЧМ'а с его невменяемым уровнем боковиков, как-то уже не модно. Даже в кач-ве "например" ЦитатаДля верификации используйте modelsim se: в нем есть возможность посмотреть форму сигналов. По организации проекта: моделируете весь тракт в matlab или python. записываете входной сигнал в отдельный файл, который потом будете вычитывать в тестбенче при верификации своего проекта. Modelsim в принципе и не нужен. Коры генерят вполне адекватные матлаб-модели, с помощью которых всё отлично моделируется прямо в Матлабе. Да и если уж про то пошло, тогда уже самое правильное - использовать DSPbuilder. Что называется, не отходя от кассы ЦитатаКак вариант, чтобы весь мусор убрать при децимации, можно CIC фильтром децимировать. Его опять же можно на ядрах собрать. Э-э, тут не всё так просто, как я уже в другой ветке писал. Тут начнутся проблемы с диким ростом выходной разрядности и последующим выравнивающим (компенсирующим) фильтром, порядок которого может оказаться совсем не детским. Причём, этот же фильтр собственно и должен будет осуществлять сжатие квадратур и тут вообще может начаться дикий замес из разрядностей, АЧХ цика и требуемой АЧХ. Кроме того, лицензия на кору цика очень дорогая, ну а при использовании "русских лицензий" (как острят мои иностранные коллеги ), можно легко нарваться на "сюрпризы".
  13. Цитата(spectr @ Feb 8 2018, 23:50) Привет! Такой вопрос - как можно в сигналтапе сделать триггер, который бы срабатывал если сигнал не меняется в течение какого-то времени? Мне надо отловить ситуацию когда сигнал (значение на шине) впервые становится отрицательным в течение, допустим, 5 тактов. Что-то я не нашел возможности проверить средствами сигналтапа значение предыдущего сэмпла (ни в advanced mode, ни в state machine mode). Свойства "pipeline" просто нужно задействовать у модулей в "advanced". А в блоках "BUS" св-во "Data Delay"
  14. Коллеги, возникла потребность компиляции Си-кода для древнего как известно что мамонта DSP-процессора TMS320C10. Ни у кого случаем не валяется на древних дискетах компилятор, который в состоянии делать под него код? Или может кто знает, где можно качнуть такю древность. Смотрели самые старые версии Код Композера (2.1 по-моему), но даже там ничего старше C40 уже нет.
  15. Если канал распространения глубоководный, то (если не принимать во внимание аналоговую часть и пьезокерамику), то построить такой модем можно чуть ли не на мощном восьмирёночке. А на каком-нибудь 32-х-разрядном АРМе почти как 2 пальца. И зачем вам вообще такие сложные модуляции? Если вам нужно "дёшево и просто" зачем вы в OFDM лезите? Обычный тональник, как в телефонии и фильтр Гёрцеля вам в помощь. Зависит от частоты сильно, но выше звука работает прерасно. А если на мелководье, то, скорее всего, у вас ничего работать вообще не будет даже на таких смешных скоростях: там из-за дикой реверберации и многолучёвости, ISI у вас будут такие, что вы о 100битах/cек надёжной передачи будете мечтать.
  16. Цитата(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-кирпичиков. Ибо об оптимизации последних уже позаботились до нас.
  17. Коллеги! Где-то видел тему, но не могу найти. Суть в следующем: с ацп на 200МГц+ идут отсчёты и клок по lvds`ам. Далее они принимаются, есс-но altddio. Но, судя по оценкам таймквеста между данными и клоком набегает достаточно прилично, что бы отдельные биты защёлкивались не стабильно (что и наблюдается на практике). Пришлось делать целое исследование и крутить руками задержки D1..3, что бы подобрать что-то вменяемое. Но в Квартусе можно, вроде же, прописать констрейны так, что бы он эти все задержки подбирал сам автоматически. Вот как это сделать?
  18. Цитата(quato_a @ Jan 2 2018, 13:15) Пилообразная и линейная - одно и тоже. Фаза же циклична ph = 2pi + ph. А у Вас и АЧХ с разрывами (значения не определены), может быть там где-нибудь деление на нуль (NaN), посмотрите в workspace. Точнее, коль скоро график в Дб, там у неё нулевые значения
  19. Цитата(quato_a @ Dec 4 2017, 22:18) Для снижения влияния фазовых переходов есть оконное взвешивание (windowing) Угу. Не забывайте только, что за оконное взвешивание вы немедленно расплатитесь "расплыванием" спектра, несущие станут не строго ортогональны и вы получите ненулевую добавку в знаменатель отношения "сигнал/(помеха+шум)". Поэтому, обычно, даже если и используют оконное взвешивание, то весьма примитивное, типа W_0 = 0; W_1 = 0.5; все остальные - единицы. И тоже самое на хвосте символа: 1, 0.5, 0.
  20. Цитата(Tpeck @ Dec 11 2017, 13:32) А зачем удалили? Походу, товарищч случайно ноу-хау выдал Топикстартеру: не переживайте, я различных вариантов пороговиков за свою жизнь видел не меньше сотни наверное, ваш не самый оригинальный, поверьте
  21. Цитата(Марк_Я @ Dec 9 2017, 12:37) del А чего удалили? Довольно оригинальное решение было для пороговика. Жаль вы его описали несколько сумбурно. Но некий смысл в таком решении по сравнению с классическим ("один на фоне пачки") возможно был.
  22. Цитата(coding4dsp @ Dec 11 2017, 10:37) Kluwert, а какие у вас коэффициенты интерполяции/децимации? Весьма разные. В связных задачах и до сотни доходило, потому что там в какой-нибудь системе связи на КВ/УКВ выходная полоса измеряется единицами килогерц, а на входе - десятки мегагерц. Сначала - "гетеродинирование на АЦП" (когда АЦП работает на частоте в несколько раз ниже частоты сигнала, обобщённая т. Котельникова) давала 3-4-кратный сброс частоты оцифровки, ну а затем - в цифре. В радиолокационных задачах - меньше, там полосы обычно гораздо шире. Мало того, было даже как-то "соревнование", когда в 4 руки делали квадратурный приёмник на разных плисовских платформах. Я - на базе обычных фильтров, "соперник" - на CIC. Я сделал раза в 2 быстрее Кстати, по поводу CIC я допустил небольшую неточность: если вы решаете радиолокационную/гидроакустическую задачу и фильтры в квадратурных каналах у вас - это фильтры сжатия или согласованные фильтры, ну, или, дальше у вас стоит коррелятор (кому что нравиться), то компенсирующий фильтр на выходе можно вообще не ставить: вы просто можете учесть завалы в АЧХ CIC'а в АЧХ фильтров, или в опорном сигнале в коррелятора. Правда, здесь могут начаться тонкие игры с разрядностью: ибо разрешение как раз определяется в основном ВЧ-частью спектра, а эта часть как раз и будет давиться и проваливаться в младшие разряды. Так что ... вот.
  23. Цитата(quato_a @ Nov 28 2017, 15:26) CIC - это FIR (КИХ) ? По-сути, CIC (фильтр Хогенауэра) - это совершенно тупой (нерекурсивный изначально) фильтр скользящего среднего. Заслуга Хогенауэра (можно легко найти его статью в Инете), что, используя формулы бинома Ньютона, он представил его в виде рекурсивного фильтра. Мало того, при конечной разрядности, он использует сумматоры с циклическим перполнением, у которых ещё и переменная разрядность как функция номера секции. Во времена, когда ещё даже не сущестовало даже БМК (и, тем более, ПЛИС) - это было великим делом. Но у CIC-фильтров есть один существенный недостаток: легко прикинуть, что, т.к. он равноценен некому фильтру СС, то его АЧХ будет типа sinc(f), что приводит к дикой неравномерности АЧХ в полосе пропускания. Как правило этот фильтр используется в квадратурных приёмниках и если допустимо, что бы частота оцифровки квадратур была заметно больше полуширины полосы сигнала, то - можно с этим жить. Но, как правило, это не позволительная роскошь. А тогда, на выходе этого фильтра приходится примастрячивать компенсирующей фильтр весьма нехилой длины. Да, он уже работает на пониженной частоте. Но по аппаратурной сложности все плюсы CIC-фильтра сходят на нет. Кроме того, CIC страдает просто фантастическом ростом выходной разрядности, поледующее грамотное упихивание оной в заданную - это не такая тривиальная задача, как кажется. Поэтому, у нас в конторе, например, уже давно от CIC-фильтров отказались - в квадратурных приёмниках производится 2-3-ступенчатое понижение частоты на обычных нерекурсивных фильтрах невысокого порядка. Для современнных мощных и скоростных ПЛИС - это гораздо более экономичное и практичное решение (во всех смыслах).
  24. Коллеги, что-то не могу сообразить как решить такую простую задачку. Есть простой модуль, который задаёт следующие друг за другом временные интервалы. Он работает на некоторой тактовой частоте. Соответственно, по ТЗ временные интервалы заданы в миллисекундах. Можно, конечно, пересчитать длительность интервалов в число на выходе счётчика на данной тактовой частоте и успокоиться. Но как-то это не изящно: изменилась тактовая частота, или временнАя диаграмма - садись за калькулятор и пересчитывай. А как бы вот так сделать, что бы время и тактовая частота задавалась в параметрах модуля сразу в мсек и МГц, соответственно, а в модуле автоматом пересчитывалось в такты счётчика?
  25. Цитата(RobFPGA @ Nov 20 2017, 19:19) И опят же надо проверять в конкретном синтезаторе. А то у меня была эпопея когда "...return integer'(...)" в Vivado для всех отрицательных значений real выражения в скобках всегда выдавал -1. А просто "...return (...)" работал правильно. А позвольте полюбопытствовать. Я по смыслу понимаю, что конструкция integer' - это приведение типа к целому. Но, перерыл IEEE'шный стандарт Верилога-2001(ieee_std_1364_2001) ничего такого не нашёл. Это какая-то узко-Vivado'вская фича, или я просто не нашёл?