Jump to content

    

blackfin

Свой
  • Content Count

    3221
  • Joined

  • Last visited

Community Reputation

0 Обычный

About blackfin

  • Rank
    Гуру

Контакты

  • Сайт
    http://
  • ICQ
    0

Recent Profile Visitors

6512 profile views
  1. С чего это вдруг? Вот диаграммы чтения и записи burst'ами по 8 слов типовой DDR3 памяти Micron'а: Никаких особых проблем ни на чтении, ни на записи не видно..
  2. Берем квадратный экран 500х500. Читаем burst'ом во внутреннюю SRAM FPGA из внешней DDR пиксели: 1-ая строка: (0,0), (0,1),(0,2),(0,3),...,(0,499); 2-ая строка: (1,0), (1,1),(1,2),(1,3),...,(1,499); 3-я строка: (2,0), (2,1),(2,2),(2,3),...,(2,499); ... 8-ая строка: (7,0), (7,1),(7,2),(7,3),...,(7,499). Пишем burst'ом по 8 beats во внешнюю DDR из внутренней SRAM пиксели: 1-ый столбец: (0,0), (1,0),(2,0),(3,0),...,(7,0); 2-ой столбец: (0,1), (1,1),(2,1),(3,1),...,(7,1); ... 459-ый столбец: (0,459), (1,459),(2,459),(3,459),...,(7,459). Повторяем эту операцию для всех 500 строк. Читаем burst'ом из внешней DDR полученные пиксели по строкам и выводим их во внешний порт..
  3. Можно сделать внутри FPGA буфер на восемь строк и сохранять во внешней памяти уже повернутые пиксели burst'ами по восемь пикселей за одно обращение к памяти.
  4. Вот мой вариант решения: #include "stdafx.h" unsigned char src[25] = {46,46,46,46,46,46,46,46,46,46,46,46,46,11,10,9,8,7,6,5,4,3,2,1,0}; unsigned char bits; unsigned char freq; int _tmain(int argc, _TCHAR* argv[]) { int i,j; bits = 0; for (i = 0; i < 8; i++) { freq = 0; for (j = 0; j < 25; j++) { freq += (src[j] >> i) & 1; } if (freq > 12) bits |= (1 << i); } freq = 0; for (j = 0; j < 25; j++) if (bits == src[j]) freq++; if (freq > 12) printf("Most frequent src = %d",bits); else printf("Most frequent src not found!"); return 0; } За три такта на верилоге можно посчитать, КМК.. :)
  5. У вас с выходов двух DDS идут в первом приближении четыре сигнала: A1_sweep(t) = A1*sin(ω1*t), S1_spur(t) = S1*sin(ωs1*t), A2_sweep(t) = A2*sin(ω2*t), S2_spur(t) = S2*sin(ωs2*t). На выходе смесителя будут сигналы: S_mixer(t) = [A1*sin(ω1*t)+S1*sin(ωs1*t)]*[A2*sin(ω2*t)+S2*sin(ωs2*t)] = A1*A2*sin(ω1*t)*sin(ω2*t) + A1*S2*sin(ω1*t)*sin(ωs2*t) + A2*S1*sin(ω2*t)*sin(ωs1*t) + ... S_mixer(t) = A1*A2*[cos(ω1*t - ω2*t) - cos(ω1*t + ω2*t)]/2 + A1*S2*[cos(ω1*t - ωs2*t) - cos(ω1*t + ωs2*t)]/2 + A2*S1*[cos(ω2*t - ωs1*t) - cos(ω2*t + ωs1*t)]/2 + ... На выходе ФНЧ у вас останутся гармоники: S_LPF(t) = A1*A2*cos(ω1*t - ω2*t)/2 + A1*S2*cos(ω1*t - ωs2*t)/2 + A2*S1*cos(ω2*t - ωs1*t)/2 + ... Если частота спуров в каждый момент времени приблизительно равна частоте сигналов, то есть, если: ωs1 ≈ ω1 ωs2 ≈ ω2 То в спектре появятся линии расположенные рядом с частотой: ω = ω1 - ω2
  6. А что вы называете "бородой"?
  7. У цифрового ЛЧМ на выходе DDS могут в сигнале присутствовать спуры. Их амплитуда определенно зависит от уровня сигнала и от разрядности DDS в котором формируется ЛЧМ.
  8. ТС задал вопрос в разделе ARM, 32bit. А раз так, то можно считать, что аппаратного умножителя int64 = int32*int32 в этом ARM'е нет. Поэтому компилятор преобразует одно умножение int32*int32 в четыре умножения int16*int16 и три сложения. Кроме того, для вычисления остатка от деления на 10 вам понадобится ещё одно умножение на 10 и ещё одно вычитание. Итого, для вычисления одного десятичного разряда вам понадобится 5 умножений и 4 сложения. Не слишком то эффективный код.. :) Меж тем, существует простой алгоритм вычисления BCD в котором используются только сравнения и вычитания. И есть еще один простой алгоритм, в котором используются только сравнения, сложения и сдвиги. Никаких 32-х битных умножений (или делений) для этих алгоритмов не нужно.. ;)
  9. Для ответа на вопрос ТС этого недостаточно. Сначала нужно преобразовать int32 в BCD. Сможете это сделать "за 2 минуты" не используя операцию деления? ;)
  10. Нужно сделать все пины (кроме входного clock'а) виртуальными.
  11. А при чем тут две лампы? Я имел ввиду тезис: Вполне себе законченное утверждение....
  12. И как из этого следует, что P' > P/2 ?
  13. Какая-то у вас странная математика.. P' = (U/2) * (I/2 + dI) = U*I/4 + ... = P/4 + ... Температура, кстати, будет отличаться не сильно. Если мощность упадет в два раза, то температура нити упадет в 2^(1/4) = 1,2 раза. То есть, с 2400K до 2000K.
  14. Так для вольфрама уже при T > 500°C ошибка этой формулы будет меньше 10%. То есть, по "точной" формуле: R = ρ * [1 + α * (T - 293°K)]. По приближенной формуле: R' = ρ * [α * T]. Относительная погрешность: ΔR/R = (R - R')/R = [1 - α * 293°K]/[1 + α * (T - 293°K)]. Для вольфрама: α = 4,5e-3 [1/°K]. Получаем, при T = 500°C: ΔR/R = -0,3185/3,16 = -0,101. при T = 1000°C: ΔR/R = -0,3185/[1 + 4,41] = -0,059. при T = 2000°C: ΔR/R = -0,3185/[1 + 8,91] = -0,032. при T = 3000°C: ΔR/R = -0,3185/[1 + 13,41] = -0,022.
  15. Хмм.. Pизл ~T^4 Rлампы ~T Откуда: Rлампы ~Pизл^(1/4) С другой стороны: Pизл = U^2/Rлампы Откуда: Pизл ~U^2/Pизл^(1/4) или: Pизл^(5/4) ~U^2 или: Pизл ~U^(8/5) Откуда: Pизл(U/2) = (1/2)^(8/5) * Pизл(U) = 0.33 * Pизл(U).