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

degifted

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

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

  • Посещение

Репутация

0 Обычный

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

  • День рождения 31.12.1981

Информация

  • Город
    Array
  1. В том-то и дело, что cclk_in -- не тактовая частота. Предполагается, что ПЛИС будет находиться в статическом режиме и устанавливать порт intr_out в единицу по любому изменению на usb_conf. Увидев единицу на intr_out, внешний контроллер подаёт тактовые импульсы на cclk_in и выгружает через cdata_out значение на usb_conf, защёлкнутое в регистре. Мне показалось, что так будет правильнее сделать сдвиговый регистр, но я могу ошибаться -- в верилоге и ПЛИС-ах вообще я пока новичёк. Ну, тут я подразумевал, что процесс будет обрабатываться не только по фронту cclk_in, но и по изменению usb_conf. То есть ветка else должна была выполниться в случае изменения usb_conf.
  2. То есть Вы предлагаете сделать как-то так: always @(usb_conf) begin usb_conf_change_detected <= 1; end always @(posedge usb_conf_change_detected) begin usb_conf_reg <= usb_conf; usb_conf_change_detected <= 0; intr_out <= 1; end always @(posedge cclk_in) begin cdata_out = usb_conf_reg[13]; usb_conf_reg = {usb_conf_reg[12:0], 0}; intr_out = 0; end Верно? У меня сейчас нет под рукой ISE, но подозреваю, что компилятору не понравится изменение регистров usb_conf_change_detected и intr_out более чем в одном always блоке. Не подскажете как исправить этот код? Да, я хочу чтобы сначала в cdata_out записался последний бит регистра usb_conf_reg, а затем произошёл сдвиг
  3. Помогите пожалуйста решить такую задачу. Имеется 14-битная шина, которая должна защёлкиваться в регистре при любом изменении сигналов на ней. Также при этом должен устанавливаться в 1 выход intr_out. По внешним тактовым импульсам содержимое регистра должно выводиться в виде бит стрима. Вот моя реализация: module main( output reg cdata_out, input cclk_in, output reg intr_out input usb_reg_0, input usb_reg_1, input usb_reg_2, input usb_reg_3, input usb_reg_4, input usb_reg_5, input usb_reg_6, input usb_led_24, input usb_led_48, input usb_led_96, input usb_led_882, input usb_led_441, input usb_led_16, input usb_led_connect ); reg [13:0] usb_conf_reg; wire [13:0] usb_conf; assign usb_conf[13:0] = { usb_reg_0, usb_reg_1, usb_reg_2, usb_reg_3, usb_reg_4, usb_reg_5, usb_reg_6, usb_led_24, usb_led_48, usb_led_96, usb_led_882, usb_led_441, usb_led_16, usb_led_connect }; always @(posedge cclk_in or usb_conf) begin if (cclk_in) begin cdata_out = usb_conf_reg[13]; usb_conf_reg = {usb_conf_reg[12:0], 0}; intr_out = 0; end else begin usb_conf_reg = usb_conf; intr_out = 1; end end endmodule Компилятор ISE Xilinx ругается на это так: ERROR:Xst:902 - "main.v" line 185: Unexpected usb_conf event in always block sensitivity list. Если убрать posedge из секции always, то компиляция проходит. В чём тут дело?
  4. хм. а как это поможет, можно поподробнее? пардон, писал по запарке. чип xc3s250e-4tq144, количество MULT18X18SIOs - 8, RAMB16s - 12. порядок первого фильтра: 386 второго: 70 третьего: 46 все фильтры симметричные, т.е. количество умножений должно быть вдвое меньше впрочем я поторопился с постом... умножил клок на фильтры вдвое и всё вместилось: Number of RAMB16s: 10/24 Number of MULT18X18SIOs: 8/12
  5. Добрый день, подскажите пожалуйста новичку в ПЛИСах, как решить следующую проблему. Использую SpartanIIIe, проектирую восьмикратный интерполятор аудиосигнала (три последовательно подключённых FIR фильтра (сдандартная корка FIR Compiler), каждый повышает samplerate вдвое). Проект умещается в ресурсы плисины, но на этапе place-and-route возникает ошибка, что не хватает аппаратных умножителей, поскольку уже используется столько-то block ram. Как я понял, управляющие сигналы для MUL и BRAM в структуре Spartan3e пересекаются, что исключает их одновременное использование. Пробовал уменьшать количество MUL/BRAM, но избавиться от ошибки не удалось без существенного ухудшения характеристик интерполятора. Можно ли это как-то обойти? Может существуют в свободном доступе более оптимальные корки FIR фильтров? Или скорее всего придётся перейти на более жирную плис? Параметры проектируемого интерполятора: Stopband attenuation: -120dB Passband ripple: 0.00001dB Passband: 0-0.4536fs Stopband: 0.5-1fs Interpolation rate: 8 Stages: 3 Clock: 33MHz Input samplerate: 44.1kHz Input data width: 16 Output data width: 20
  6. Имеется FIR фильтр реализованный на verilog. Необходимо снять его характеристики. Я правильно понимаю, что для этого необходимо подать на вход единичный импульс и таким образом получить на выходе набор коэффициентов, которые уже можно просимулировать в matlab или ScopeFIR? Если да, подскажите пожалуйста, как можно с помощью верилога это сделать.
×
×
  • Создать...