4-Tap FIR Flter VHDL Error-HELP!!!!
4-Tap FIR Flter VHDL Error-HELP!!!!
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