Страница 1 из 2 12 Последняя
Показано с 1 по 20 из 22

Тема: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

  1. #1
    ★★★★★✰
    Автор темы
    Аватар для s3tup
    Регистрация
    11.02.2006
    Адрес
    Недоступно
    Сообщений
    2,324

    По умолчанию Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Подскажите проц (DSP), способный на
    - 8-канальный FIR 192khz
    - 4хI2S (или даже 8, если такие бывают)
    - с приличной точностью
    - в удобнопаяемом корпусе


    И память к нему.

    С него i2s пойдет на CPLD, в котором уже будет собираться формат i2s для цапов.


    Для его обслуживания наверно понадобится микроконтроллер? (для загрузки с флешек/сети конфигураций)

    Где лучше поставить ЦФ, в плиске или в ДСП?

    Какие плиски сегодня в обиходе? Предпочитаю альтеру, т.к. есть опыт, с 9000 серией. Сегодня она скорее всего устарела.
    ДСП? Пробовал программировать аудиджи с ее процессором на ассемблере, но было не интересно изобретать велосипед (все нужные плагины уже были реализованы).


    Зачем? Да так, руку набить на разработке железа. Да, будет нелегко… Просьба не обсуждать осилю/не осилю.

    Плата… четырехслойки хватит, с заливной землей и слоем питания? Или идти сразу в сторону 5-6 слоев? Скажем по обе стороны – земля, слой питания, и слой (два) цифры.

    Опыт уже есть, хоть и не самостоятельный, но зато в полной мере (от идеи до коробки).

    Цель – восьмиканальный кроссовер с FIR фильтрами. Степень доработанности – абы работало, с возможностью доработки (чтобы не запороть при разработке).

    Бюджет? Как повезет, скажем килобакс на все, или 2, но дешевле значит лучше.
    Время – пол года хватит? На подбор деталек, описалово разработки, схемку, разводку печатки, дебаг?
    Затем краткое изучение ДСП и все…

    Шаманить с хитрыми схемами обвязки цапов не буду, возьму или даташитные или с опубликованных проэктов в интернете. Аналогично и с прочей обвязкой, аппликейшн ноутс никто не отменял.

    Коммерцией заниматься не собираюсь.


    Кто-то подобное уже делал?
    Music is art. Audio is engineering.

  2. #2
    Старый знакомый Аватар для Electrovoicer
    Регистрация
    03.06.2009
    Адрес
    СПб
    Сообщений
    758

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    единственный совет, который себе позволю после прочитанного - все-таки начать с чего-нибудь попроще. иначе зароетесь в частных проблемах реализации того или иного участка.

    возьмите пока специализированный чип из семейства ADAU144x - там есть все что Вам надо. единственное, придется списываться с Analog Devices, и не с бесплатного почтового ящика, чтобы получить софт и документацию.

    поверьте, я знаю о чем говорю, потому как сложность задачи не соответствует уровню постановки вопросов. ничего обидного в этом нет, профессионалами не рождаются, а становятся, постепенно наращивая сложность и терпеливо доводя дело до конца. нельзя на одном сверхсложном (для текущего уровня) проекте научиться быть профи. только шаг за шагом.

    успехов Вам

  3. #3
    ★★★★★✰
    Автор темы
    Аватар для s3tup
    Регистрация
    11.02.2006
    Адрес
    Недоступно
    Сообщений
    2,324

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Electrovoicer, а если кусками, т.е. модулями? Т.е. модуль dsp, модуль i2s конвертера, модуль цапа?

    Просто кажущаяся сложность проэкта оказывается лишь кажущейся после его завершения. За 3 месяца я и еще двое зарубили свичь для ethernet, на 3 микрухи не считая обвязочных (по питанию, ватчдоги, последовательный порт), на восьми слоях Даташити досихпор помню Это кайф... Просто я не вижу целесообразности начинать с малого, оно слишком мало

    Для начала хватит запустить DSP в bypass, запустить простенький i2s цап с выхода...


    Однако микросхемка хорошая, хоть и слабенькая
    3584 инструкций на сэмпл в 48кгц, это... 448 на канал. На простенький фильтр хватит, + задержка до 50гц/канал в восьмиканальном режиме. стоит всего 15 у.е., имеет встроенный приемопередатчик spdif.
    Один минус - такой девайс уже есть, называется minidsp, http://www.minidsp.com/
    Music is art. Audio is engineering.

  4. #4
    Новичок Аватар для DeGifted
    Регистрация
    22.08.2006
    Адрес
    Минск
    Возраст
    42
    Сообщений
    28

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Цитата Сообщение от s3tup Посмотреть сообщение
    Подскажите проц (DSP), способный на
    - 8-канальный FIR 192khz
    - 4хI2S (или даже 8, если такие бывают)
    - с приличной точностью
    - в удобнопаяемом корпусе

    И память к нему.

    С него i2s пойдет на CPLD, в котором уже будет собираться формат i2s для цапов.

    Кто-то подобное уже делал?
    Я делал нечто похожее: 8-кратный оверсемплер на Xilinx FPGA XC3S250E (Spartan 3E). Сам фильтр реализовал на IP корке, входящей в ISE (не бесплатной версии). Коэффициенты рассчитал в ScopeFIR из www.dspguru.com (кстати, там же очень доступно описана теория цифровой фильтрации). Количество коэффициентов не помню, но искажения получились на уровне -120дБ и нелинейностью в passband не больше 0,5МЗР 20-битного сигнала, заняв при этом около половины кристалла.
    I2S интерфейс, небольшой FIFO буфер, генератор шума для дизеринга и всякую мелкую логику написал на верилоге.
    Обошлось без внешней памяти. Только кристалл плиски и SPI загрузочная флешка.

  5. #5
    ★★★★★✰
    Автор темы
    Аватар для s3tup
    Регистрация
    11.02.2006
    Адрес
    Недоступно
    Сообщений
    2,324

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    DeGifted, дспгуру отличный сайт, по нему и учусь

    Забыл уточнить требуемую длинну FIR фильтра. Он ДЛИННЫЙ, и его МНОГО
    Помойму я увлекся с 192кгц, т.к. хотел коррекции начиная с 18гц, а это 9600 операций умножения за такт на канал, получается 14гГц "голых" умножений, если их выполнять последовательно.

    Сбрасываем до 44.1кГц, получается 864мГц "сухих" умножений, что ближе к реальности.
    Music is art. Audio is engineering.

  6. #6
    Новичок Аватар для DeGifted
    Регистрация
    22.08.2006
    Адрес
    Минск
    Возраст
    42
    Сообщений
    28

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Цитата Сообщение от s3tup Посмотреть сообщение
    DeGifted, дспгуру отличный сайт, по нему и учусь

    Забыл уточнить требуемую длинну FIR фильтра. Он ДЛИННЫЙ, и его МНОГО
    Помойму я увлекся с 192кгц, т.к. хотел коррекции начиная с 18гц, а это 9600 операций умножения за такт на канал, получается 14гГц "голых" умножений, если их выполнять последовательно.

    Сбрасываем до 44.1кГц, получается 864мГц "сухих" умножений, что ближе к реальности.
    А какие требования к параметрам? Может подойдёт IIR фильтр? Его требования к ресурсам в разы ниже

  7. #7
    ★★★★★✰
    Автор темы
    Аватар для s3tup
    Регистрация
    11.02.2006
    Адрес
    Недоступно
    Сообщений
    2,324

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Даже на порядки, но... Хочу универсальную систему, конволвирующую входной сигнал с загружаемым фильтром поканально. Частотка конволвинга - как можно ниже, желательно суб-20гц.

    Цель - коррекция импульсного отклика каждого динамика + фильтр к нему.

    Хотелось бы получить результат жесткой силой (ака brute force), мощностью процессора скрыть кривость рук
    Music is art. Audio is engineering.

  8. #8
    Новичок Аватар для DeGifted
    Регистрация
    22.08.2006
    Адрес
    Минск
    Возраст
    42
    Сообщений
    28

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Цитата Сообщение от s3tup Посмотреть сообщение
    Даже на порядки, но... Хочу универсальную систему, конволвирующую входной сигнал с загружаемым фильтром поканально. Частотка конволвинга - как можно ниже, желательно суб-20гц.

    Цель - коррекция импульсного отклика каждого динамика + фильтр к нему.

    Хотелось бы получить результат жесткой силой (ака brute force), мощностью процессора скрыть кривость рук
    Думаю что будет проще всего поставить плис подходящего размера (чтобы в block ram вместились все наборы коэффициентов). Например Spartan 3 могут иметь до 648Kb block ram, что, по-моему достаточно для фильтра любой степени маньячности . Все нужные алгоритмы с оптимизацией реализованы в виде IP cores.

  9. #9
    Регистрация не подтверждена Аватар для Chibzikz
    Регистрация
    19.08.2009
    Сообщений
    197

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Вот http://focus.ti.com/paramsearch/docs...ramCriteria=no
    и вот http://focus.ti.com/paramsearch/docs...ramCriteria=no

    я бы выбрал OMAP-L138 там два ядра, ARM9 и DSP C674x
    C674x поддерживает float
    интерфейсов хоть отбавляй
    правда BGA но это мелочь

  10. #10
    Частый гость Аватар для Кокон
    Регистрация
    12.06.2006
    Адрес
    Минск
    Сообщений
    407

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Ага и до проекта это дойтет

    я бы выбрал OMAP-L138 там два ядра, ARM9 и DSP C674x
    C674x поддерживает float
    удачи

    про спартан 3 и adsp21261 поверю

    Мало того - можно даже дома сделать

  11. #11
    ★★★★★✰
    Автор темы
    Аватар для s3tup
    Регистрация
    11.02.2006
    Адрес
    Недоступно
    Сообщений
    2,324

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    В спартане всего 1к сэмплов на множитель, 20-28 множителей. Это примерно 44гц., маловато, но зато просто.

    Можно организовать тайм-шеринг множителей, или построить собственные - тогда получится затолкать фильтр подлинней.

    Множители обычные, к ним еще нужно приклеить накопители с добавлялками.

    Информации по быстродействию (propagation time) этих множителей в документации я не нашел - они синхронные (по биту за такт), или асинхронные (множат сами по себе с триггером на смене информации или по внешнему клоку).

    А какой к ним софт нужен? Тот, что есть на сайте - или трайл, или стоит очень дорого...

    IP cores они бывают безплатными?


    В целом все выглядит выполнимо и совсем не дорого. Плата стОит 100 у.е с 500к логическими элементами и 140 за 1200к.


    Или же я подзабыл колличество требуемых умножений для FIR.
    Music is art. Audio is engineering.

  12. #12
    Старый знакомый Аватар для Electrovoicer
    Регистрация
    03.06.2009
    Адрес
    СПб
    Сообщений
    758

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    вы лучше начните не с железки, а с проекта на верилоге. отладьте его и просимулируйте. а потом уже железку подберете любую какая понравится. не знаю как у ксайлинкса в его ISE, а у альтеры сразу можно посмотреть примерные ресурсы, которые займет фильтр в требуемой конфигурации. и сам фильтр можно прямо в Quartus синтезировать. железка - дело десятое в таком проекте...

  13. #13
    ★★★★★✰
    Автор темы
    Аватар для s3tup
    Регистрация
    11.02.2006
    Адрес
    Недоступно
    Сообщений
    2,324

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Это правильно. Но нужно было сначало проверить существует ли в реальности железо, способное удовлетворить требования и выбрать подходящую технологию для реализации.

    Теперь осталось вспомнить vhdl и написать отдельный блок, посмотреть сколько площади и памяти он займет, и какие требования к частоте имеет.


    Спасибо всем! Без вас я бы пошел в сторону больших и толстых DSP (не знал, что FPGA умеет FIR, вернее думал что "заточенное" под данную операцию железо будет лучше, проще, дешевле и меньше) И о ядрах думал как о футуристичной фиче из рекламных буклетов стратиксов... Оказывается оно - уже реальность.
    А бывают ли бесплатные/опен сурс ядра, и где их брать? Видел готовые SPDIF трансиверы, ASRC и прочее, но их цена мягко говоря удивила. Даже DTS/AC3 декодеры есть...
    Music is art. Audio is engineering.

  14. #14
    Частый гость Аватар для Кокон
    Регистрация
    12.06.2006
    Адрес
    Минск
    Сообщений
    407

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    на 21261 очень хорошо и все доступно
    The DAI also includes six serial ports, two precision clock generators
    (PCGs), an input data port (IDP), six flag outputs and
    six flag inputs, and three timers. The IDP provides an additional
    input path to the ADSP-2126x core, configurable as either eight
    channels of I2S or serial data, or as seven channels plus a single
    20-bit wide synchronous parallel data acquisition port. Each
    data channel has its own DMA channel that is independent
    from the ADSP-2126x’s serial ports.
    Serial ports operate in four modes:
    • Standard DSP serial mode
    • Multichannel (TDM) mode
    • I2S mode
    • Left-justified sample pair mode
    Each of the serial ports supports the left-justified sample-pair
    and I2S protocols (I2S is an industry-standard interface commonly
    used by audio codecs, ADCs, and DACs) with two data
    pins, allowing four left-justified sample-pair or I2S channels
    (using two stereo devices) per serial port with a maximum of up
    to 24 audio channels. The serial ports permit little-endian or
    big-endian transmission formats and word lengths selectable
    from 3 bits to 32 bits. For the left-justified sample pair and I2S
    modes, data-word lengths are selectable between 8 bits and 32
    bits. Serial ports offer selectable synchronization and transmit
    modes as well as optional μ-law or A-law companding selection
    on a per channel basis. Serial port clocks and frame syncs can be
    internally or externally generated.
    Вообщето они для дешевых ресиверов - но тут явно сгодится.

  15. #15
    Новичок Аватар для DeGifted
    Регистрация
    22.08.2006
    Адрес
    Минск
    Возраст
    42
    Сообщений
    28

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Цитата Сообщение от s3tup Посмотреть сообщение
    В спартане всего 1к сэмплов на множитель, 20-28 множителей. Это примерно 44гц., маловато, но зато просто.

    Можно организовать тайм-шеринг множителей, или построить собственные - тогда получится затолкать фильтр подлинней.

    Множители обычные, к ним еще нужно приклеить накопители с добавлялками.

    Информации по быстродействию (propagation time) этих множителей в документации я не нашел - они синхронные (по биту за такт), или асинхронные (множат сами по себе с триггером на смене информации или по внешнему клоку).
    Могут быть и такими и такими.
    http://www.xilinx.com/itp/xilinx7/bo...dl0036_28.html
    У меня сейчас нет под рукой ISE, но я уверен что хватит даже 250к спартана для твоих задач. Но лучше бы всё-таки скачать ISE и просимулировать.
    Цитата Сообщение от s3tup Посмотреть сообщение
    А какой к ним софт нужен? Тот, что есть на сайте - или трайл, или стоит очень дорого...
    Нужен полный ISE. В инете свободно находится.
    Цитата Сообщение от s3tup Посмотреть сообщение
    IP cores они бывают безплатными?
    www.opencores.org

    FIR фильтр конечно можно и самому написать, получится пару строчек на верилоге/VHDL. Но вся соль проприетарных корок в оптимизации. У зайлинкса есть штук 5 вариантов разных структур для разных частных случаев.

  16. #16
    Регистрация не подтверждена Аватар для Chibzikz
    Регистрация
    19.08.2009
    Сообщений
    197

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Цитата Сообщение от Кокон Посмотреть сообщение
    Ага и до проекта это дойтет


    удачи

    про спартан 3 и adsp21261 поверю

    Мало того - можно даже дома сделать

    Offтопик:
    Это C

    /**************************************************************


    Filter type: Low Pass
    Filter model: Butterworth
    Filter order: 10
    Sampling Frequency: 44 KHz
    Cut Frequency: 20.000000 KHz
    Coefficents Quantization: 16-bit

    Z domain Zeros
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000
    z = -1.000000 + j 0.000000

    Z domain Poles
    z = -0.799984 + j -0.166318
    z = -0.799984 + j 0.166318
    z = -0.766873 + j -0.101934
    z = -0.766873 + j 0.101934
    z = -0.850768 + j -0.222547
    z = -0.850768 + j 0.222547
    z = -0.750758 + j -0.034564
    z = -0.750758 + j 0.034564
    z = -0.918982 + j -0.266509
    z = -0.918982 + j 0.266509
    ***************************************************************/
    #define Ntap 50

    #define DCgain 32768

    __int16 fir(__int16 NewSample) {
    __int16 FIRCoef[Ntap] = {
    -57,
    -28,
    124,
    -224,
    321,
    -407,
    473,
    -511,
    513,
    -473,
    387,
    -251,
    68,
    160,
    -429,
    728,
    -1048,
    1375,
    -1697,
    2000,
    -2269,
    2493,
    -2661,
    2765,
    29936,
    2765,
    -2661,
    2493,
    -2269,
    2000,
    -1697,
    1375,
    -1048,
    728,
    -429,
    160,
    68,
    -251,
    387,
    -473,
    513,
    -511,
    473,
    -407,
    321,
    -224,
    124,
    -28,
    -57,
    128
    };

    static __int16 x[Ntap]; //input samples
    __int32 y=0; //output sample
    int n;

    //shift the old samples
    for(n=Ntap-1; n>0; n--)
    x[n] = x[n-1];

    //Calculate the new output
    x[0] = NewSample;
    for(n=0; n<Ntap; n++)
    y += FIRCoef[n] * x[n];

    return y / DCgain;
    }

    =======================================

    А это VHDL

    ----------------------------------------------------------------

    -- FIR 50 Taps
    -- Coefficents Quantization: 16-bit
    -- Filter type: Low Pass
    -- Filter model: Butterworth
    -- Filter order: 10
    -- Sampling Frequency: 44 KHz
    -- Cut Frequency: 20.000000 KHz
    --
    -- Z domain Zeros
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    -- z = -1.000000 + j 0.000000
    --
    -- Z domain Poles
    -- z = -0.799984 + j -0.166318
    -- z = -0.799984 + j 0.166318
    -- z = -0.766873 + j -0.101934
    -- z = -0.766873 + j 0.101934
    -- z = -0.850768 + j -0.222547
    -- z = -0.850768 + j 0.222547
    -- z = -0.750758 + j -0.034564
    -- z = -0.750758 + j 0.034564
    -- z = -0.918982 + j -0.266509
    -- z = -0.918982 + j 0.266509
    --
    -- Signal Resolution: 16-bit
    -- Coefficients Quantization: 16-bit
    -- 1 multiplier(s)
    -- 994 FFs for the filter*
    -- 816 FFs for the coefficients*
    -- 51 clks output latency
    -- 2244000 Hz for Fclk
    -- 44000 Hz for Fsampling
    -- * May change with synthezis optimization
    ------------------------------------------------------------------------------------------------------------------------

    ------------------------------------------------------------------------------------------------------------------------
    -- Component multiplier
    -- signed multiplier
    ------------------------------------------------------------------------------------------------------------------------

    library IEEE;
    use IEEE.std_logic_1164.all;
    use IEEE.std_logic_arith.all;

    entity multiplier is
    Port (
    GLOBAL_CLK : in std_logic;
    GLOBAL_RESET : in std_logic;
    A : in std_logic_vector;
    B : in std_logic_vector;
    Q : out std_logic_vector
    );
    end multiplier;

    architecture rtl of multiplier is

    signal A_tmp : signed( A*length-1 downto 0 );
    signal B_tmp : signed( B*length-1 downto 0 );
    signal prod_tmp : signed( Q*length-1 downto 0 );

    begin

    assert Q*length = (A*length + B*length)
    report "multiplier: Q length must equal A + B length" severity error;

    -- A to signed value conversion
    A_pro : process(A)
    begin
    for i in A*length-1 downto 0 loop
    A_tmp(i) <= A(i);
    end loop;
    end process A_pro;

    -- B to signed value conversion
    B_pro : process( B )
    begin

    for i in B*length-1 downto 0 loop
    B_tmp(i) <= B(i);
    end loop;
    end process B_pro;

    -- multiplication
    prod_tmp <= A_tmp * B_tmp;

    -- Registered output
    prod_pro : process(GLOBAL_CLK, GLOBAL_RESET) begin
    if (GLOBAL_RESET = *1*) then
    for i in Q*length-1 downto 0 loop
    Q(i) <= *0*;
    end loop;
    elsif rising_edge(GLOBAL_CLK) then
    for i in Q*length-1 downto 0 loop
    Q(i) <= prod_tmp(i);
    end loop;
    end if;
    end process prod_pro;

    end rtl;

    ------------------------------------------------------------------------------------------------------------------------
    -- Component fir
    -- Filter Top Level
    ------------------------------------------------------------------------------------------------------------------------

    library IEEE;
    use IEEE.std_logic_1164.all;
    use IEEE.std_logic_arith.all;
    use IEEE.std_logic_unsigned.all;

    entity fir is
    generic (
    Coef_Width_g : integer := 16;
    NTAP_g : integer := 50
    );
    port (
    GLOBAL_CLK : in std_logic;
    GLOBAL_RESET : in std_logic;
    X_IN : in std_logic_vector;
    NEW_SAMPLE : out std_logic;
    SATURATION_ERR : out std_logic;
    Y_OUT : out std_logic_vector
    );
    end fir;

    architecture size of fir is

    component multiplier is
    Port (
    GLOBAL_CLK : in std_logic;
    GLOBAL_RESET : in std_logic;
    A : in std_logic_vector;
    B : in std_logic_vector;
    Q : out std_logic_vector
    );
    end component;

    constant CoefScalingBitDrop_c : integer := 15;

    type DELAYARRAY is array (0 to NTAP_g - 1) of std_logic_vector(X_IN*length-1 downto 0);
    signal DELAY : DELAYARRAY;

    type ROMARRAY is array (0 to NTAP_g) of std_logic_vector(Coef_Width_g-1 downto 0);
    signal ROMDATA : ROMARRAY;
    signal ROMARRAY_Mux : std_logic_vector(Coef_Width_g-1 downto 0);

    signal PROD_i : std_logic_vector(X_IN*length+Coef_Width_g-1 downto 0);
    signal PROD, Y_I : std_logic_vector(X_IN*length+Coef_Width_g+NTAP_g-1 - 1 downto 0);
    signal TAP_Counter : integer range 0 to NTAP_g;
    constant ShiftCount_c : integer := 1;

    signal X_IN_reg : std_logic_vector(X_IN*length-1 downto 0);

    constant zeros : std_logic_vector(Y_I*length-1 downto 0) := (others => *0*);
    constant ones : std_logic_vector(Y_I*length-1 downto 0) := (others => *1*);

    begin

    assert Y_OUT*length = X_IN*length
    report "fir: Y_OUT and X_IN must be the same length" severity error;

    ROMDATA(0) <= x"ffc7";
    ROMDATA(1) <= x"ffe4";
    ROMDATA(2) <= x"007c";
    ROMDATA(3) <= x"ff20";
    ROMDATA(4) <= x"0141";
    ROMDATA(5) <= x"fe69";
    ROMDATA(6) <= x"01d9";
    ROMDATA(7) <= x"fe01";
    ROMDATA(8) <= x"0201";
    ROMDATA(9) <= x"fe27";
    ROMDATA(10) <= x"0183";
    ROMDATA(11) <= x"ff05";
    ROMDATA(12) <= x"0044";
    ROMDATA(13) <= x"00a0";
    ROMDATA(14) <= x"fe53";
    ROMDATA(15) <= x"02d8";
    ROMDATA(16) <= x"fbe8";
    ROMDATA(17) <= x"055f";
    ROMDATA(18) <= x"f95f";
    ROMDATA(19) <= x"07d0";
    ROMDATA(20) <= x"f723";
    ROMDATA(21) <= x"09bd";
    ROMDATA(22) <= x"f59b";
    ROMDATA(23) <= x"0acd";
    ROMDATA(24) <= x"74f0";
    ROMDATA(25) <= x"0acd";
    ROMDATA(26) <= x"f59b";
    ROMDATA(27) <= x"09bd";
    ROMDATA(28) <= x"f723";
    ROMDATA(29) <= x"07d0";
    ROMDATA(30) <= x"f95f";
    ROMDATA(31) <= x"055f";
    ROMDATA(32) <= x"fbe8";
    ROMDATA(33) <= x"02d8";
    ROMDATA(34) <= x"fe53";
    ROMDATA(35) <= x"00a0";
    ROMDATA(36) <= x"0044";
    ROMDATA(37) <= x"ff05";
    ROMDATA(38) <= x"0183";
    ROMDATA(39) <= x"fe27";
    ROMDATA(40) <= x"0201";
    ROMDATA(41) <= x"fe01";
    ROMDATA(42) <= x"01d9";
    ROMDATA(43) <= x"fe69";
    ROMDATA(44) <= x"0141";
    ROMDATA(45) <= x"ff20";
    ROMDATA(46) <= x"007c";
    ROMDATA(47) <= x"ffe4";
    ROMDATA(48) <= x"ffc7";
    ROMDATA(49) <= x"0080";
    ROMDATA(50) <= x"0000"; --dummy

    -- IOs registers
    process(GLOBAL_CLK, GLOBAL_RESET) begin
    if (GLOBAL_RESET = *1*) then
    X_IN_reg <= (others => *0*);
    NEW_SAMPLE <= *0*;
    SATURATION_ERR <= *0*;
    Y_OUT <= conv_std_logic_vector(0, Y_OUT*length);
    elsif rising_edge(GLOBAL_CLK) then
    X_IN_reg <= X_IN;
    if TAP_Counter = ShiftCount_c then
    --update Y output
    NEW_SAMPLE <= *1*;
    if Y_I( Y_I*length-1 downto CoefScalingBitDrop_c + Y_OUT*length - 1) = zeros(Y_I*length-1 - (CoefScalingBitDrop_c + Y_OUT*length - 1) downto 0)
    or Y_I( Y_I*length-1 downto CoefScalingBitDrop_c + Y_OUT*length - 1) = ones(Y_I*length-1 - (CoefScalingBitDrop_c + Y_OUT*length - 1) downto 0) then
    SATURATION_ERR <= *0*;
    Y_OUT <= Y_I(CoefScalingBitDrop_c + Y_OUT*length-1 downto CoefScalingBitDrop_c);
    else
    SATURATION_ERR <= *1*;
    if Y_I(Y_I*length-1) = *0* then
    --positive saturation
    Y_OUT <= *0* & ones(Y_OUT*length-2 downto 0);
    else
    --negative saturation
    Y_OUT <= *1* & zeros(Y_OUT*length-2 downto 0);
    end if;
    end if;
    else
    NEW_SAMPLE <= *0*;
    end if;
    end if;
    end process;

    -- TAP_Counter process
    process(GLOBAL_CLK, GLOBAL_RESET) begin
    if (GLOBAL_RESET = *1*) then
    ROMARRAY_Mux <= (others => *0*);
    TAP_Counter <= 0;
    elsif rising_edge(GLOBAL_CLK) then
    ROMARRAY_Mux <= ROMDATA(TAP_Counter);
    if TAP_Counter = NTAP_g then
    TAP_Counter <= 0;
    else
    TAP_Counter <= TAP_Counter + 1;
    end if;
    end if;
    end process;

    -- right shift registers
    process(GLOBAL_CLK, GLOBAL_RESET) begin
    if (GLOBAL_RESET = *1*) then
    for i in 0 to NTAP_g-1 loop
    DELAY(i) <= (others => *0*);
    end loop;
    elsif rising_edge(GLOBAL_CLK) then
    for i in 1 to NTAP_g-1 loop
    DELAY(i) <= DELAY(i-1);
    end loop;
    if TAP_Counter = ShiftCount_c then
    DELAY(0) <= X_IN_reg;
    else
    DELAY(0) <= DELAY(NTAP_g-1);
    end if;

    end if;
    end process;

    -- multiplier instantiation
    mult_inst : multiplier
    port map(
    GLOBAL_CLK => GLOBAL_CLK,
    GLOBAL_RESET=> GLOBAL_RESET,
    A => ROMARRAY_Mux,
    B => DELAY(NTAP_g-2),
    Q => PROD_i
    );

    --sign extension
    sign_ext_p : process(PROD_i) begin
    for i in 0 to PROD_i*length-1 loop
    PROD(i) <= PROD_i(i);
    end loop;
    for i in PROD_i*length to PROD*length-1 loop
    PROD(i) <= PROD_i(PROD_i*length-1);
    end loop;
    end process sign_ext_p;

    -- summation
    process(GLOBAL_CLK, GLOBAL_RESET) begin
    if (GLOBAL_RESET = *1*) then
    Y_I <= (others => *0*);
    elsif rising_edge(GLOBAL_CLK) then
    if TAP_Counter = ShiftCount_c then
    Y_I <= (others => *0*);
    else
    Y_I <= (Y_I(Y_I*length-1) & Y_I(Y_I*length-2 downto 0) )
    + (PROD(PROD*length-1) & PROD(PROD*length-2 downto 0) );
    end if;
    end if;
    end process;

    end size;



    думаю и так понятно что реальней дотянуть до проекта...



    Добавлено через 3 минуты
    Цитата Сообщение от Кокон Посмотреть сообщение
    на 21261 очень хорошо и все доступно




    Вообщето они для дешевых ресиверов - но тут явно сгодится.
    21261 фиксен поинт. А человек хочет небось выше 120Дб получить
    Пардон, перепутал, Шарк плавучку поддерживает
    Последний раз редактировалось Chibzikz; 08.02.2010 в 23:04. Причина: Добавлено сообщение

  17. #17
    ★★★★★✰
    Автор темы
    Аватар для s3tup
    Регистрация
    11.02.2006
    Адрес
    Недоступно
    Сообщений
    2,324

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Chibzikz, и оно осилит 8-канальный FIR с 1000 сэмплов на канал? (хотя-бы, а нужно более 2000)
    Music is art. Audio is engineering.

  18. #18
    Частый гость Аватар для Кокон
    Регистрация
    12.06.2006
    Адрес
    Минск
    Сообщений
    407

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    вот нате http://koonlab.com/

  19. #19
    Регистрация не подтверждена Аватар для Chibzikz
    Регистрация
    19.08.2009
    Сообщений
    197

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Цитата Сообщение от s3tup Посмотреть сообщение
    Chibzikz, и оно осилит 8-канальный FIR с 1000 сэмплов на канал? (хотя-бы, а нужно более 2000)
    понятия не имею, считать надо TMS320C6747 выдает Peak MMACS 2400
    Есть так же существенный плюс в том что в simulink есть потдержка TMS320C6000 и можно экспортировать код из матлаба на этот камень
    в принципе там и HDL есть потдержка но все таки, считаю писать на C гораздо легче.
    Под техасца есть заточенные библиотеки http://focus.ti.com/dsp/docs/dspplat...622&tabId=2431

  20. #20
    Завсегдатай Аватар для antecom
    Регистрация
    10.02.2005
    Адрес
    Королев
    Возраст
    50
    Сообщений
    2,838

    По умолчанию Re: Пару вопросов по подборе деталек для железного DSP для многоканального FIR

    Цитата Сообщение от s3tup Посмотреть сообщение
    Цель - коррекция импульсного отклика каждого динамика + фильтр к нему.
    Цель понятна, но что будет источником сигнала?
    Не проще ли (и перспективнее) сделать цифровой фильтр на базе спецкомпа на каком нибудь Atomе.

Страница 1 из 2 12 Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •