Jump to content

    

Jhonny

Участник
  • Content Count

    15
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Jhonny

  • Rank
    Участник
  1. STM32 mp3 playback

    Подскажите пожалуйста, как скачать код с helixcommunity.org?
  2. Не успел сказать спасибо, а сообщения уже куда-то пропали. :05:
  3. Документацию нашел, читаю:) А можно ли то же самое сделать средствами cadence (просто весь мвршрут в cadence)?
  4. Здравствуйте. У нас в проекте используются ROM и RAM памяти от ST. Возникли некоторые проблемы с моделированием нетлиста с задержками. Проблемы следующие: 1. Выгрузка sdf: в верилог-модели памяти прописаны пути для Q_data, Q_glitch, тогда как выходным портом является порт Q. В .lib также нет никаких Q_data. Соответственно при аннотации эти пути не подцепляются. В поставке памяти есть папка SYNOPSYS_PT с map файлами, с помощью которых из .lib как-то вытаскиваются нужные пути. Но как пользоваться этими файлами не знаю, смотрел команду write_sdf в документации к DesignCompiler, про map ничего не нашел. Может кто подскажет, что с ними делать? 2. Вот диаграмма чтения из ячейки: Судя по докам, между th и taa на выходе Q висит неопределенное значение, а при моделировании выводятся иксы. Для worst случая th = 2.803 ns, taa = 6.598 ns. Получается почти 4 нс на выходе - иксы. Соответствует ли это поведению реальной памяти? И нужно ли как-то смещать клок памяти относительно клоков триггеров при построении дерева? Заранее спасибо:)
  5. Здравствуйте, чтобы не создавать новую тему, спрошу здесь. Есть (предполагается) АЦП с частотой дискретизации Fs = 48 кГц, данные обрабатываются ПЛИС с тактовой Fclk=100 МГц. Получается, что Fclk не кратна Fs и данные приходят как бы асинхронно тактовой. Нужно ли их (данные) как то синхронизировать? Или проще поменять тактовую, например, на 96 МГц?
  6. Попытался оптимизировать бабочку, убрав повторяющиеся операции. Вот что получилось: architecture RTL of Butterfly is signal D : complex_data_p2_bus; signal add01_re : std_logic_vector(fft_data'high + 2 downto 0); signal add01_im : std_logic_vector(fft_data'high + 2 downto 0); signal add23_re : std_logic_vector(fft_data'high + 2 downto 0); signal add23_im : std_logic_vector(fft_data'high + 2 downto 0); signal sub01_re : std_logic_vector(fft_data'high + 2 downto 0); signal sub01_im : std_logic_vector(fft_data'high + 2 downto 0); signal sub23_re : std_logic_vector(fft_data'high + 2 downto 0); signal sub23_im : std_logic_vector(fft_data'high + 2 downto 0); signal sub01 : std_logic_vector(fft_data'high + 2 downto 0); signal sub02 : std_logic_vector(fft_data'high + 2 downto 0); signal sub13 : std_logic_vector(fft_data'high + 2 downto 0); begin D <= expand_sign(D_i); add01_re <= D(0).re + D(1).re + 1; add01_im <= D(0).im + D(1).im + 1; sub01_re <= D(0).re - D(1).re + 1; sub01_im <= D(0).im - D(1).im + 1; add23_re <= D(2).re + D(3).re + 1; add23_im <= D(2).im + D(3).im + 1; sub23_re <= D(2).re - D(3).re + 1; sub23_im <= D(2).im - D(3).im + 1; sub01 <= D(0).re - D(1).im; sub02 <= D(0).im - D(2).im; sub13 <= D(1).re - D(3).re; process (CLK) variable Y: complex_data_p2_bus; begin if rising_edge(CLK) then if RESETsn = '0' then Y_ro <= (others => (re => (others => '0'), im => (others => '0'))); else if (MODE_i = Butterfly_4_Point) then Y(0).re := add01_re + add23_re; Y(0).im := add01_im + add23_im; Y(1).re := sub01 - D(2).re - D(3).im + 2; Y(1).im := sub02 - sub13 + 2; Y(2).re := sub01_re + sub23_re; Y(2).im := sub01_im + sub23_im; Y(3).re := sub01 - D(2).re + D(3).im + 2; Y(3).im := sub02 + sub13 + 2; Y_ro <= get_msb(Y, 0); else Y(0).re := add01_re; Y(0).im := add01_im; Y(1).re := sub01_re; Y(1).im := sub01_im; Y(2).re := add23_re; Y(2).im := add23_im; Y(3).re := sub23_re; Y(3).im := sub23_im; Y_ro <= get_msb(Y, 1); end if; end if; end if; end process; end RTL; Синтезировал в Xilinx ISE 12.3, до этого было 18-bit adder : 6 18-bit subtractor : 2 19-bit adder : 19 19-bit subtractor :11 После стало так 19-bit adder : 18, 19-bit subtractor :10. Имеет ли право на жизнь такая реализация, или есть другие варианты оптимизации?
  7. Спасибо за ответы:). То, что принцип соединения бабочек одинаков, интуитивно понятно. Вызывает затруднение количество разнородных бабочек. Для чисел 1152, 1024, 704, 448 я выделил 2-х, 3-х, 4-х, 7-ми и 11-ти точечные бабочки. Это значит, обходиться без хитрых сдвигов и маскирований? Насколько общим должен быть вид? Ведь от конкретного числа точек зависят количество этапов и применяемые бабочки? И еще, все сказанное Вами относится к БПФ типа пинг-понг (разрабатываемого в этой теме)? У Рабинера, Гоулда написано про поточный метод, мне показалось, там проще организация памяти.
  8. К сожалению, нулями дополнить нельзя. БПФ нужно для демодулятора OFDM, соответственно длительность OFDM-символа определяет количество точек преобразования (если я все правильно понял).
  9. Здравствуйте. Спасибо за очень полезную тему. У меня есть несколько вопросов касательно БПФ. Необходимо реализовать преобразователь на 1152, 1024, 704 и 448 отсчетов, при этом длина должна выбираться динамически. Возможно ли сделать такой универсальный преобразователь или лучше сделать четыре отдельных с фиксированной длиной? Как я понял, здесь применим алгоритм Cooley-Tukey со смешанными основаниями, т.е. например, 1152 раскладывается как 43322. Также читал про алгоритм Блуштейна (Bluestein's chirp-z) и ряд других. Какой лучше подходит для данной задачи? Может кто-то сталкивался с подобной проблемой? Буду признателен за советы.