Перейти к содержанию
    

dorian-kv

Участник
  • Постов

    31
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о dorian-kv

  • Звание
    Участник
    Участник
  1. еще раз спасибо за наводку на чипскоп, до этого никогда как то не пользовался, даже не задумывался об этом инструменте... косяк в программе нашел. но возник вопрос по самому чипскопу - а по какому принципу он выводит список контактов для установки тригеров? почему то в этом списке присутствуют не все связи между блоками и модулями...некоторых сигналов я не нашел, хотя было интересно посмотреть
  2. проблема в следующем - система состоит из несколько плат, одна отвечает за сбор информации от остальных и передачи ее на пк, остальные занимаются сбором, фильтрацией и прочим. написана программа по обмену данными по 485 интерфейсу, сейчас в тестовом режиме - она просто с периодичностью шлет пакеты по 5к байт. модуль рабочий т.к. был проверен на первой плате - на компьютер пакеты доходили без потерь и пропусков. проблемы возникли при заливки этой программы в плис(используется спартан 6) на одной из оконечных плат для приема их первой платой. суть проблемы в том что при включении данной платы пакеты информации в большинстве случаев вообще не появляются на данном выводе плис, изредка - на 8-14 включений она начинает штатно работать. в начале я думал что возможно проблема в плисине, но в заливаемой программе параллельно работает модуль по приему данных с ацп, фильтрации и заливки их в цап(для отладки обработки информации в тестовом режиме вывод сделан) - так вот он функционирует всегда. было предположение что что-то с выводами, для эксперимента на вывод по которому должны идти пакеты я вывел клоки идущие на цап, а данные вывел соответственно на вывод клоков(в файле ucf поменял местами номера пинов) - клоки стабильно шли при каждом включении, а вот на выводе клоков блоки данных так же появлялись раз в 8-15 включений. я долго опять выверял модуль обмена и снова его уже в месте с модулем фильтрации зашил в плис на приемной плате - там все работает как часы. тогда ради интереса зашил всю программу в плис указав в качестве выводом для данных произвольный пин - произошло чудо - на том пине данные идут при каждом включении. в чем может быть проблема? может ли как-то влиять расположение программы в самой плис? просто получается что на 46 выводе данные идут раз в 8-15 включений, но клоки идут стабильно(когда я их туда ставлю), на 1-ом пине(где клоки на цап идут штатно) - данные тоже идут раз в 8-15 включений, а на 142 пине, если я задаю его выходом для данных - они идут стабильно при каждом включении. при этом все варнинги при компиляции относятся исключительно к модулю работающему с ацп и цап. аппаратную часть платы перепроверил - все питания есть, запитка портов есть, при этом на второй плисине не этой плате - программа стабильно идет на штатных пинах... может кто подскажет хотя бы в каком направлении копать?
  3. здравствуйте, чтобы не создавать новой темы, спрошу тут- не подскажете есть ли отечественные цап с двуполярным выходом,типа DAC8420?
  4. вообщем попытка реализовать Герцеля не очень удалась, но причину пока найти не могу. расчет, в том числе и целочисленный в экселе дает нужный результат, но тут получается ерунда... entity gertsel is Port ( reset : in STD_LOGIC; clk : in STD_LOGIC; x : in STD_LOGIC_VECTOR (9 downto 0); en : in STD_LOGIC; y : out STD_LOGIC_VECTOR (9 downto 0)); end gertsel; architecture arc_gertsel of gertsel is constant coeff0:signed(10 downto 0):=to_signed(485,11);--integer range 0 to 1024; signal n: integer range 0 to 35; signal q0:signed(10 downto 0);--integer range 0 to 2048; signal q1:signed(10 downto 0);--integer range 0 to 2048; signal q2:signed(10 downto 0);--integer range 0 to 2048; signal input:signed(9 downto 0);--integer range 0 to 1024; signal output:signed(9 downto 0);--integer range 0 to 1024; signal mul1: signed(26 downto 0); signal mul2: signed(31 downto 0); signal mul3: signed(31 downto 0); signal mul4: signed(42 downto 0); signal sum1: signed(42 downto 0); begin process(clk) begin if(rising_edge(clk)) then if(reset='1') then n<=0; --q0<=0; --q1<=0; --q2<=0; --coeff0<=879; --output<=0; q0<=(others=>'0'); q1<=(others=>'0'); q2<=(others=>'0'); mul1<=(others=>'0'); mul2<=(others=>'0'); mul3<=(others=>'0'); mul4<=(others=>'0'); sum1<=(others=>'0'); input<=(others=>'0'); output<=(others=>'0'); else --******************************** if(en='1' and clk='1') then input<=signed(x);--to_INTEGER(unsigned(x(9 downto 0))); --input<=input-to_signed(511,10); n<=n+1; q2<=q1; q1<=q0; end if; mul1<=(coeff0*q1)/1024; q0<=mul1(9 downto 0)+input-511-q2; if(n=36 ) then n<=n+1; mul2<=q1*q1/1024; mul3<=q2*q2/1024; mul4<=coeff0*q1*q1/1024; sum1<=(mul2+mul3-mul4); output(9 downto 0)<=sum1(9 downto 0); y<=std_logic_vector(output); end if; if(n=37) then q1<=(others=>'0'); q2<=(others=>'0'); end if; --******************************** end if; end if; end process; end arc_gertsel;
  5. в данный момент я опрашиваю АЦП с частотой 10 МГц, в корке фильтра дискретизацию задаю 10 МГц, а частоту тактирования 100МГц, временных ограничений не прописывал.
  6. о переносе частоты мысли были, но пока не пробовал реализовать. а вот что значит правильно? я старался подбирать частоты чтобы не были кратными, нижнюю частоту выбирал исходя из того чтобы в длину единичной информационной посылки влезло 5-6 периодов. а вот в ноль я не скидываю, как то об этом не задумывался а на счет переполнения не совсем понял, сигнал на входе АЦП по амплитуде не изменяется от того сколько каналов. я рассчитал таблички для периода синусоиды на каждой частоте, но с одинаковым шагом, и на цап подаю суммарный код деленный на кол-во присутствующих каналов. - этот расчет проверен и в матлабе и в экселе и на осциллографе.
  7. Эм, особого алгоритма в моем варианте и нет, просто на каждый канал по FIR-фильтру с децимацией(иначе не влезают). но в симулинке моделировал - на фильтрах с флоатами работало, на фиксированной точке из-за небольшой путаницы с отведением под целую часть и дробную не все работало, точнее местами отдельные фильтры показывали картинку хуже, нежели в железе(честно я не профи в симулинке) я использую FIR с децимацией. в принципе частотное разделение каналов вообще в данный момент у меня есть мысли про использование FFT, а в частности алгоритм Герцеля читаю, но не уверен что будет успевать, да и хватит ли 90 точек
  8. здравствуйте. у меня даже скорее не вопрос, а поиск совета. вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами). длительность бита 10 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются. вот и отсюда возник вопрос - реально ли тут добиться результата - не меняя ПЛИС и тп. а если возможно то, может выбранное мной направление решения тупиковое, и есть более интересные варианты? хотя бы направление поиска решения задать. спасибо
  9. уважаемые профи не подскажете по следующему вопросу: есть фильтр полученный из fir compilera с использованием матлабовского СОЕ, работает хорошо по нему самому вопросов нет. но если смотреть временную диаграмму в ISim то ориентируясь по выводам фильтра rfd и rdy - один отвечает за начало приема отсчета x(n), второй за вывод y(n) - соответственно время между этими двумя импульсами - время расчета фильтра. соответственно в интервал между двумя отсчетами спокойно помещаются где то четыре таких интервала, а если частоту дискретизации фильтра уменьшить то может и пятый влезть. так вот вопрос можно ли на одном ядре реализовать четыре фильтра с заменой набора коэффициентов?(сами фильтры по кол-ву коэффициентов одинаковые) вообще мне кажется что такое возможно, только вот как тогда на каждый фильтр СОЕ файл грузить? можно конечно все коэффициенты загрузить копированием в один файл, но вот как разделять фильтры на выходе? сформулировал вопрос конечно коряво, но все же.
  10. нашел косяк...я все изменения производил с размерностями входных и выходных слов, а размерности аккумулятора и пр не учитывал...симулинк показал хорошие графики... но в плисине пока не заработало, хотя хоть и генерации нет, только простые тычки редкие
  11. а куда больше?у меня получается длина слова - 10 бит, а на дробную часть отведено уже 16 - и тогда появляется ослабленный полезный сигнал 1.111111111111111 _._____1111111111 - получается я использую число такого вида (fix10_16), а не (fix10_9 скажем): 1.111111111______ Но если скажем симулинк в этом смысле особо не ограничивает, в fir compilere в параметрах ставится диапазон не больше чем заданное слово на входе, если 10 бит как у меня, то соответственно после точки максимум 10 бит...(хотя могу ошибаться, но кажись так) а кстати русскоязычные статьи-описания по logicore есть?
  12. спасибо за советы, Active_hdl оказалась интересной средой, но проблему не решила...в принципе что в железе на осциллографе, что в симулинке, что в симуляции в ise все равно генерация...кстати fir compiler из logicore такой же результат дал... где то я туплю...но вот в fdatool получается что на выходе фильтра получается отфильтрованная частота только когда я ставлю параметр fraction length больше чем кол-во бит для входа и выхода (т.е. на вход и выход у меня 10 бит, а fraction length в районе 16...но сигнал очень низкоамплитудный, а вот fir compiler ограничивает диапазон аналогичного параметра значением входного слова, но в симулинке в данном диапазоне я не получаю полезного сигнала. кстати параметры fixed point мне наглядно объяснила табличка в даташите на fir compiler)
  13. точнее именно определение кол-ва бит интересует, точнее методика. но возможно причина в : я использую AD9201, у него выход параллельный 10-ти битный или я все же что-то не досмотрел в даташите?! частота дискретизации взята 3 МГц. меня пока что интересует только одиночный фильтр, точнее его реализация в железке, чтобы сократить расстояние отделяющее от теории до практики в ПЛИС. в Матлабе проигрывал - все устраивало, а вот RTL-симуляцию не пробовал. она подразумевает симуляцию в iSim? фильтра и типового сигнала?
  14. здравствуйте. раньше не занимался фильтрацией на плис,поэтому столкнулся с проблемой при реализации полосового фильтра на xilinx. реализую пф с полосой 100кгц на частоте 450кгц. ацп и цап 10-разрядные. в fdatool использую следующие настройки fixed point: коэфф. использую 16-ти разрядные, вход и выход 10-разрядные,а вот величина fraction length вызвала некоторые вопросы, я не могу понять исходя из чего она выбирается... при синтезе нескольких вариантов я на выходе цап получаю или 0 вне зависимости от того что на входе ацп,или просто какую то генерацию импульсов не зависимо от входа(как предполагаю от переполнения...). правильность работы с ацп и цап проверял соединив их в плис на прямую. поэтому возникли два вопроса: 1.как правильно выбирать разрядность fixed point 2.данные ацп прежде чем подавать на фильтр надо преобразовывать?
×
×
  • Создать...