Jump to content

    

desmond breezey

Участник
  • Content Count

    82
  • Joined

  • Last visited

Community Reputation

0 Обычный

About desmond breezey

  • Rank
    Частый гость
  1. Что-то я провтыкал один момент... Вот я сгенерировал корректирующий КИХ в Матлабе, и моделирую прохождение синуса через него во все том же Матлабе. При использовании арифметики с плавающей точкой все нормально. Ставлю фиксированную точку - получаю такое непотребство. Это что, так ошибки квантования проявляются? Что читать, чтобы это исправить? Ну или может кто может вкратце пояснить,что да как. На самом деле, последний вариант сейчас предпочтительнее, поскольку в данный момент время поджимает, а вопрос для меня сам по себе интересный,и я хочу потом с ним разобраться (и полифазник хочу потом добить все же). Короче, хорошо было бы рассказать коротко, что почем,и литературу какую-нибудь, чтобы потом внимательно изучить.
  2. Цитата(Golikov A. @ Dec 8 2014, 21:34) и что? А у вас фильтр каких частот и почему? У меня фильтр нижних частот. Мне нужны данные только в полосе от 0 до 5 МГц, частота среза 10 МГц. CIC и КИХ под это настроены. Такая фильтрация нужна потому, что при децимации происходят изменения в спектре сигнала, и чтобы не было наложений в спектре,сигнал надо фильтровать фильтром нижних частот.
  3. Цитатаоткуда берется задача децимации Для убирания избыточной дискретизации. Есть минимум, но максимума то нет... Вроде,это используется в архиваторах.
  4. Цитата(Golikov A. @ Dec 8 2014, 21:19) зачем вам CIC а потом КИХ? зачем вообще КИХ? CIC дает сильное усиление в полосе пропускания и не очень хорошо подавляет в полосе подавления, и для приведения АЧХ в соответствие с требованиями нужен КИХ... Цитата(Golikov A. @ Dec 8 2014, 21:19) почему нельзя просто КИХ? Нерационально. Цитата(Golikov A. @ Dec 8 2014, 21:19) зачем вообще КИХ? В простейшем случае, КИХ - это усреднитель.... То есть, даже в таком варианте он подрезает высокочастотные составляющие.
  5. Благодарю за проявленное терпение и помощь. Цитата(Golikov A. @ Dec 8 2014, 20:50) обидно что под 11 страницами темы пропали все идеи зачем это все надо, Что вы имеете в виду?
  6. Я использую не Моделсим, а симулятор ISE.
  7. Цитата(Golikov A. @ Dec 8 2014, 20:37) В общем скачал ваши файлы запустил симуляцию и что я вижу? по восходящему сигналу у вас фильтр засасывает значение filter_in, а чему оно у вас равно в 0 момент? правильно ничему.... отсюда у вас все U и поехали... нету в вашем кейзе 0 состояния... Если честно, не понял. i=1 изначально, и отсчет в case идет с 1. В чем проблема? Ааааа, я понял кажется. Вы имеете в виду, что надо сделать что-то такое:Код filter_in : IN  std_logic_vector(7 downto 0) := (others=>'0') ?
  8. Цитата(Golikov A. @ Dec 8 2014, 20:10) а линий задержки гребенки? вы имя переменной не перепутали? Если все задано, то откуда U? КодARCHITECTURE fpga OF cic3r6 IS SUBTYPE word15 IS STD_LOGIC_VECTOR(15 DOWNTO 0); TYPE STATE_TYPE IS (hold, sample); SIGNAL state : STATE_TYPE; SIGNAL count : INTEGER RANGE 0 TO 5; SIGNAL x : STD_LOGIC_VECTOR(7 DOWNTO 0) :=(OTHERS => '0'); SIGNAL sxtx : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL i0, i1 , i2 : word15 := (OTHERS=>'0'); SIGNAL i2d1, i2d2, c1, c0 : word15 := (OTHERS=>'0'); SIGNAL c1d1, c1d2, c2 : word15 := (OTHERS=>'0'); SIGNAL c2d1, c2d2, c3 : word15 := (OTHERS=>'0');
  9. А,вот вы о чем... Начальные состояния регистров CIC задаются так КодSIGNAL x : STD_LOGIC_VECTOR(7 DOWNTO 0) :=(OTHERS => '0'); (прочие так же)
  10. Цитата(des00 @ Dec 8 2014, 19:19) подозреваю что в звене acc цик фильтра в начальный момент времени сигнал U, поэтому и такой результат. смотрите в симуляторе что там происходит Не уверен, что понял вас правильно. Не могли бы пояснить, что конкретно вы имели в виду? Цитата(Golikov A. @ Dec 8 2014, 19:26) мда.... Что такое? Я ж говорю - точно не знаю. А те посты они были написаны с некоторой разницей во времени. а на входе он как меняется? на всех входных линиях, все клоки, разрешения есть? ресеты сняты? Что такое? Я ж говорю - точно не знаю. А те посты они были написаны с некоторой разницей во времени. На входе меняется правильно.
  11. Цитата(Golikov A. @ Dec 8 2014, 18:37) проследите весь путь данных. вход в КИХ фильтр - выход с КИХ фильтра, результат ожидаемый? вход CIC - выход CIC результат ожидаемый? Я уже это сделал, постом выше. Там я указал, что на выходе CIC сигнал uninitialized ('U'). Соответственно, что можно сказать о входе-выходе КИХ, если даже с CIC выходит ерунда. По поводу что такое sxtx <= x (x'high) я тоже выше уже писал.
  12. Мне срочно нужна какая-нибудь наводка, что не так,времени почти не осталось.... КИХ фильтр по идее правильно написан - я уже до этого писал такой фильтр и проверял его дельта функцией, он работал правильно. CIC я взял из указанной книжки, там тоже вроде как нет ошибок. Значит, я что-то не так делаю с чертовой симуляцией. Но не знаю что. Как говорил мой учитель истории в школе : "главное не знать, а знать, где посмотреть". Проблема в том, что я не знаю, где посмотреть....
  13. Некоторые мысли появились. Сигнал на выходе не видно, потому что собственно я ничего, как это называется по буржуйски,uninitialized (не знаю, как по русски). Короче, надо было добавить изменение сигнала сброса. Вот так я сделал: Кодsignal reset : std_logic :='1';   res: process   begin   for i in 0 to 100 loop   wait until clk='1' and clk'event;   end loop;   reset <='0';wait;   end process res; Теперь вместо "Х" вижу в симуляторе нули на выходе Я так же добавил еще один сигнал на выход, который показывает как меняется сигнал на выходе CIC. Он имеет статус uninitialized. Я уже окончательно потерялся...
  14. Цитата(Golikov A. @ Dec 8 2014, 01:01) чую вам надо просто не мешать... Это как? Цитата(Golikov A. @ Dec 8 2014, 01:01) чую вам надо просто не мешать... но еще раз повторю мысль середины темы... чтобы что-то сделать надо понять что вы делаете, надо понять что вы хотите. Трудно написать тестбенч если не знаете какой вы ожидаете выход для какого входа Тут вроде все понятно: у CIC 3 входа ( тактовый, сброс и данные) и 2 выхода ( тактовый и данные ). Тактовый на выходе меняется в 6 раз медленнее входного и им тактируется FIR. У FIR 3 входа и 1 выход. Входы такие же, выход только с информацией. Ага, я понял. Тот тактовый сигнал, что передается от CIC - им надо не тактировать FIR, а использовать его как сигнал разрешения, то есть, когда он равен 1, то FIR должен забирать с выхода CIC отсчет, а когда 0 - нет. А тактировать надо обычным клоком. Зараза, все равно не работает. Печалька... И не очень понятна эти строки, остальные вроде осознал Кодsxt: PROCESS (x) BEGIN sxtx(7 DOWNTO 0) <= x; FOR k IN 25 DOWNTO 8 LOOP sxtx(k) <= x(x’high); END LOOP; END PROCESS sxt; В первые 8 бит sxtx записываем входной отсчет, а что записывается в остальные 18? (sxtx 26 разрядная шина) Очевидно, это происходит здесь sxtx(k) <= x(x’high); ,но запись x(x’high) выглядит для меня весьма загадочно. Поправьте,если ошибаюсь - получается, что прочие разряды sxtx заполняются тем же,что было в последнем разряде х (что-то там'high - обозначение верхней границы чего-то там,нет?) Проблема все же видимо не в тестбенче, а в фильтре...