Jump to content

    

Halfback

Участник
  • Content Count

    368
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Halfback

  • Rank
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Recent Profile Visitors

3640 profile views
  1. тогда так ;) outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+indata[31];
  2. Да, Вы правы. чтобы был "0" надо прибавить "1". outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+1;
  3. des00 Спасибо, интересно. Посмотрев Ваш код я не понял почему Вы так делаете outdata = indata >>> 8; а не так outdata = indata >> 8;
  4. на все отрицательные числа от -1 до -65355 результат будет "-1" а д.б. "0". кому это не критично - скорее всего так и делают.
  5. Всем доброго дня. Надо по сути 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 может есть способ элегантнее? Заранее спасибо.
  6. не могу понять следующее. Если я в настройках мегафункции выставляю что это дециматор на 12 то правильно ли я понимаю что никакой НЧ-фильтрации в соответствии с моими коэффициентами присходить не будет? Т.е. если я хочу правильно произвести децимацию сигнала то сначала надо поставить компонент с мегафункцией ФНЧ на часоту среза в два раза меньшей частоты децимации (в моем случает частота среза будет в 24 раза меньше часты семплирования), а затем ставить компонент мегафункции дециматора с коэффициентом децимации = 12 ?
  7. есть еще вопрос по мегафункции DSP FIR Compiler II v13 делаю ФНЧ, коэффициентов в матлабе получаю около сотни и загружаю их через текстовый файл в модуль мегафункции. Генерирую - вроде работает, кушает много умножителей и вентилей. Как только выставляю понадобившуюся децимацию, скажем R=12 то кол-во умножителей сокращается раза в 3, вентилей также. Вопросов два - 1. Почему включение децимации резко сокращает необходимое кол-во ресурсов и как пользоваться децимацией? В чём подвох? 2. При включенной децимации в какой момент считывать данные? Я обратил внимание что относительно тактирования входа каждый 12-й импульс на выходе ast_source_valid возникает импульс.
  8. а можно поподробнее с этого момента?
  9. Прошу помоши в создании файла SDC Читал-перечитывал TimeQuest для чайников но всё равно не могу догнать вроде как простых вещей. В проекте есть блок, который из входной частоты 120МГц делает другую частоту 20Мгц. Блок описан на Verilog, там по сути деление частоты на 6. Далее 20МГц расходиться на несколько других блоков. ВОпрос - как правильно описать эти 20МГЦ в sdc? Вот такую запись не воспринимает и пишет ошибку: create_clock -name "clkD" -period 20MHz -source [get_registers {clkconv:inst50|clkout}]
  10. Nick_K, трудно поспорить с перечисленными Вами пунктами. Пока мне не очень понятно насколько корректно будет работать описание внутри posegde и negedge если их засунуть в один posegde. Надо проверять, т.к. вычисление должно происходить за один такт. Я с плисиной и verilog еще сравнительно мало работаю.
  11. окно на 16 при таком способе худо-бедно но работает, на 32 окно пробовал - не работает. почему?
  12. Оптимизировал. Проверил, работает вроде также. P.S. Бегающий указатель "к" специально не обнуляю, в железе это само собой происходит, т.е. переполнения нет.
  13. stealthisname спасибо большое!!! есть еще идея оптимизировать в части for(i = FIFO_LEN-1; i > 0; i=i-1) begin FIFO[i] <= FIFO[i-1]; end Идея в том чтобы этого не делать сдвиг массива а организовать кольцевой буфер как посоветовал Eddy_Em
  14. Наверное я правильно понял что вот это 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 справа в скобках будет расценено как предыдущее значение а слева - как текущее значение. Так ли это будет в верилоге? (Я всё равно в железе проверю)
  15. Доброго времени суток! Нужна помощь в оптимизации кода на 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 но тогда нужно будет больше сумматоров и я беспокоюсь за обеспечение синхронности схемы. Может есть более изящный вариант брать сумму точек в окне и делить на их кол-во?