Hier mal aus dem Buch den VHDL-Code eines FIR-Filters mit den 4
Koeffizienten: -1, 3.75, 3.75, -1
1 | PACKAGE eight_bit_int IS -- User defined types
|
2 | SUBTYPE BYTE IS INTEGER RANGE -128 TO 127;
|
3 | TYPE ARRAY_BYTE IS ARRAY (0 TO 3) OF BYTE;
|
4 | END eight_bit_int;
|
5 |
|
6 | LIBRARY work;
|
7 | USE work.eight_bit_int.ALL;
|
8 |
|
9 | LIBRARY ieee;
|
10 | USE ieee.std_logic_1164.ALL;
|
11 | USE ieee.std_logic_arith.ALL;
|
12 |
|
13 | ENTITY fir_srg IS ------> Interface
|
14 | PORT (clk : IN STD_LOGIC;
|
15 | x : IN BYTE;
|
16 | y : OUT BYTE);
|
17 | END fir_srg;
|
18 |
|
19 | ARCHITECTURE flex OF fir_srg IS
|
20 |
|
21 | SIGNAL tap : ARRAY_BYTE; -- Tapped delay line of bytes
|
22 |
|
23 | BEGIN
|
24 |
|
25 | p1: PROCESS ------> Behavioral Style
|
26 | BEGIN
|
27 | WAIT UNTIL clk = '1';
|
28 | -- Compute output y with the filter coefficients weight.
|
29 | -- The coefficients are [-1 3.75 3.75 -1].
|
30 | -- Multiplication and division for Altera VHDL are only
|
31 | -- allowed for powers of two!
|
32 | y <= 2 * tap(1) + tap(1) + tap(1) / 2 + tap(1) / 4
|
33 | + 2 * tap(2) + tap(2) + tap(2) / 2 + tap(2) / 4
|
34 | - tap(3) - tap(0);
|
35 | FOR I IN 3 DOWNTO 1 LOOP
|
36 | tap(I) <= tap(I-1); -- Tapped delay line: shift one
|
37 | END LOOP;
|
38 | tap(0) <= x; -- Input in register 0
|
39 | END PROCESS;
|
40 |
|
41 | END flex;
|
Vielleicht nützt dir das was, kannst dich ja mal versuchen
reinzufuchsen. Mich brauchst du zu dem Code nicht zu fragen, hab mich
(noch) nicht gross mit dem Buch beschäftigt...