##// END OF EJS Templates
(MINI-LFR) MINI-LFR_testMS_v2...
pellion -
r404:bd28120c33d2 JC
parent child
Show More
@@ -98,14 +98,14 BEGIN -- beh
98 98 BEGIN
99 99 IF HRESETn = '0' THEN
100 100 reg_ftt.MEM_IN_SM_wData <= (OTHERS => '0');
101
101 102 reg_ftt.MEM_IN_SM_wen <= (OTHERS => '1');
102
103 reg_ftt.out_ren <= (OTHERS => '1');
103 reg_ftt.out_ren <= (OTHERS => '1');
104 104
105 105 ELSIF HCLK'EVENT AND HCLK = '1' THEN -- rising clock edge
106 106
107 107 reg_ftt.MEM_IN_SM_wen <= (OTHERS => '1');
108 reg_ftt.out_ren <= (OTHERS => '1');
108 reg_ftt.out_ren <= (OTHERS => '1');
109 109
110 110 paddr := "000000";
111 111 paddr(7 DOWNTO 2) := apbi.paddr(7 DOWNTO 2);
@@ -142,13 +142,21 BEGIN -- beh
142 142 WHEN "000010" => reg_ftt.MEM_IN_SM_wData(32*3-1 DOWNTO 32*2) <= apbi.pwdata(31 DOWNTO 0);
143 143 WHEN "000011" => reg_ftt.MEM_IN_SM_wData(32*4-1 DOWNTO 32*3) <= apbi.pwdata(31 DOWNTO 0);
144 144 WHEN "000100" => reg_ftt.MEM_IN_SM_wData(32*5-1 DOWNTO 32*4) <= apbi.pwdata(31 DOWNTO 0);
145 WHEN "000101" => reg_ftt.MEM_IN_SM_wen <= apbi.pwdata(4 DOWNTO 0);
145 WHEN "000101" => reg_ftt.MEM_IN_SM_wen <= apbi.pwdata(4 DOWNTO 0);
146 146
147 WHEN "001000" => reg_ftt.out_ren <= apbi.pwdata(1 DOWNTO 0);
147 WHEN "001000" => reg_ftt.out_ren <= apbi.pwdata(1 DOWNTO 0);
148 148
149 149 WHEN OTHERS => NULL;
150 150 END CASE;
151 151 END IF;
152
153 --IF (apbi.psel(pindex) AND apbi.pwrite AND apbi.penable) = '1' AND paddr(7 DOWNTO 2) = "000101" THEN
154 -- reg_ftt.MEM_IN_SM_wen <= apbi.pwdata(4 DOWNTO 0);
155 --ELSE
156 -- reg_ftt.MEM_IN_SM_wen <= (OTHERS => '1');
157 --END IF;
158
159
152 160 END IF;
153 161
154 162 END IF;
@@ -156,6 +164,6 BEGIN -- beh
156 164
157 165 apbo.pindex <= pindex;
158 166 apbo.pconfig <= pconfig;
159 apbo.prdata <= prdata;
167 apbo.prdata <= prdata ;
160 168
161 169 END beh;
@@ -84,7 +84,7 ARCHITECTURE tb OF testbench_ms IS
84 84 -----------------------------------------------------------------------------
85 85 -- FFT
86 86 -----------------------------------------------------------------------------
87 TYPE fft_tab_type IS ARRAY (255 DOWNTO 0) OF STD_LOGIC_VECTOR(15 DOWNTO 0);
87 TYPE fft_tab_type IS ARRAY (127 DOWNTO 0) OF STD_LOGIC_VECTOR(15 DOWNTO 0);
88 88 SIGNAL fft_1_re : fft_tab_type;
89 89 SIGNAL fft_1_im : fft_tab_type;
90 90 SIGNAL fft_2_re : fft_tab_type;
@@ -101,7 +101,19 ARCHITECTURE tb OF testbench_ms IS
101 101 SIGNAL counter_3 : INTEGER;
102 102 SIGNAL counter_4 : INTEGER;
103 103 SIGNAL counter_5 : INTEGER;
104
105 SIGNAL not_full : STD_LOGIC;
104 106
107 TYPE ms_component_tab_type IS ARRAY (0 TO 1, 127 DOWNTO 0) OF STD_LOGIC_VECTOR(31 DOWNTO 0);
108 TYPE spectral_matrix_type IS ARRAY (0 TO 5, 0 TO 5) OF ms_component_tab_type;
109
110 SIGNAL spectral_matrix_data : spectral_matrix_type;
111
112 CONSTANT DIRAC_FREQ : INTEGER := 0;
113 CONSTANT DIRAC_FREQ2 : INTEGER := 10;
114 CONSTANT DIRAC_FREQ3 : INTEGER := 127;
115 CONSTANT FFT_RE : STD_LOGIC_VECTOR(15 DOWNTO 0) := x"0020";
116 CONSTANT FFT_IM : STD_LOGIC_VECTOR(15 DOWNTO 0) := x"0010";
105 117
106 118 BEGIN -- tb
107 119
@@ -112,7 +124,7 BEGIN -- tb
112 124 PROCESS (clk, rstn)
113 125 BEGIN
114 126 IF rstn = '0' THEN -- asynchronous reset (active low)
115 all_data: FOR i IN 255 DOWNTO 0 LOOP
127 all_data: FOR i IN 127 DOWNTO 0 LOOP
116 128 fft_1_re(I) <= (OTHERS => '0');
117 129 fft_1_im(I) <= (OTHERS => '0');
118 130 fft_2_re(I) <= (OTHERS => '0');
@@ -124,16 +136,45 BEGIN -- tb
124 136 fft_5_re(I) <= (OTHERS => '0');
125 137 fft_5_im(I) <= (OTHERS => '0');
126 138 END LOOP all_data;
127 fft_1_re(8*0) <= x"0fff";
128 fft_1_im(8*0) <= x"0010";
129 fft_2_re(8*1) <= x"0010";
130 fft_2_im(8*1+1) <= x"0040";
131 fft_3_re(8*2) <= x"0010";
132 fft_3_im(8*3) <= x"0100";
133 fft_4_re(8*4) <= x"0001";
134 fft_4_im(8*5) <= x"0111";
135 fft_5_re(8*6) <= x"0033";
136 fft_5_im(8*7) <= x"0444";
139
140 fft_1_re(DIRAC_FREQ) <= FFT_RE;
141 fft_1_im(DIRAC_FREQ) <= FFT_IM;
142 fft_1_re(DIRAC_FREQ) <= FFT_RE;
143 fft_1_im(DIRAC_FREQ) <= FFT_IM;
144 fft_2_re(DIRAC_FREQ) <= FFT_RE;
145 fft_2_im(DIRAC_FREQ) <= FFT_IM;
146 fft_3_re(DIRAC_FREQ) <= FFT_RE;
147 fft_3_im(DIRAC_FREQ) <= FFT_IM;
148 fft_4_re(DIRAC_FREQ) <= FFT_RE;
149 fft_4_im(DIRAC_FREQ) <= FFT_IM;
150 fft_5_re(DIRAC_FREQ) <= FFT_RE;
151 fft_5_im(DIRAC_FREQ) <= FFT_IM;
152
153 --fft_1_re(DIRAC_FREQ2) <= FFT_RE;
154 --fft_1_im(DIRAC_FREQ2) <= FFT_IM;
155 --fft_1_re(DIRAC_FREQ2) <= FFT_RE;
156 --fft_1_im(DIRAC_FREQ2) <= FFT_IM;
157 --fft_2_re(DIRAC_FREQ2) <= FFT_RE;
158 --fft_2_im(DIRAC_FREQ2) <= FFT_IM;
159 --fft_3_re(DIRAC_FREQ2) <= FFT_RE;
160 --fft_3_im(DIRAC_FREQ2) <= FFT_IM;
161 --fft_4_re(DIRAC_FREQ2) <= FFT_RE;
162 --fft_4_im(DIRAC_FREQ2) <= FFT_IM;
163 --fft_5_re(DIRAC_FREQ2) <= FFT_RE;
164 --fft_5_im(DIRAC_FREQ2) <= FFT_IM;
165
166 --fft_1_re(DIRAC_FREQ3) <= FFT_RE;
167 --fft_1_im(DIRAC_FREQ3) <= FFT_IM;
168 --fft_1_re(DIRAC_FREQ3) <= FFT_RE;
169 --fft_1_im(DIRAC_FREQ3) <= FFT_IM;
170 --fft_2_re(DIRAC_FREQ3) <= FFT_RE;
171 --fft_2_im(DIRAC_FREQ3) <= FFT_IM;
172 --fft_3_re(DIRAC_FREQ3) <= FFT_RE;
173 --fft_3_im(DIRAC_FREQ3) <= FFT_IM;
174 --fft_4_re(DIRAC_FREQ3) <= FFT_RE;
175 --fft_4_im(DIRAC_FREQ3) <= FFT_IM;
176 --fft_5_re(DIRAC_FREQ3) <= FFT_RE;
177 --fft_5_im(DIRAC_FREQ3) <= FFT_IM;
137 178
138 179 counter_1 <= 0;
139 180 counter_2 <= 0;
@@ -141,28 +182,124 BEGIN -- tb
141 182 counter_4 <= 0;
142 183 counter_5 <= 0;
143 184
144 MEM_IN_SM_wen <= (OTHERS => '1');
145 MEM_OUT_SM_ren <= (OTHERS => '1');
185 -- MEM_IN_SM_wen <= (OTHERS => '1');
186 -- MEM_OUT_SM_ren <= (OTHERS => '1');
146 187
147 188 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
148 IF MEM_IN_SM_locked_out(0) = '0' AND MEM_IN_SM_Full_out(0) = '0' THEN
149 counter_1 <= counter_1 + 1;
150 MEM_IN_SM_wData(15 DOWNTO 0) <= fft_1_re(counter_1);
151 MEM_IN_SM_wData(31 DOWNTO 16) <= fft_1_im(counter_1);
152 MEM_IN_SM_wen(0) <= '0';
153 ELSE
154 counter_1 <= 0;
155 MEM_IN_SM_wData(31 DOWNTO 0) <= (OTHERS => 'X');
156 MEM_IN_SM_wen(0) <= '1';
157 END IF;
189 --IF MEM_IN_SM_locked_out(0) = '0' AND MEM_IN_SM_Full_out(0) = '0' THEN
190 -- counter_1 <= counter_1 + 1;
191 -- MEM_IN_SM_wData(15 DOWNTO 0) <= fft_1_re(counter_1);
192 -- MEM_IN_SM_wData(31 DOWNTO 16) <= fft_1_im(counter_1);
193 -- MEM_IN_SM_wen(0) <= '0';
194 --ELSE
195 -- counter_1 <= 0;
196 -- MEM_IN_SM_wData(31 DOWNTO 0) <= (OTHERS => 'X');
197 -- MEM_IN_SM_wen(0) <= '1';
198 --END IF;
158 199
159 200 END IF;
160 201 END PROCESS;
161 202
162
203 PROCESS
204 BEGIN -- PROCESS
205 WAIT FOR 1 us;
206 not_full <= '0';
207 WAIT UNTIL clk = '1' AND clk'EVENT;
208 loop_DATA_write: FOR I IN 0 TO 127 LOOP
209 apbi.pwdata <= fft_1_im(I) & fft_1_re(I);
210 apbi.psel(15) <= '1';
211 apbi.paddr(7 DOWNTO 2) <= "000000";
212 apbi.penable <= '1';
213 apbi.pwrite <= '1';
214 WAIT UNTIL clk = '1' AND clk'EVENT;
215
216 apbi.pwdata <= fft_2_im(I) & fft_2_re(I);
217 apbi.psel(15) <= '1';
218 apbi.paddr(7 DOWNTO 2) <= "000001";
219 apbi.penable <= '1';
220 apbi.pwrite <= '1';
221 WAIT UNTIL clk = '1' AND clk'EVENT;
222
223 apbi.pwdata <= fft_3_im(I) & fft_3_re(I);
224 apbi.psel(15) <= '1';
225 apbi.paddr(7 DOWNTO 2) <= "000010";
226 apbi.penable <= '1';
227 apbi.pwrite <= '1';
228 WAIT UNTIL clk = '1' AND clk'EVENT;
229
230 apbi.pwdata <= fft_4_im(I) & fft_4_re(I);
231 apbi.psel(15) <= '1';
232 apbi.paddr(7 DOWNTO 2) <= "000011";
233 apbi.penable <= '1';
234 apbi.pwrite <= '1';
235 WAIT UNTIL clk = '1' AND clk'EVENT;
236
237 apbi.pwdata <= fft_5_im(I) & fft_5_re(I);
238 apbi.psel(15) <= '1';
239 apbi.paddr(7 DOWNTO 2) <= "000100";
240 apbi.penable <= '1';
241 apbi.pwrite <= '1';
242 WAIT UNTIL clk = '1' AND clk'EVENT;
243
244 apbi.pwdata <= X"FFFFFFE0";
245 apbi.psel(15) <= '1';
246 apbi.paddr(7 DOWNTO 2) <= "000101";
247 apbi.penable <= '1';
248 apbi.pwrite <= '1';
249 WAIT UNTIL clk = '1' AND clk'EVENT;
250
251 apbi.pwrite <= '0';
252 END LOOP loop_DATA_write;
253
254
255 WAIT UNTIL clk = '1' AND clk'EVENT;
256
257 not_full <= '0';
258
259 tant_que_not_full: WHILE not_full = '0' LOOP
260 -- apbi.pwdata <= X"FFFFFFE0";
261 apbi.psel(15) <= '1';
262 apbi.paddr(7 DOWNTO 2) <= "001000";
263 apbi.penable <= '1';
264 WAIT UNTIL clk = '1' AND clk'EVENT;
265 not_full <= apbo.prdata(3);
266 END LOOP tant_que_not_full;
267
268
269 all_data_0: FOR I IN 0 TO 127 LOOP
270 WAIT UNTIL clk = '1' AND clk'EVENT;
271 --apbi.pwdata <= X"FFFFFFFE";
272 apbi.psel(15) <= '1';
273 apbi.paddr(7 DOWNTO 2) <= "000110";
274 apbi.penable <= '1';
275 apbi.pwrite <= '0';
276 WAIT UNTIL clk = '1' AND clk'EVENT;
277 apbi.penable <= '0';
278 spectral_matrix_data(0,0)(0,I) <= apbo.prdata;
279 spectral_matrix_data(0,0)(1,I) <= (OTHERS => '0');
280 WAIT UNTIL clk = '1' AND clk'EVENT;
281 apbi.pwdata <= X"FFFFFFFE";
282 apbi.psel(15) <= '1';
283 apbi.paddr(7 DOWNTO 2) <= "001000";
284 apbi.penable <= '1';
285 apbi.pwrite <= '1';
286 WAIT UNTIL clk = '1' AND clk'EVENT;
287 apbi.pwrite <= '0';
288 apbi.penable <= '0';
289 WAIT UNTIL clk = '1' AND clk'EVENT;
290 END LOOP all_data_0;
291
292
293
294 WAIT FOR 100 us;
295
296 REPORT "*** END simulation ***" SEVERITY failure;
297 WAIT;
298
299 END PROCESS;
163 300
164 301
165
302
166 303
167 304
168 305
@@ -170,32 +307,32 BEGIN -- tb
170 307 -- MS ------------------------------------------------------------------------
171 308 -------------------------------------------------------------------------------
172 309
173 --lpp_lfr_apbreg_1 : lpp_lfr_apbreg_tb
174 -- GENERIC MAP (
175 -- pindex => 15,
176 -- paddr => 15,
177 -- pmask => 16#fff#)
178 -- PORT MAP (
179 -- HCLK => clk,
180 -- HRESETn => rstn,
181 -- apbi => apbi,
182 -- apbo => apbo,
310 lpp_lfr_apbreg_1 : lpp_lfr_apbreg_tb
311 GENERIC MAP (
312 pindex => 15,
313 paddr => 15,
314 pmask => 16#fff#)
315 PORT MAP (
316 HCLK => clk,
317 HRESETn => rstn,
318 apbi => apbi,
319 apbo => apbo,
183 320
184 -- MEM_IN_SM_wData => MEM_IN_SM_wData,
185 -- MEM_IN_SM_wen => MEM_IN_SM_wen,
186 -- MEM_IN_SM_Full_out => MEM_IN_SM_Full_out,
187 -- MEM_IN_SM_Empty_out => MEM_IN_SM_Empty_out,
188 -- MEM_IN_SM_locked_out => MEM_IN_SM_locked_out,
189
190 -- MEM_OUT_SM_ren => MEM_OUT_SM_ren ,
191 -- MEM_OUT_SM_Data_out => MEM_OUT_SM_Data_out ,
192 -- MEM_OUT_SM_Full => MEM_OUT_SM_Full_pad ,
193 -- MEM_OUT_SM_Full_2 => MEM_OUT_SM_Full_pad_2 ,
194 -- MEM_OUT_SM_Empty => MEM_OUT_SM_Empty_pad);
321 MEM_IN_SM_wData => MEM_IN_SM_wData,
322 MEM_IN_SM_wen => MEM_IN_SM_wen,
323 MEM_IN_SM_Full_out => MEM_IN_SM_Full_out,
324 MEM_IN_SM_Empty_out => MEM_IN_SM_Empty_out,
325 MEM_IN_SM_locked_out => MEM_IN_SM_locked_out,
326
327 MEM_OUT_SM_ren => MEM_OUT_SM_ren ,
328 MEM_OUT_SM_Data_out => MEM_OUT_SM_Data_out ,
329 MEM_OUT_SM_Full => MEM_OUT_SM_Full_pad ,
330 MEM_OUT_SM_Full_2 => MEM_OUT_SM_Full_pad_2 ,
331 MEM_OUT_SM_Empty => MEM_OUT_SM_Empty_pad);
195 332
196 333 lpp_lfr_ms_tb_1 : lpp_lfr_ms_tb
197 334 GENERIC MAP (
198 Mem_use => use_CEL)
335 Mem_use => use_RAM)-- use_RAM use_CEL
199 336 PORT MAP (
200 337 clk => clk,
201 338 rstn => rstn,
@@ -19,57 +19,66
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@lpp.polytechnique.fr
21 21 ------------------------------------------------------------------------------
22 library ieee;
23 use ieee.std_logic_1164.all;
24 use IEEE.numeric_std.all;
22 LIBRARY ieee;
23 USE ieee.std_logic_1164.ALL;
24 USE IEEE.numeric_std.ALL;
25 25
26 entity RAM_CEL is
27 generic(DataSz : integer range 1 to 32 := 8;
28 abits : integer range 2 to 12 := 8);
29 port( WD : in std_logic_vector(DataSz-1 downto 0); RD : out
30 std_logic_vector(DataSz-1 downto 0);WEN, REN : in std_logic;
31 WADDR : in std_logic_vector(abits-1 downto 0); RADDR : in
32 std_logic_vector(abits-1 downto 0);RWCLK, RESET : in std_logic
33 ) ;
34 end RAM_CEL;
26 ENTITY RAM_CEL IS
27 GENERIC(
28 DataSz : INTEGER RANGE 1 TO 32 := 8;
29 abits : INTEGER RANGE 2 TO 12 := 8);
30 PORT(
31 WD : IN STD_LOGIC_VECTOR(DataSz-1 DOWNTO 0);
32 RD : OUT STD_LOGIC_VECTOR(DataSz-1 DOWNTO 0);
33 WEN, REN : IN STD_LOGIC;
34 WADDR : IN STD_LOGIC_VECTOR(abits-1 DOWNTO 0);
35 RADDR : IN STD_LOGIC_VECTOR(abits-1 DOWNTO 0);
36 RWCLK, RESET : IN STD_LOGIC
37 ) ;
38 END RAM_CEL;
35 39
36 40
37 41
38 architecture ar_RAM_CEL of RAM_CEL is
42 ARCHITECTURE ar_RAM_CEL OF RAM_CEL IS
39 43
40 constant VectInit : std_logic_vector(DataSz-1 downto 0):=(others => '0');
41 constant MAX : integer := 2**(abits);
44 CONSTANT VectInit : STD_LOGIC_VECTOR(DataSz-1 DOWNTO 0) := (OTHERS => '0');
45 CONSTANT MAX : INTEGER := 2**(abits);
42 46
43 type RAMarrayT is array (0 to MAX-1) of std_logic_vector(DataSz-1 downto 0);
47 TYPE RAMarrayT IS ARRAY (0 TO MAX-1) OF STD_LOGIC_VECTOR(DataSz-1 DOWNTO 0);
44 48
45 signal RAMarray : RAMarrayT:=(others => VectInit);
46 signal RD_int : std_logic_vector(DataSz-1 downto 0);
49 SIGNAL RAMarray : RAMarrayT := (OTHERS => VectInit);
50 SIGNAL RD_int : STD_LOGIC_VECTOR(DataSz-1 DOWNTO 0);
51
52 SIGNAL RADDR_reg : STD_LOGIC_VECTOR(abits-1 DOWNTO 0);
47 53
48 begin
54 BEGIN
49 55
50 RD_int <= RAMarray(to_integer(unsigned(RADDR)));
56 RD_int <= RAMarray(to_integer(UNSIGNED(RADDR)));
51 57
52 58
53 process(RWclk,reset)
54 begin
55 if reset = '0' then
56 RD <= VectInit;
57 rst:for i in 0 to MAX-1 loop
58 RAMarray(i) <= (others => '0');
59 end loop;
59 PROCESS(RWclk, reset)
60 BEGIN
61 IF reset = '0' THEN
62 RD <= VectInit;
63 rst : FOR i IN 0 TO MAX-1 LOOP
64 RAMarray(i) <= (OTHERS => '0');
65 END LOOP;
60 66
61 elsif RWclk'event and RWclk = '1' then
62 if REN = '0' then
63 RD <= RD_int;
64 end if;
67 ELSIF RWclk'EVENT AND RWclk = '1' THEN
68 -- IF REN = '0' THEN
69 RD <= RD_int;
70 -- END IF;
71 IF REN = '0' THEN
72 RADDR_reg <= RADDR;
73 END IF;
74
75 IF WEN = '0' THEN
76 RAMarray(to_integer(UNSIGNED(WADDR))) <= WD;
77 END IF;
65 78
66 if WEN = '0' then
67 RAMarray(to_integer(unsigned(WADDR))) <= WD;
68 end if;
69
70 end if;
71 end process;
72 end ar_RAM_CEL;
79 END IF;
80 END PROCESS;
81 END ar_RAM_CEL;
73 82
74 83
75 84
@@ -42,7 +42,11 ARCHITECTURE beh OF MS_calculation IS
42 42 CONSTANT ALU_CTRL_MAC : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00001";
43 43 CONSTANT ALU_CTRL_MACn : STD_LOGIC_VECTOR(4 DOWNTO 0) := "10001";
44 44
45
45 SIGNAL select_ctrl : STD_LOGIC_VECTOR(1 DOWNTO 0);
46 CONSTANT select_ctrl_NOP : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
47 CONSTANT select_ctrl_MULT : STD_LOGIC_VECTOR(1 DOWNTO 0) := "01";
48 CONSTANT select_ctrl_MAC : STD_LOGIC_VECTOR(1 DOWNTO 0) := "10";
49 CONSTANT select_ctrl_MACn : STD_LOGIC_VECTOR(1 DOWNTO 0) := "11";
46 50
47 51 SIGNAL select_op1 : STD_LOGIC;
48 52 SIGNAL select_op2 : STD_LOGIC_VECTOR(1 DOWNTO 0) ;
@@ -56,10 +60,21 ARCHITECTURE beh OF MS_calculation IS
56 60 SIGNAL res_wen_reg1 : STD_LOGIC;
57 61 SIGNAL res_wen_reg2 : STD_LOGIC;
58 62 --SIGNAL res_wen_reg3 : STD_LOGIC;
63
64 SIGNAL fifo_in_ren_s : STD_LOGIC_VECTOR(1 DOWNTO 0);
59 65
60 66 BEGIN
61 67
62 68
69 PROCESS (clk, rstn)
70 BEGIN -- PROCESS
71 IF rstn = '0' THEN -- asynchronous reset (active low)
72 fifo_in_ren <= "11";
73 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
74 fifo_in_ren <= fifo_in_ren_s;
75 END IF;
76 END PROCESS;
77
63 78
64 79 PROCESS (clk, rstn)
65 80 BEGIN
@@ -68,16 +83,18 BEGIN
68 83 correlation_begin <= '0';
69 84 correlation_done <= '0';
70 85 state <= IDLE;
71 fifo_in_ren <= "11";
72 ALU_CTRL <= ALU_CTRL_NOP;
86 fifo_in_ren_s <= "11";
87 select_ctrl <= select_ctrl_NOP;
88 --ALU_CTRL <= ALU_CTRL_NOP;
73 89 select_op1 <= select_R0(0);
74 90 select_op2 <= select_R0;
75 91 res_wen <= '1';
76 92
77 93 ELSIF clk'EVENT AND clk = '1' THEN
78 ALU_CTRL <= ALU_CTRL_NOP;
94 select_ctrl <= select_ctrl_NOP;
95 --ALU_CTRL <= ALU_CTRL_NOP;
79 96 correlation_begin <= '0';
80 fifo_in_ren <= "11";
97 fifo_in_ren_s <= "11";
81 98 res_wen <= '1';
82 99 correlation_done <= '0';
83 100 CASE state IS
@@ -89,7 +106,7 BEGIN
89 106 ELSE
90 107 correlation_begin <= '1';
91 108 state <= S1a;
92 fifo_in_ren <= "10";
109 fifo_in_ren_s <= "10";
93 110 END IF;
94 111 ELSE
95 112 IF fifo_out_full = '1' THEN
@@ -97,7 +114,7 BEGIN
97 114 ELSE
98 115 correlation_begin <= '1';
99 116 state <= S1;
100 fifo_in_ren <= "00";
117 fifo_in_ren_s <= "00";
101 118 END IF;
102 119 END IF;
103 120 END IF;
@@ -109,32 +126,36 BEGIN
109 126 IF fifo_out_full = '0' THEN
110 127 correlation_begin <= '1';
111 128 state <= S1;
112 fifo_in_ren <= "00";
129 fifo_in_ren_s <= "00";
113 130 END IF;
114 131 WHEN S1 =>
115 ALU_CTRL <= ALU_CTRL_MULT;
132 select_ctrl <= select_ctrl_MULT;
133 --ALU_CTRL <= ALU_CTRL_MULT;
116 134 select_op1 <= select_R0(0);
117 135 select_op2 <= select_R1;
118 136 state <= S2;
119 137 WHEN S2 =>
120 ALU_CTRL <= ALU_CTRL_MAC;
138 select_ctrl <= select_ctrl_MAC;
139 --ALU_CTRL <= ALU_CTRL_MAC;
121 140 select_op1 <= select_I0(0);
122 141 select_op2 <= select_I1;
123 142 res_wen <= '0';
124 143 state <= S3;
125 144 WHEN S3 =>
126 ALU_CTRL <= ALU_CTRL_MULT;
145 select_ctrl <= select_ctrl_MULT;
146 --ALU_CTRL <= ALU_CTRL_MULT;
127 147 select_op1 <= select_I0(0);
128 148 select_op2 <= select_R1;
129 149 state <= S4;
130 150 WHEN S4 =>
131 ALU_CTRL <= ALU_CTRL_MACn;
151 select_ctrl <= select_ctrl_MACn;
152 --ALU_CTRL <= ALU_CTRL_MACn;
132 153 select_op1 <= select_R0(0);
133 154 select_op2 <= select_I1;
134 155 res_wen <= '0';
135 156 IF fifo_in_empty = "00" THEN
136 157 state <= S1;
137 fifo_in_ren <= "00";
158 fifo_in_ren_s <= "00";
138 159 ELSE
139 160 correlation_done <= '1';
140 161 state <= IDLE;
@@ -149,21 +170,23 BEGIN
149 170 IF fifo_out_full = '0' THEN
150 171 correlation_begin <= '1';
151 172 state <= S1a;
152 fifo_in_ren <= "10";
173 fifo_in_ren_s <= "10";
153 174 END IF;
154 175 WHEN S1a =>
155 ALU_CTRL <= ALU_CTRL_MULT;
176 select_ctrl <= select_ctrl_MULT;
177 --ALU_CTRL <= ALU_CTRL_MULT;
156 178 select_op1 <= select_R0(0);
157 179 select_op2 <= select_R0;
158 180 state <= S2a;
159 181 WHEN S2a =>
160 ALU_CTRL <= ALU_CTRL_MAC;
182 select_ctrl <= select_ctrl_MAC;
183 --ALU_CTRL <= ALU_CTRL_MAC;
161 184 select_op1 <= select_I0(0);
162 185 select_op2 <= select_I0;
163 186 res_wen <= '0';
164 187 IF fifo_in_empty(0) = '0' THEN
165 188 state <= S1a;
166 fifo_in_ren <= "10";
189 fifo_in_ren_s <= "10";
167 190 ELSE
168 191 correlation_done <= '1';
169 192 state <= IDLE;
@@ -176,6 +199,11 BEGIN
176 199 END IF;
177 200 END PROCESS;
178 201
202 ALU_CTRL <= ALU_CTRL_NOP WHEN select_ctrl = select_ctrl_NOP ELSE
203 ALU_CTRL_MULT WHEN select_ctrl = select_ctrl_MULT ELSE
204 ALU_CTRL_MAC WHEN select_ctrl = select_ctrl_MAC ELSE
205 ALU_CTRL_MACn;
206
179 207 OP1 <= fifo_in_data(15 DOWNTO 0) WHEN select_op1 = select_R0(0) ELSE
180 208 fifo_in_data(31 DOWNTO 16); -- WHEN select_op1 = select_I0(0) ELSE
181 209
General Comments 0
You need to be logged in to leave comments. Login now