OpenCores
URL https://opencores.org/ocsvn/wdsp/wdsp/trunk

Subversion Repositories wdsp

[/] [wdsp/] [trunk/] [rtl/] [vhdl/] [WISHBONE_IIR/] [Tworder.vhd] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 parrado
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
 
5
entity Tworder is
6
generic (WordWidth:integer;--:=16;--width signal of in/out
7
                        Bit_growth:integer;--:=8; 
8
                        M:integer;--:=16;--width word of coefs
9
                        Q:integer--:=15--Quantifer
10
                        );
11
 
12
port(
13
 
14
signal_input :in std_logic_vector(WordWidth+Bit_growth-1 downto 0);
15
a0,a1,a2,b0,b1,b2: in std_logic_vector(M-1 downto 0);
16
signal_output:out std_logic_vector(WordWidth+Bit_growth-1 downto 0);
17
clk,reset,clear,enable:in std_logic
18
 
19
);
20
end entity;
21
 
22 11 parrado
architecture typeII of Tworder is
23 5 parrado
--The fullregister component
24
component fullregister is
25
 
26
        generic
27
        (
28
                N: integer
29
        );
30
 
31
        port
32
        (
33
                clk               : in std_logic;
34
                reset_n   : in std_logic;
35
                enable    : in std_logic;
36
                clear             : in std_logic;
37
                d                 : in std_logic_vector(N-1 downto 0);
38
                q                 : out std_logic_vector(N-1 downto 0)
39
 
40
        );
41
end component;
42
 
43
signal signal_output_aux,signal_input_aux: std_logic_vector(M+Bit_growth+WordWidth-1 downto 0);
44
signal sum_in,sum_out_aux,sum_out: std_logic_vector((M+WordWidth+Bit_growth)-1 downto 0);
45
signal RegOut1,RegOut2,RegOut1_aux: std_logic_vector(WordWidth+Bit_growth-1 downto 0);
46
signal signal1_in,signal2_in,signal3_in,signal1_out,signal2_out,signal3_out : std_logic_vector(M+WordWidth+Bit_growth-1 downto 0);
47
 
48
begin
49
 
50
--EXTENSION DE SIGNO
51
signal_input_aux(WordWidth+Bit_growth+Q-1 downto Q)<=signal_input;
52
signal_input_aux(Q-1 downto 0)<=(others=>'0');
53
signal_input_aux(M+WordWidth+Bit_growth-1 downto WordWidth+Bit_growth+Q)<=(others=>signal_input(WordWidth+Bit_growth-1));
54
 
55
 
56
 
57
signal1_in<=std_logic_vector(signed(RegOut1)*signed(a1));
58
signal2_in<=std_logic_vector(signed(RegOut2)*signed(a2));
59
signal3_in<=signal_input_aux;
60
signal1_out<=std_logic_vector(signed(RegOut1)*signed(b1));
61
signal2_out<=std_logic_vector(signed(RegOut2)*signed(b2));
62
--signal3_out<=std_logic_vector(signed(sum_in_aux((WordWidth+Bit_growth-1)+Q downto Q))*signed(b0));
63
signal3_out<=std_logic_vector(signed(sum_in((WordWidth+Bit_growth-1)+Q downto Q))*signed(b0));
64
 
65
sum_in<=std_logic_vector(-(signed(signal1_in)) - (signed( signal2_in)) + signed(signal3_in));
66
sum_out<=std_logic_vector(signed(signal1_out)+ signed( signal2_out) + signed(signal3_out));
67
REG1:fullregister
68
generic map(
69
                N=>WordWidth+Bit_growth
70
)
71
        port map (
72
                clk=>clk,
73
                reset_n=>reset,
74
                enable=>enable,
75
                clear=>clear,
76
                d=>sum_in(WordWidth+Bit_growth+Q-1 downto Q),
77
                q=>RegOut1
78
                );
79
REG2:fullregister
80
generic map(
81
                N=>WordWidth+Bit_growth
82
)
83
        port map (
84
                clk=>clk,
85
                reset_n=>reset,
86
                enable=>enable,
87
                clear=>clear,
88
                d=>RegOut1,
89
                q=>RegOut2
90
                );
91
 
92
Reg_seg:fullregister
93
generic map(
94
                N=>M+WordWidth+Bit_growth
95
)
96
        port map (
97
                clk=>clk,
98
                reset_n=>reset,
99
                enable=>'1',
100
                clear=>clear,
101
                d=>sum_out,
102
                q=>sum_out_aux
103
                );
104
 
105
 
106
signal_output<=sum_out_aux((WordWidth+Bit_growth-1)+Q downto Q);-----OJO
107
 
108 11 parrado
end architecture;
109
 
110
 
111
architecture typeIII of Tworder is
112
--The fullregister component
113
component fullregister is
114
 
115
        generic
116
        (
117
                N: integer
118
        );
119
 
120
        port
121
        (
122
                clk               : in std_logic;
123
                reset_n   : in std_logic;
124
                enable    : in std_logic;
125
                clear             : in std_logic;
126
                d                 : in std_logic_vector(N-1 downto 0);
127
                q                 : out std_logic_vector(N-1 downto 0)
128
 
129
        );
130
end component;
131
 
132
signal signal_output_aux,signalV0_aux,signalV1_aux: std_logic_vector(M+Bit_growth+WordWidth-1 downto 0);
133
signal sum_V0, sum_V1,sum_out_aux,sum_out: std_logic_vector((M+WordWidth+Bit_growth)-1 downto 0);
134
signal RegOutV0,RegOutV1,signal_input_aux: std_logic_vector(WordWidth+Bit_growth-1 downto 0);
135
signal signal1_in,signal2_in,signal3_in,signal1_out,signal2_out,signal3_out : std_logic_vector(M+WordWidth+Bit_growth-1 downto 0);
136
 
137
begin
138
--
139
--/*Implementa una sección de segundo orden usando estructura directa tipo III*/
140
--delay_t sos_d3(const coeff_t *bk,const coeff_t *ak,delay_t *v,delay_t xn, uint8_t q){
141
--    acc_t yn;
142
--
143
--    /*Calcula salida*/
144
--    yn=(((acc_t)bk[0])*((acc_t)xn)+(((acc_t)v[0])<<q))>>q;
145
--
146
--    /*Actualización de la memoria del filtro*/
147
--    v[0]=(((acc_t)bk[1])*((acc_t)xn)-(((acc_t)ak[1])*((acc_t)yn))+(((acc_t)v[1])<<q))>>q;
148
--    v[1]=(((acc_t)bk[2])*((acc_t)xn)-(((acc_t)ak[2])*((acc_t)yn)))>>q;
149
--
150
--    /**Retorna salida*/
151
--    return yn;
152
--
153
--
154
--}
155
 
156
--EXTENSION DE SIGNO
157
signalV0_aux(WordWidth+Bit_growth+Q-1 downto Q)<=RegOutV0;
158
signalV0_aux(Q-1 downto 0)<=(others=>'0');
159
signalV0_aux(M+WordWidth+Bit_growth-1 downto WordWidth+Bit_growth+Q)<=(others=>RegOutV0(WordWidth+Bit_growth-1));
160
 
161
signalV1_aux(WordWidth+Bit_growth+Q-1 downto Q)<=RegOutV1;
162
signalV1_aux(Q-1 downto 0)<=(others=>'0');
163
signalV1_aux(M+WordWidth+Bit_growth-1 downto WordWidth+Bit_growth+Q)<=(others=>RegOutV1(WordWidth+Bit_growth-1));
164
 
165
 
166
 
167
 
168
 
169
 
170
 
171
signal1_in<=std_logic_vector(signed(signal_input)*signed(b0));
172
signal2_in<=std_logic_vector(signed(signal_input_aux)*signed(b1));
173
signal3_in<=std_logic_vector(signed(signal_input_aux)*signed(b2));
174
 
175
 
176
 
177
 
178
signal2_out<=std_logic_vector(signed(sum_out_aux((WordWidth+Bit_growth-1)+Q downto Q))*signed(a1));
179
signal3_out<=std_logic_vector(signed(sum_out_aux((WordWidth+Bit_growth-1)+Q downto Q))*signed(a2));
180
 
181
sum_V0<=std_logic_vector(-(signed(signal2_out)) + (signed( signal2_in)) + signed(signalV1_aux));
182
sum_V1<=std_logic_vector(-(signed(signal3_out)) + (signed( signal3_in)));
183
 
184
 
185
sum_out<=std_logic_vector(signed(signal1_in)+ signed( signalV0_aux));
186
 
187
 
188
REG1:fullregister
189
generic map(
190
                N=>WordWidth+Bit_growth
191
)
192
        port map (
193
                clk=>clk,
194
                reset_n=>reset,
195
                enable=>enable,
196
                clear=>clear,
197
                d=>sum_V0(WordWidth+Bit_growth+Q-1 downto Q),
198
                q=>RegOutV0
199
                );
200
 
201
 
202
REG2:fullregister
203
generic map(
204
                N=>WordWidth+Bit_growth
205
)
206
        port map (
207
                clk=>clk,
208
                reset_n=>reset,
209
                enable=>enable,
210
                clear=>clear,
211
                d=>sum_V1(WordWidth+Bit_growth+Q-1 downto Q),
212
                q=>RegOutV1
213
                );
214
 
215
Reg_seg1:fullregister
216
generic map(
217
                N=>M+WordWidth+Bit_growth
218
)
219
        port map (
220
                clk=>clk,
221
                reset_n=>reset,
222
                enable=>'1',
223
                clear=>clear,
224
                d=>sum_out,
225
                q=>sum_out_aux
226
                );
227
 
228
Reg_seg2:fullregister
229
generic map(
230
                N=>WordWidth+Bit_growth
231
)
232
        port map (
233
                clk=>clk,
234
                reset_n=>reset,
235
                enable=>'1',
236
                clear=>clear,
237
                d=>signal_input,
238
                q=>signal_input_aux
239
                );
240
 
241
 
242
signal_output<=sum_out_aux((WordWidth+Bit_growth-1)+Q downto Q);-----OJO
243
 
244 5 parrado
end architecture;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.