реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> CIC фильтры
feex
сообщение Mar 25 2008, 22:49
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 22-04-07
Пользователь №: 27 237



всем привет.
нужно какое-нибудь vhdl-описание данных фильтров. кто-нибудь знает, где его можно откопать?
Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Mar 26 2008, 07:44
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



Делают на основе FIR-фильтров. У меня Была где-то альтepoвская библиотека. Могу скинуть если 0чень надо


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post
alex_os
сообщение Mar 26 2008, 08:14
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Цитата(feex @ Mar 26 2008, 01:49) *
всем привет.
нужно какое-нибудь vhdl-описание данных фильтров. кто-нибудь знает, где его можно откопать?

a чего там делать? Один аккумулятор один регистр и один вычитатель?
Типа такого (это интерполятор 3го порядка):
Код
library ieee;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use work.tx_dvbt.all;  

entity CIC_filtr is
port
(
        reset:   in std_logic;
        clk:     in std_logic;     
        
        in_re:  in std_logic_vector(11 downto 0);
        in_im:  in std_logic_vector(11 downto 0);
        in_ena: in std_logic;
                
        out_re: out std_logic_vector(15 downto 0);
        out_im: out std_logic_vector(15 downto 0)
                
);
end CIC_filtr;

architecture cic_a of CIC_filtr is
     constant P: integer:=3; -- CIC order

     type tWordArray is array (integer range<>) of std_logic_vector(15 downto 0);
    
     signal dstages_re: tWordArray(0 to P-1);
     signal dstages_im: tWordArray(0 to P-1);
    
     signal astages_re: tWordArray(0 to P);
     signal astages_im: tWordArray(0 to P);
         
     signal outd_re:  tWordArray(0 to P);
     signal outd_im:  tWordArray(0 to P);
    
    
    
begin
    G1:
    for k in 0 to P-1 generate
            sub16re_insts:
            sub16 port map
            (
                    aclr => reset,
                    clock => clk,
                    dataa => outd_re(k),
                    datab    => dstages_re(k),
                    result=> outd_re(k+1)
            );
            
            sub16im_insts:
            sub16 port map
            (
                aclr => reset,
                    clock => clk,
                    dataa => outd_im(k),
                    datab    => dstages_im(k),
                    result=> outd_im(k+1)
            );
            
            acc16re_insts:
            acc16 port map
            (
                aclr => reset,             
                    clock => clk,
                    data=> astages_re(k),  
                    result=> astages_re(k+1)
            );

            acc16im_insts:
            acc16 port map
            (
            aclr => reset,             
                clock => clk,
                data=> astages_im(k),  
                result=> astages_im(k+1)
            );
            
    end generate G1;


        diff_stages:
        process(clk, reset)
        begin
            if reset='1' then
                
                for i in 0 to P-1 loop
                    dstages_re(i)<=(others=>'0');                 
                    dstages_im(i)<=(others=>'0');                                     
        --            astages_re(i)<=(others=>'0');                 
        --            astages_im(i)<=(others=>'0');                                         
                end loop;
                                
                outd_re(0) <= (others=>'0');
                outd_im(0) <= (others=>'0');
                
            else
            
                if in_ena='0' then
                    null;
                elsif rising_edge(clk) then
                
                    outd_re(0) <= in_re(11)&in_re(11)&in_re(11)&in_re(11)&in_re;
                    outd_im(0) <= in_im(11)&in_im(11)&in_im(11)&in_im(11)&in_im;
                    
                    for i in 0 to P-1 loop
                         dstages_re(i) <= outd_re(i);
                         dstages_im(i) <= outd_im(i);                          
                    end loop;    
                    
                    
                end if;
                
            end if;    
        end process;
        
        astages_re(0) <= outd_re(P) when in_ena='1' else
                                         (others=>'0');     
        
        astages_im(0) <=  outd_im(P) when in_ena='1' else
                                         (others=>'0');     
        
        out_re <= astages_re(P);
        out_im <= astages_im(P);
        
end architecture cic_a;


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
feex
сообщение Mar 26 2008, 19:39
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 22-04-07
Пользователь №: 27 237



eugen_pcad_ru, если можешь, дай, плз
alex_os, пасиба, надо разбираться, а вообще нужно конкретно дециматор с 5-ю каскадами

а вообще, кто-нибудь может еще ссылок или доков дать по теме более-менее хороших?
Go to the top of the page
 
+Quote Post
alex_os
сообщение Mar 27 2008, 06:30
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Цитата(feex @ Mar 26 2008, 22:39) *
eugen_pcad_ru, если можешь, дай, плз
alex_os, пасиба, надо разбираться, а вообще нужно конкретно дециматор с 5-ю каскадами

а вообще, кто-нибудь может еще ссылок или доков дать по теме более-менее хороших?

Если дециматор 5-го порядка , то читай даташит на AD6620 smile.gif


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
fontp
сообщение Mar 27 2008, 08:21
Сообщение #6


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Копайте альтеровский CIC-компайлер

http://www.altera.com/products/ip/dsp/ipm-index.jsp

поиском через раздел "как декодировать IP-core" )))
Go to the top of the page
 
+Quote Post
feex
сообщение Mar 27 2008, 18:23
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 22-04-07
Пользователь №: 27 237



так, тупой вопрос))))
в структурных схемах дециматора есть кружки, сумматоры, а есть сумматоры с входами обозначенными "+" и "-". что это такое? =))
Go to the top of the page
 
+Quote Post
vladv
сообщение Mar 27 2008, 20:48
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 7-06-06
Пользователь №: 17 825



Цитата(feex @ Mar 27 2008, 21:23) *
так, тупой вопрос))))
в структурных схемах дециматора есть кружки, сумматоры, а есть сумматоры с входами обозначенными "+" и "-". что это такое? =))

Вычитатели.
Go to the top of the page
 
+Quote Post
feex
сообщение Mar 27 2008, 22:30
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 22-04-07
Пользователь №: 27 237



vladv, типа, число, поданое на вход "+" уменьшаемое, на "-" вычитаемое?
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Mar 28 2008, 05:12
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(feex @ Mar 28 2008, 01:30) *
vladv, типа, число, поданое на вход "+" уменьшаемое, на "-" вычитаемое?

Прикрепленные файлы
Прикрепленный файл  cic.pdf ( 130.91 килобайт ) Кол-во скачиваний: 137
 
Go to the top of the page
 
+Quote Post
Tue
сообщение Mar 28 2008, 08:29
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



feex, советую почитать книгу "DSP With Field Programmable Gate Arrays - U Meyer-Baese - Springer". Там есть и краткая теория таких фильтров, и примеры на VHDL, плюс еще много всего там есть. Если не найдете книгу - пишите, вышлю.
Go to the top of the page
 
+Quote Post
Tue
сообщение Mar 30 2008, 19:18
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



feex, кстати используя МАТЛАБ можете построить CIC-фильтр нужного порядка, а также перевести в фиксированную точку оптимальнейшим образом. Задав выходную разрядность МАТЛАБ сам подберет минимальную разрядность промежуточных звеньев, как в оригинальной статье Хогенауэра (шум квантования вносимый промежуточными звеньями не превысит шума квантования выходной разрядности). Ну и соответственно HDL код создать без проблемм.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 18:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016