Jump to content

    

Halfback

Участник
  • Content Count

    378
  • Joined

  • Last visited

Everything posted by Halfback


  1. Не поделитесь ссылкой или как в гугле поискать? Пока в поисковике вижу только Altera DSP Builder, но как я понимаю это не то что мне нужно... обратил. У меня для Cyclone III (Quartus 13.0.1) нет такого примера, но есть вот такой темплейт для DSP Features/Sum of Four Multipliers (Stratix V, Arria-V, Cyclone-V and later device families) Мне не совсем понятно чем эта реализация отличается от моей. Если разница есть то ткните пожалуйста. есть еще вот такой темплейт Sums of Multipliers (я так понял для плис помедленнее). Я таким образом тоже реализовывал - умножение с суммированием в виде отдельного модуля, где то-же самое делалось по клоку. Но ситуация со слеками никак не изменилась. Еще непонятно - целенаправлено ли скобки т.о. расставлены или нет.
  2. Всем доброго времени суток! Реализовал полифазный децимирующий фильтр на 70 точек (на выходе каждая 10-я точка относительно входа), в моделсиме показывает всё как надо, в железе на столе тоже работает, но квартус валит слэки по Setup (Slow 1200mV 0C и +85С, по Fast - слэков нет). Причем в sdc когда ставлю 80МГц - слэков нет, на 100МГц еже есть. Буду очень признателен если поможете найти плохое место в коде. Может есть возможность что-то поправить/улучшить?
  3. разобрался, то что LVDS имеет только 5578ТС104 и 5578ТС064. ВОпрос к счастливым обладателям 5578ТС104 - возможна ли работа LVDS на прием на скорости 120МГц ? ЧТо с регистрами LVDS приемника? Будет всё работать как в Cyclone III ?
  4. Всем доброго дня. Скажите пожалуйста, плис 5578ТС084 имеет LVDS ? И еще вопрос в догонку - где можно взять документацию на 5578ТС084 ? Надо платку под эту плис спроектировать...
  5. это не требования а мои личные полежания для удобства работы с моделсим, чтобы каждый раз при вызове моделсим не тратить время на вышеописанные рутинные операции.
  6. есть еще мелкие вопросики по modelsim. Есть файлик с модулем mod.v и его соотв. тесбенч mod_tb.v Что нужно написать в mod_tb.v чтобы 1.График сразу стал ZoomFull 2.Определенные регистры, обьявленные как беззнаковые, показывались как Decimal а не Bin (почему -то так по умолчанию).
  7. Господа, спасибо за помощь!!! Считываю файлы вот так. Проверено, работает.
  8. варантов я так понял два, $readmemh и $readmemb Первому значения в HEX надо скормить, второму в бинари А есть вариант считать и запихать в массив типа вот такого текстового файла? Просто переделывать 16800 точек в другую запись не очень хочется. -2,-1,13,23,16,12,7,0,8,1,-18,-16,-11,-10,-3,6
  9. да, дейтсвительно, пятница.... Тогда вопрос сразу - моделсим начал орать что неправильно декларировал массивы I_value Q_value. А как правильно? И еще вопрос - функция чтения массива из файла, допустим, вот такя $readmemb("dI.txt", I_value); по какому пути будет этот файл искать? Сунул dI.txt туда же где и файл тесбенча -ан нет, пишет * Warning: (vsim-7) Failed to open readmem file "dI.txt" in read mode. # # No such file or directory. (errno = ENOENT)
  10. Всем доброго времени суток Столкнулся с непонятно проблемой Ругается на строку integer i; Пишет вот что Error .... near "integer": syntax error, unexpected integer, expecting ';' or ',' Error .... (vlog-2730) Undefined variable: 'i'. Почему - мне не понятно. Буду благодарен за пояснения
  11. тогда так ;) outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+indata[31];
  12. Да, Вы правы. чтобы был "0" надо прибавить "1". outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+1;
  13. des00 Спасибо, интересно. Посмотрев Ваш код я не понял почему Вы так делаете outdata = indata >>> 8; а не так outdata = indata >> 8;
  14. на все отрицательные числа от -1 до -65355 результат будет "-1" а д.б. "0". кому это не критично - скорее всего так и делают.
  15. Всем доброго дня. Надо по сути 32-разрядное знаковое число сократить до 16-разрядного знакового. по сути это будет outdata_reg <= indata/65536; но поскольку на младших циклонах знак деления штука не экономная то написал так: module conv_sign_32to16 ( input clk, input signed [31:0] indata, output signed [15:0] outdata ); reg [15:0] outdata_reg; always @ (posedge clk) begin outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15); end //always assign outdata = outdata_reg; endmodule может есть способ элегантнее? Заранее спасибо.
  16. не могу понять следующее. Если я в настройках мегафункции выставляю что это дециматор на 12 то правильно ли я понимаю что никакой НЧ-фильтрации в соответствии с моими коэффициентами присходить не будет? Т.е. если я хочу правильно произвести децимацию сигнала то сначала надо поставить компонент с мегафункцией ФНЧ на часоту среза в два раза меньшей частоты децимации (в моем случает частота среза будет в 24 раза меньше часты семплирования), а затем ставить компонент мегафункции дециматора с коэффициентом децимации = 12 ?
  17. есть еще вопрос по мегафункции DSP FIR Compiler II v13 делаю ФНЧ, коэффициентов в матлабе получаю около сотни и загружаю их через текстовый файл в модуль мегафункции. Генерирую - вроде работает, кушает много умножителей и вентилей. Как только выставляю понадобившуюся децимацию, скажем R=12 то кол-во умножителей сокращается раза в 3, вентилей также. Вопросов два - 1. Почему включение децимации резко сокращает необходимое кол-во ресурсов и как пользоваться децимацией? В чём подвох? 2. При включенной децимации в какой момент считывать данные? Я обратил внимание что относительно тактирования входа каждый 12-й импульс на выходе ast_source_valid возникает импульс.
  18. а можно поподробнее с этого момента?
  19. Прошу помоши в создании файла SDC Читал-перечитывал TimeQuest для чайников но всё равно не могу догнать вроде как простых вещей. В проекте есть блок, который из входной частоты 120МГц делает другую частоту 20Мгц. Блок описан на Verilog, там по сути деление частоты на 6. Далее 20МГц расходиться на несколько других блоков. ВОпрос - как правильно описать эти 20МГЦ в sdc? Вот такую запись не воспринимает и пишет ошибку: create_clock -name "clkD" -period 20MHz -source [get_registers {clkconv:inst50|clkout}]
  20. Nick_K, трудно поспорить с перечисленными Вами пунктами. Пока мне не очень понятно насколько корректно будет работать описание внутри posegde и negedge если их засунуть в один posegde. Надо проверять, т.к. вычисление должно происходить за один такт. Я с плисиной и verilog еще сравнительно мало работаю.
  21. окно на 16 при таком способе худо-бедно но работает, на 32 окно пробовал - не работает. почему?
  22. Оптимизировал. Проверил, работает вроде также. P.S. Бегающий указатель "к" специально не обнуляю, в железе это само собой происходит, т.е. переполнения нет.
  23. stealthisname спасибо большое!!! есть еще идея оптимизировать в части for(i = FIFO_LEN-1; i > 0; i=i-1) begin FIFO[i] <= FIFO[i-1]; end Идея в том чтобы этого не делать сдвиг массива а организовать кольцевой буфер как посоветовал Eddy_Em
  24. Наверное я правильно понял что вот это dataout <= (FIFO[0]+FIFO[1]+FIFO[2]+FIFO[3]+FIFO[4]+FIFO[5]+FIFO[6]+FIFO[7]+FIFO[8]+FIFO[9]+FIFO[10]+FIFO[11]+FIFO[12]+FIFO[13]+FIFO[14]+FIFO[15])>>4; надо заменить на вот это dataout <= (dataout + FIFO[0]-FIFO[15])>>4; Другой вопрос что в Си-подобном языке dataout справа в скобках будет расценено как предыдущее значение а слева - как текущее значение. Так ли это будет в верилоге? (Я всё равно в железе проверю)
  25. Доброго времени суток! Нужна помощь в оптимизации кода на Verilog, среда разработки Quartus II 13.0.1 , плисина Циклон 3. Вход/выход 16-битный, клок 120МГц Размер окна фильтра на 16 точек module MovAverageFilter(clk,datain,dataout); input clk; input [15:0] datain; output reg [15:0] dataout; reg [15:0] FIFO [0:15]; integer i; initial begin for(i = 15; i >= 0; i=i-1) FIFO[i] = 16'd0; end always@(posedge clk) begin dataout <= (FIFO[0]+FIFO[1]+FIFO[2]+FIFO[3]+FIFO[4]+FIFO[5]+FIFO[6]+FIFO[7]+FIFO[8]+FIFO[9]+ FIFO[10]+FIFO[11]+FIFO[12]+FIFO[13]+FIFO[14]+FIFO[15])>>4; end always@(negedge clk) begin for(i = 15; i > 0; i=i-1) FIFO[i] <= FIFO[i-1]; FIFO[0] <= datain; end endmodule Есть желание увеличить размер окна с 16 до 32 или даже до 64 но тогда нужно будет больше сумматоров и я беспокоюсь за обеспечение синхронности схемы. Может есть более изящный вариант брать сумму точек в окне и делить на их кол-во?