Escolar Documentos
Profissional Documentos
Cultura Documentos
Password
Log in
Register
Lost password?
Resend activation?
Remember Me?
Forum
New Posts Blogs
Activity Stream
Unansw ered Posts What's New?
Search
FAQ
Help
Rules
Com m unity
Groups
Albums
Forum Actions
Forum
Results 1 to 3 of 3
Search Thread
08-04-10, 18:41
#1
vampiro
Newbie level 3 Join Date: Posts: Helped: Feb 2010 4 0/0
FOR i IN n-2 DOWNTO 0 LOOP FOR j IN m-1 DOWNTO 0 LOOP reg(i)(j) <= '0'; END LOOP; END LOOP; ELSIF (clk'EVENT AND clk = '1') THEN acc := coef(0)*x; FOR i IN 1 TO n-1 LOOP sign := acc(2*m-1); prod := coef(i) * reg(n-1-i); acc := acc + prod; IF (sign=prod(prod'left)) AND (acc(acc'left) /= sign)THEN acc := (acc'LEFT => sign, OTHERS => NOT sign); END IF; END LOOP; reg<= x & reg(n-2 DOWNTO 1); END IF; y<= acc; END PROCESS; END rt1;
Reply With Quote
09-04-10, 08:58
#2
devas
Full Member level 2 Join Date: Posts: Helped: Jun 2009 129 40 / 40
07-06-10, 19:39
#3
MarcosMedeiros
Newbie level 2
end Fir_Circular_Fixo; architecture Behavioral of Fir_Circular_Fixo is TYPE Registradores IS ARRAY (8-2 DOWNTO 0) OF UFIXED ((2+6-1) DOWNTO 0); TYPE Coeficientes IS ARRAY (8-1 DOWNTO 0) OF UFIXED (2-1 DOWNTO -6); SIGNAL Vetor_Retardo: Registradores; SIGNAL m: INTEGER := 2; -- Nmero de bits das entradas e dos coeficientes SIGNAL NumCoef: INTEGER := 8; -- Nmero de coeficientes SIGNAL dec: INTEGER := 6; -- Nmero de bits da parte decimal do nmero CONSTANT Coef : Coeficientes := ("00000000", "01000000", "10000000", "11100000", -- Impulso "11000000", "10000000", "01000000", "00000000"); ----------------------------------------------------------------------------------------------------------------BEGIN PROCESS (ClockFIR, Reset) VARIABLE accum, prod: UFIXED(2*2-1 DOWNTO -(2*6));- := (OTHERS => '0'); VARIABLE sinal : STD_LOGIC; BEGIN -- Reset: Zera a linha de retardo do filtro FIR IF (Reset = '1') THEN FOR i IN 8-2 DOWNTO 0 LOOP FOR j IN (2+6)-1 DOWNTO 0 LOOP Vetor_Retardo (i)(j) <= '0'; END LOOP; END LOOP; -- Incrementa o estado e desloca o vetor de retardo. ELSIF (ClockFIR'EVENT AND ClockFIR = '1') THEN accum := coef(0) * x; FOR ii IN 1 TO 8-1 LOOP sinal := accum(2*m-1); prod := coef(ii) * Vetor_Retardo(NumCoef-1-ii); accum := resize(accum + prod, y'high, y'low); -- Verificao de overflow IF (sinal = prod(prod'LEFT)) AND (accum(accum'LEFT) /= sinal) THEN accum := (accum'LEFT => sinal, OTHERS => NOT sinal); END IF; END LOOP; Vetor_Retardo <= x & Vetor_Retardo(8-2 DOWNTO 1); END IF; y <= accum; END PROCESS;
end Behavioral;
-- Edaboard Classic