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

verali

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о verali

  • Звание
    Частый гость
    Частый гость

Контакты

  • ICQ
    Array

Посетители профиля

1 420 просмотров профиля
  1. Всем добрый день! Имеем Cyclone V (обычный, без SOC) + Quartus 14.0 + QuestaSim. Собрал проект цифрового понижающего преобразователя (digital down converter) из альтеровских IP ядер (NCO, умножитель, FIR фильтр) и с opencores (CIC фильтр). Система двухканальная. В самом начале идет логика автоматического сброса (далее сброс будет приходить с процессора) Отдельно DDC, собранный из IP ядер. Данные с ПЛИС по последовательному порту идут в DSP. Под выходные данные с ПЛИС идет строб, который я вывожу на контрольные точки. В SDC файл прописываю свой клок, равный 60 МГц. В Warning присутствуют следующие предупреждения: 1)Unconstrained output ports 2)4 сигнала строба: Missing drive strength and slew rate Все остальные выходные информационные сигналы я вывожу на виртуальные пины, чтобы не мешались. В будущем они пойдут в DSP. При загрузке в ПЛИС стробы не идут - на контрольных точках висит высокий уровень. Буду признателен, если подскажете, как избавиться от варнингов.
  2. Добрый день! Являюсь новичком в Verilog и SV. До этого только подключал ip блоки к проекту, используя SV и писал простенькие testbench. Возникли трудности в банальном описании сброса. Внешний сброс приходит с процессора, доступ к которому сейчас не имею. Хочу проверить работоспособность "железа" путем автоматического сброса - допустим после 100 клоков сигнал reset переходит из 0 в 1 и далее никак не изменяется. Первая идея была использовать счетчик, который, досчитывая до 100, ставит сигнал reset в 1. Но, этот счетчик со временем обнулится, и сброс произойдет снова, что мне не подходит. Вопрос: возможно ли синтезировать данный сброс или надо искать другой путь?
  3. Сейчас описал sdc (ранее был не знаком с тем, что надо описывать клоки) - warning пропали. Посмотрите пожалуйста, все ли я описал в sdc. Листинг моего sdc: #************************************************************** # Time Information #************************************************************** set_time_format -unit ns -decimal_places 3 #************************************************************** # Create Clock #************************************************************** create_clock -name {altera_reserved_tck} -period 33.333 -waveform { 0.000 16.666 } [get_ports {altera_reserved_tck}] create_clock -name {clk} -period 10.000 -waveform { 0.000 5.000 } [get_ports {clk clk(n)}] #************************************************************** # Create Generated Clock #************************************************************** create_generated_clock -name {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} -source [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] -duty_cycle 50.000 -multiply_by 6 -divide_by 2 -master_clock {clk} [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]}] create_generated_clock -name {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|vco0ph[0] }] -duty_cycle 50.000 -multiply_by 1 -divide_by 3 -master_clock {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] #************************************************************** # Set Clock Latency #************************************************************** #************************************************************** # Set Clock Uncertainty #************************************************************** set_clock_uncertainty -rise_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -setup 0.050 set_clock_uncertainty -rise_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -hold 0.030 set_clock_uncertainty -rise_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -setup 0.050 set_clock_uncertainty -rise_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -hold 0.030 set_clock_uncertainty -fall_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -setup 0.050 set_clock_uncertainty -fall_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -hold 0.030 set_clock_uncertainty -fall_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -setup 0.050 set_clock_uncertainty -fall_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -hold 0.030 set_clock_uncertainty -rise_from [get_clocks {altera_reserved_tck}] -rise_to [get_clocks {altera_reserved_tck}] -setup 0.050 set_clock_uncertainty -rise_from [get_clocks {altera_reserved_tck}] -fall_to [get_clocks {altera_reserved_tck}] -setup 0.050 set_clock_uncertainty -fall_from [get_clocks {altera_reserved_tck}] -rise_to [get_clocks {altera_reserved_tck}] -setup 0.050 set_clock_uncertainty -fall_from [get_clocks {altera_reserved_tck}] -fall_to [get_clocks {altera_reserved_tck}] -setup 0.050 #************************************************************** # Set Input Delay #************************************************************** #************************************************************** # Set Output Delay #************************************************************** #************************************************************** # Set Clock Groups #************************************************************** set_clock_groups -asynchronous -group [get_clocks {altera_reserved_tck}] #************************************************************** # Set False Path #************************************************************** set_false_path -from [get_keepers {altera_reserved_tdi}] -to [get_keepers {pzdyqx*}] #************************************************************** # Set Multicycle Path #************************************************************** #************************************************************** # Set Maximum Delay #************************************************************** #************************************************************** # Set Minimum Delay #************************************************************** #************************************************************** # Set Input Transition #************************************************************** Спасибо за совет. Как я понимаю locked используется для синхронизации внешнего сброса с выходной частотой pll? В TimeQuest Timing Analyzer появились три частоты. 1)altera_reserved_tck 2)clk 3)pll_user Максимальные частоты 78, 195 и 262 соответственно.Правильно ли я понимаю, что в зависимости от того, чем я буду тактировать внутреннюю логику ПЛИС (без/с pll) меняется максимальная частота работы ПЛИС?
  4. Добрый день! Собрал проект на ПЛИС из IP-блоков: После компиляции TimeQuest показывает, что максимальная скорость около 90 МГц, что для Arria V является очень низкой. В информационных сообщениях появляются Warnings: 1) 1 input pin(s) will use non-dedicated clock routing. Как я понял, мой клок использует путь(пин) не предназначенный для клока. В Connection Guidelines есть два типа клока - clk и pll. Логично предположить, что только ко второму можно подключить pll. Но в pin assignment pll является дополнительной опцией: Следовательно делаю вывод, что в любому clk я могу подключить pll. Верны ли мои предположения? 2) Node: clk was determinated to be a clock but was found without an associated clock assignment. Warning требует от меня где-то (может быть в assignment editor?) указать что этот пин используется как клок(так как клок может быть и клоком и обычным I/O)? Не могу найти, где это указать. Буду благодарен за наводку. 3) PLL cross checking found inconsistent PLL clock settings: was found missing 1 generated clock that corresponds to be a base clock with a period of: 10.000 Тут warning мне говорит, что я не подключил(потерял) клок, который идет на вход ФАПЧ, хотя из первого вложения видно, что внешний клок идет напрямую на ФАПЧ. Сразу скажу - внешний клок 100 МГц идет на ФАПЧ и выходят все те же 100 МГц. В институте так советовал делать преподаватель, ссылаясь на то, что увеличивается надежность всей системы, из-за того, что внешний клок может быть зашумленным, а выход ФАПЧ является чуть ли не прецизионным. 4)В TimeQuest есть так называемый altera_reserved_clock. Что это такое и почему его частота 33 МГц? Связан ли он какие-либо образом с SignalTap?
  5. Под алиасингом я всегда понимал искажения, вызванные несоблюдением требования по Котельникову: Получается, что под алиасингом понимается любое нежелательная энергия сигнала на частотах до f.s/2? Почему полезный сигнал считается до Fs/2, а не ограничен интересующей нас полосой? Почему нас интересуют спектральные составляющие, лежащие вне полосы сигнала?
  6. На dsplib мне не понятен рисунок 2а. 1)Что это за спектральные линии? Как я понимаю синей сплошной показан спектр до дискретизации. 2)В институте учили, что требование по Котельникову заключаются в том, чтобы частота дискретизации была минимум в два раза выше верхней боковой частоты. Соотвественно наложение частот (алиасинг) должно выглядеть следующим образом:
  7. Мне не понятна физика работы. Да, там (и не только там) приведены формулы, АЧХ и ФЧХ, но физически я не могу понять, почему сначала сигнал надо накапливать, потом его вычитать. Почему эти блоки позволяют привести сигнал к требованию по Котельникову (а не просто выкинуть ненужные нам отсчеты без использования гребенки и интерполятора). Физическое понимание мне нужно для самостоятельного описания cic на hdl.
  8. Добрый день! Никак не могу понять принцип работы cic фильтра (дециматора и интерполятора), перелапатил кучу литературы (Р. Лайонс, А Сергеенко и т.д) и сайтов (dsplib, altera). Для начала возьмем фильтр-дециматор, который состоит из блока интегратора, блока прореживания и блока гребенчатого фильтра. Вопросы: 1) Для чего нужен каждый из блоков? Зачем требуется сначала накапливать, потом вычитать? Хочу понять именно физический смысл этих блоков. 2) Почему эти блоки (интегратор и гребенки) позволяют нам привести сигнал к требованию по Котельникову после децимации? Не могу понять физический принцип этого.
  9. Работаю в Quartus 14.1. Столкнулся с этой же проблемой - в папке проекта скрипт генерации коэффициентов компенсационного фильтра отсутствует. В описании сказано, что Матлабовский скрипт будет лежать в папке с проектом: Вы его нашли?
  10. Скорее всего так и есть. Автору статьи отписал. В случае ответа - отпишу.
  11. Добрый день! Решил повторить реализацию Cordic алгоритма из kit-e.ru/assets/files/pdf/2011_12_36.pdf на ПЛИС. Проект состоит из 5 модулей (структурная схема во вложении): 1) reset_block.v - аппаратный сброс и установка всех регистров в начальное положение. 2) step_control.v - модуль. формирующий шаг фазы для вычисления синуса и косинуса, а так же четверть в которой находится выходной сигнал 3) Cordic.v - модуль, формирующий конвейер из блоков, вычисляющих выходные значения синуса и косинуса. 4) rotator[0-15].v - модуль, поворачивающий вектор на заданный угол. 5) select_quarter.v - модуль, подводящий вычисленное значение синуса и косинуса под весь диапазон АЦП. В модуле step_control.v значение фазы Angle задает значение выходной частоты. В статье сказано, что значение Angle в 3216 соответствует фазе в 90 градусов, т.е увеличивая каждый такт значение Angle на 1, на выходе мы получим частоту равную f.out=F.clk/3216/4 (на 4 делится, чтобы получить полный период, а не только до 90 градусов). Откуда взято, что значение Angle в 3216 соответствует фазе в 90 градусов?
  12. Добрый день! Решил повторить реализацию Cordic алгоритма из kit-e.ru/assets/files/pdf/2011_12_36.pdf на ПЛИС. Проект состоит из 5 модулей (структурная схема во вложении): 1) reset_block.v - аппаратный сброс и установка всех регистров в начальное положение. 2) step_control.v - модуль. формирующий шаг фазы для вычисления синуса и косинуса, а так же четверть в которой находится выходной сигнал 3) Cordic.v - модуль, формирующий конвейер из блоков, вычисляющих выходные значения синуса и косинуса. 4) rotator[0-15].v - модуль, поворачивающий вектор на заданный угол. 5) select_quarter.v - модуль, подводящий вычисленное значение синуса и косинуса под весь диапазон АЦП. В модуле step_control.v значение фазы Angle задает значение выходной частоты. В статье сказано, что значение Angle в 3216 соответствует фазе в 90 градусов, т.е увеличивая каждый такт значение Angle на 1, на выходе мы получим частоту равную f.out=F.clk/3216/4 (на 4 делится, чтобы получить полный период, а не только до 90 градусов). Откуда взято, что значение Angle в 3216 соответствует фазе в 90 градусов?
  13. Добрый день! Ситуация такая - пришли платы по старой теме. Разработчик, который всю плату рисовал и разбирался с blackfin (раньше проекты были на adsp21xx), давно уволился. Передо мною стоят задачи: 1)Написать тестовую программу, которая позволит проверить, есть ли в системе технические проблемы (разрывы цепи, недопайки и т.д). 2)Написать загрузчик. На плате два процессора и одна флешка. Необходимо написать программу для прошивки флешки через процессор (в ee-240 нашел программирования флешки Atmel через BF ). За пару недель до этого начал работать с отладочной платой ADSP-BF533. Пока успел только познакомиться с архитектурой и с ассамблером. Поморгал диодиками, задействовал таймер и прерывания. Сейчас уже приходится перемещаться на реальную железку (без отладчика). 1)При написании программы на отладочной плате пользовался готовым проектом и вносил туда изменения. В готовом проекте (в примерах) есть файл startup.h. Этот файл пользователь сам прописывает или же есть какой-нибудь генератор этого файла?
×
×
  • Создать...