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

Subversion Repositories madi_receiver

[/] [madi_receiver/] [web_uploads/] [madi_receiver.vhd] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 root
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_unsigned.all;
4
 
5
entity madi_receiver is
6 7 dweil
 port(
7
  clk_125_in : in std_logic;
8
  madi_clk_in : in std_logic;
9
  madi_data_valid : in std_logic;
10
  madi_symbol_in : in std_logic_vector(4 downto 0);
11 6 root
 
12
  madi_write : out std_logic;
13
  madi_wordclock : out std_logic;
14
  madi_channel : out std_logic_vector(5 downto 0) := (others => '0');
15
  madi_data : out std_logic_vector(23 downto 0) := (others => '0')
16
 );
17
end madi_receiver;
18
 
19
architecture behavioral of madi_receiver is
20
 type nibble_buffer is array(7 downto 0) of std_logic_vector(3 downto 0);
21
 
22 7 dweil
 signal madi_input_shift : std_logic_vector(14 downto 0) := (others => '0');
23
 signal madi_clk_shift : std_logic_vector(1 downto 0) := (others => '0');
24
 signal madi_sync_detect : std_logic := '0';
25
 signal madi_aligned : std_logic := '0';
26
 signal madi_symbol : std_logic_vector(4 downto 0) := (others => '0');
27
 signal madi_symbol_count : std_logic_vector(2 downto 0) := (others => '0');
28
 signal madi_sync_count : std_logic_vector(8 downto 0) := (others => '0');
29
 signal madi_nibble_clk : std_logic := '0';
30
 signal madi_nibble : std_logic_vector(3 downto 0) := (others => '0');
31
 signal madi_nibble_cnt : std_logic_vector(2 downto 0) := (others => '0');
32 6 root
 signal madi_nibble_buffer : nibble_buffer;
33 7 dweil
 signal madi_nibble_rst : std_logic := '0';
34
 signal madi_channel_cnt : std_logic_vector(5 downto 0) := (others => '0');
35 6 root
 signal madi_channel_rst : std_logic := '0';
36 7 dweil
 signal madi_write_buffer : std_logic := '0';
37 6 root
 signal madi_wordclk_shift : std_logic_vector(1 downto 0);
38 7 dweil
 signal madi_wordclk_current : std_logic_vector(11 downto 0) := (others => '0');
39
 signal madi_wordclk_reference : std_logic_vector(24 downto 0) := (others => '0');
40
 signal madi_wordclk_count : std_logic_vector(11 downto 0) := (others => '0');
41 6 root
 
42 7 dweil
begin
43
 
44
 madi_shift_clk : process (clk_125_in)
45
 begin
46
  if clk_125_in'event and clk_125_in = '1' then
47
   madi_clk_shift <= madi_clk_shift(0) & madi_clk_in;
48
  end if;
49
 end process madi_shift_clk;
50
 
51
 madi_shift_input : process (clk_125_in)
52
 begin
53
  if clk_125_in'event and clk_125_in = '1' then
54
   if madi_clk_shift = "01" then
55
    madi_input_shift <= madi_input_shift(13 downto 4) & madi_symbol_in;
56
   else
57
    madi_input_shift <= madi_input_shift(13 downto 0) & '0';
58
   end if;
59
  end if;
60
 end process madi_shift_input;
61
 
62
 madi_detect_sync : process (clk_125_in)
63
 begin
64
  if clk_125_in'event and clk_125_in = '1' then
65
   if madi_symbol_count = 4 then
66
    madi_symbol_count <= (others => '0');
67
    if madi_aligned = '1' then
68
     madi_symbol <= madi_input_shift(9 downto 5);
69
    end if;
70
   else
71
    madi_symbol_count <= madi_symbol_count + 1;
72
    if madi_input_shift(14 downto 5) = "1100010001" then -- JK sync Symbols detected?
73
     madi_symbol_count <= (others => '0');
74
     madi_sync_detect <= '1';
75
     madi_aligned <= '1';
76
    else
77
     madi_sync_detect <= '0';
78
    end if;
79
   end if;
80
  end if;
81
 end process madi_detect_sync;
82
 
83
 madi_count_symbol : process (clk_125_in)
84
 begin
85
  if clk_125_in'event and clk_125_in = '1' then
86
   if madi_sync_detect = '1' then
87
    madi_sync_count <= madi_sync_count + 1;
88
   end if;
89
  end if;
90
 end process madi_count_symbol;
91 6 root
 
92 7 dweil
 madi_decode : process (madi_clk_in)
93 6 root
 begin
94 7 dweil
  if madi_clk_in'event and madi_clk_in = '1' then
95
   case madi_symbol is
96
    when "11110" =>
97
     madi_nibble <= "0000";
98
     madi_nibble_clk <= '1';
99
     madi_nibble_rst <= '0';
100
    when "01001" =>
101
     madi_nibble <= "0001";
102
     madi_nibble_clk <= '1';
103
     madi_nibble_rst <= '0';
104
    when "10100" =>
105
     madi_nibble <= "0010";
106
     madi_nibble_clk <= '1';
107
     madi_nibble_rst <= '0';
108
    when "10101" =>
109
     madi_nibble <= "0011";
110
     madi_nibble_clk <= '1';
111
     madi_nibble_rst <= '0';
112
    when "01010" =>
113
     madi_nibble <= "0100";
114
     madi_nibble_clk <= '1';
115
     madi_nibble_rst <= '0';
116
    when "01011" =>
117
     madi_nibble <= "0101";
118
     madi_nibble_clk <= '1';
119
     madi_nibble_rst <= '0';
120
    when "01110" =>
121
     madi_nibble <= "0110";
122
     madi_nibble_clk <= '1';
123
     madi_nibble_rst <= '0';
124
    when "01111" =>
125
     madi_nibble <= "0111";
126
     madi_nibble_clk <= '1';
127
     madi_nibble_rst <= '0';
128
    when "10010" =>
129
     madi_nibble <= "1000";
130
     madi_nibble_clk <= '1';
131
     madi_nibble_rst <= '0';
132
    when "10011" =>
133
     madi_nibble <= "1001";
134
     madi_nibble_clk <= '1';
135
     madi_nibble_rst <= '0';
136
    when "10110" =>
137
     madi_nibble <= "1010";
138
     madi_nibble_clk <= '1';
139
     madi_nibble_rst <= '0';
140
    when "10111" =>
141
     madi_nibble <= "1011";
142
     madi_nibble_clk <= '1';
143
     madi_nibble_rst <= '0';
144
    when "11010" =>
145
     madi_nibble <= "1100";
146
     madi_nibble_clk <= '1';
147
     madi_nibble_rst <= '0';
148
    when "11011" =>
149
     madi_nibble <= "1101";
150
     madi_nibble_clk <= '1';
151
     madi_nibble_rst <= '0';
152
    when "11100" =>
153
     madi_nibble <= "1110";
154
     madi_nibble_clk <= '1';
155
     madi_nibble_rst <= '0';
156
    when "11101" =>
157
     madi_nibble <= "1111";
158
     madi_nibble_clk <= '1';
159
     madi_nibble_rst <= '0';
160
    when others  =>
161
     madi_nibble <= "0000";
162
     madi_nibble_clk <= '0';
163
     madi_nibble_rst <= '1';
164
   end case;
165 6 root
  end if;
166
 end process madi_decode;
167
 
168 7 dweil
 place_nibble : process (madi_clk_in)
169 6 root
 begin
170 7 dweil
  if madi_clk_in'event and madi_clk_in = '1' then
171 6 root
   if madi_nibble_rst = '1' then
172
    madi_nibble_cnt <= (others => '0');
173 7 dweil
   end if;
174
   if madi_channel_rst = '1' then
175
    madi_channel_rst <= '0';
176 6 root
   end if;
177
   if madi_nibble_clk = '1' then
178
    madi_nibble_cnt <= madi_nibble_cnt + 1;
179
    case madi_nibble_cnt is
180
     when "000" =>
181
      madi_nibble_buffer(0) <= madi_nibble;
182
     when "001" =>
183
      madi_nibble_buffer(1) <= madi_nibble;
184
     when "010" =>
185
      madi_nibble_buffer(2) <= madi_nibble;
186
     when "011" =>
187
      madi_nibble_buffer(3) <= madi_nibble;
188
     when "100" =>
189
      madi_nibble_buffer(4) <= madi_nibble;
190
     when "101" =>
191
      madi_nibble_buffer(5) <= madi_nibble;
192
     when "110" =>
193
      madi_nibble_buffer(6) <= madi_nibble;
194
     when "111" =>
195
      madi_nibble_buffer(7) <= madi_nibble;
196
     when others =>
197
    end case;
198 7 dweil
    if madi_nibble(3) = '1' and madi_nibble_cnt = "000" then
199
     madi_channel_rst <= '1';
200 6 root
     madi_channel_cnt <= (others => '0');
201 7 dweil
    end if;
202 6 root
    if madi_nibble_cnt = 7 then
203
     madi_data <= madi_nibble_buffer(1) & madi_nibble_buffer(2) & madi_nibble_buffer(3) & madi_nibble_buffer(4) & madi_nibble_buffer(5) & madi_nibble_buffer(6);
204
     madi_write_buffer <= '1';
205
    else
206
     madi_write_buffer <= '0';
207 7 dweil
    end if;
208
    if madi_nibble_cnt = 7 then
209
     madi_channel_cnt <= madi_channel_cnt + 1;
210
     madi_channel <= madi_channel_cnt;
211 6 root
    end if;
212 7 dweil
   end if;
213
  madi_write <= madi_write_buffer;
214 6 root
  end if;
215 7 dweil
 end process place_nibble;
216
 
217 6 root
 generate_madi_wordclk : process (clk_125_in)
218
 begin
219
  if clk_125_in'event and clk_125_in = '1' then
220 7 dweil
   madi_wordclk_shift <= madi_wordclk_shift(0) & madi_channel_rst;
221
   if madi_wordclk_shift = "01" then
222
    madi_wordclk_count <= (others => '0');
223
    madi_wordclk_current <= (others => '0');
224
    if madi_wordclk_current > madi_wordclk_reference(madi_wordclk_reference'left downto madi_wordclk_reference'left-11) then
225
     madi_wordclk_reference <= madi_wordclk_reference + 1;
226
    else
227
     madi_wordclk_reference <= madi_wordclk_reference - 1;
228
    end if;
229
   else
230
    madi_wordclk_count <= madi_wordclk_count + 1;
231
    madi_wordclk_current <= madi_wordclk_current + 1;
232
   end if;
233
   if madi_wordclk_count < madi_wordclk_reference(madi_wordclk_reference'left downto madi_wordclk_reference'left-11) then
234 6 root
    madi_wordclock <= '1';
235
   else
236
    madi_wordclock <= '0';
237
   end if;
238
  end if;
239
 end process generate_madi_wordclk;
240
 
241
end behavioral;
242
 
243
library ieee;
244
use ieee.std_logic_1164.all;
245
use ieee.std_logic_unsigned.all;
246
 
247
entity adat_transmitter is
248
 port(
249
  data_in : in std_logic_vector(23 downto 0);
250
  address_out : out std_logic_vector(2 downto 0);
251
 
252
  bitclk_in : in std_logic;
253
  wordclk_in : in std_logic;
254
  adat_out : out std_logic
255
 );
256
end adat_transmitter;
257
 
258
architecture behavioral of adat_transmitter is
259
 signal bit_counter : std_logic_vector(7 downto 0) := (others => '0');
260
 signal wordclk_shift : std_logic_vector(1 downto 0):= (others => '0');
261
 signal adat_buffer : std_logic_vector(29 downto 0) := (others => '0');
262
 signal adat_address : std_logic_vector(2 downto 0) := (others => '0');
263
 signal adat_nrzi : std_logic := '0';
264
 
265
begin
266
 
267
 bit_count : process (bitclk_in)
268
 begin
269
  if bitclk_in'event and bitclk_in='1' then
270
   wordclk_shift <= wordclk_shift(0) & wordclk_in;
271
   bit_counter <= bit_counter + 1;
272
  end if;
273
 end process bit_count;
274
 
275 7 dweil
 proc_adat_buffer : process (bitclk_in)
276 6 root
 begin
277
  if bitclk_in'event and bitclk_in='1' then
278
   case bit_counter is
279
    when "00000000" =>
280 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
281
     adat_address <= adat_address +1;
282 6 root
    when "00011110" =>
283 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
284
     adat_address <= adat_address +1;
285 6 root
    when "00111100" =>
286 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
287
     adat_address <= adat_address +1;
288 6 root
    when "01011010" =>
289 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
290
     adat_address <= adat_address +1;
291 6 root
    when "01111000" =>
292 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
293
     adat_address <= adat_address +1;
294 6 root
    when "10010110" =>
295 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
296
     adat_address <= adat_address +1;
297 6 root
    when "10110100" =>
298 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
299
     adat_address <= adat_address +1;
300 6 root
    when "11010010" =>
301 7 dweil
     adat_buffer <= '1' & data_in(0) & data_in(1) & data_in(2) & data_in(3) & '1' & data_in(4) & data_in(5) & data_in(6) & data_in(7) & '1' & data_in(8) & data_in(9) & data_in(10) & data_in(11) & '1' & data_in(12) & data_in(13) & data_in(14) & data_in(15) & '1' & data_in(16) & data_in(17) & data_in(18) & data_in(19) & '1' & data_in(20) & data_in(21) & data_in(22) & data_in(23);
302
     adat_address <= (others => '0');
303
    when "11110000" =>
304
                      -- Sync sequence          USER    Dummy bits (no tx)
305
     adat_buffer <= '1' & "0000000000" & '1' & "0000" & "00000000000000";
306 6 root
    when others =>
307 7 dweil
   adat_buffer <= adat_buffer(adat_buffer'left-1 downto 0) & '0';
308 6 root
   end case;
309 7 dweil
  end if;
310 6 root
 end process proc_adat_buffer;
311
 
312
 proc_adat_nrzi : process (bitclk_in)
313
 begin
314
  if bitclk_in'event and bitclk_in='1' then
315
   if adat_buffer(adat_buffer'left)='0' then
316
    adat_nrzi <= adat_nrzi;
317
   else
318
    adat_nrzi <= not adat_nrzi;
319
   end if;
320
  end if;
321
 end process proc_adat_nrzi;
322
 
323
 address_out <= adat_address;
324
 adat_out <= adat_nrzi;
325
 
326
end behavioral;
327
 
328
library ieee;
329
use ieee.std_logic_1164.all;
330
use ieee.std_logic_unsigned.all;
331
 
332
entity madi_to_adat is
333
 port(
334 7 dweil
  madi_clk_in : in std_logic;
335
  madi_data_valid : in std_logic;
336
  madi_symbol_in : in std_logic_vector(4 downto 0);
337
 
338 6 root
  clk_125_in : in std_logic;
339
 
340
  word_clk_out : out std_logic;
341
  bit_clk_in : in std_logic;
342
  adat_0_out : out std_logic;
343
  adat_1_out : out std_logic;
344
  adat_2_out : out std_logic;
345
  adat_3_out : out std_logic;
346
  adat_4_out : out std_logic;
347
  adat_5_out : out std_logic;
348
  adat_6_out : out std_logic;
349
  adat_7_out : out std_logic
350
 );
351
end madi_to_adat;
352
 
353
architecture behavioral of madi_to_adat is
354
 signal madi_channel : std_logic_vector(5 downto 0);
355
 signal madi_data : std_logic_vector(23 downto 0);
356 7 dweil
 signal madi_write : std_logic;
357
 signal word_clk : std_logic;
358 6 root
 
359
 signal madi_write_0 : std_logic;
360
 signal madi_write_1 : std_logic;
361
 signal madi_write_2 : std_logic;
362
 signal madi_write_3 : std_logic;
363
 signal madi_write_4 : std_logic;
364
 signal madi_write_5 : std_logic;
365
 signal madi_write_6 : std_logic;
366
 signal madi_write_7 : std_logic;
367
 
368
 signal adat_addr_0 : std_logic_vector(2 downto 0);
369
 signal adat_addr_1 : std_logic_vector(2 downto 0);
370
 signal adat_addr_2 : std_logic_vector(2 downto 0);
371
 signal adat_addr_3 : std_logic_vector(2 downto 0);
372
 signal adat_addr_4 : std_logic_vector(2 downto 0);
373
 signal adat_addr_5 : std_logic_vector(2 downto 0);
374
 signal adat_addr_6 : std_logic_vector(2 downto 0);
375
 signal adat_addr_7 : std_logic_vector(2 downto 0);
376
 
377
 signal adat_data_0 : std_logic_vector(23 downto 0);
378
 signal adat_data_1 : std_logic_vector(23 downto 0);
379
 signal adat_data_2 : std_logic_vector(23 downto 0);
380
 signal adat_data_3 : std_logic_vector(23 downto 0);
381
 signal adat_data_4 : std_logic_vector(23 downto 0);
382
 signal adat_data_5 : std_logic_vector(23 downto 0);
383
 signal adat_data_6 : std_logic_vector(23 downto 0);
384
 signal adat_data_7 : std_logic_vector(23 downto 0);
385
 
386
 component madi_receiver is
387
  port(
388 7 dweil
   madi_clk_in : in std_logic;
389 6 root
   clk_125_in : in std_logic;
390 7 dweil
   madi_data_valid : in std_logic;
391
   madi_symbol_in : in std_logic_vector(4 downto 0);
392 6 root
 
393
   madi_write : out std_logic;
394
   madi_wordclock : out std_logic;
395
   madi_channel : out std_logic_vector(5 downto 0);
396
   madi_data : out std_logic_vector(23 downto 0)
397
  );
398
 end component madi_receiver;
399
 
400
 component adat_transmitter is
401
  port(
402
   data_in : in std_logic_vector(23 downto 0);
403
   address_out : out std_logic_vector(2 downto 0);
404
 
405
   bitclk_in : in std_logic;
406
   wordclk_in : in std_logic;
407
   adat_out : out std_logic
408
  );
409
 end component adat_transmitter;
410
 
411
 component dp_ram is
412
  port(
413
   clock: in std_logic;
414
   data: in std_logic_vector(23 downto 0);
415
   rdaddress: in std_logic_vector(2 downto 0);
416
   wraddress: in std_logic_vector(2 downto 0);
417
   wren: in std_logic  := '1';
418
   q: out std_logic_vector(23 downto 0)
419
  );
420
 end component dp_ram;
421
 
422 7 dweil
begin
423
 
424
 word_clk_out <= word_clk;
425 6 root
 
426
 madi_receive : madi_receiver
427
 port map(
428 7 dweil
  madi_clk_in => madi_clk_in,
429 6 root
  clk_125_in => clk_125_in,
430 7 dweil
  madi_data_valid => madi_data_valid,
431
  madi_symbol_in => madi_symbol_in,
432 6 root
  madi_write => madi_write,
433 7 dweil
  madi_wordclock => word_clk,
434 6 root
  madi_channel => madi_channel,
435
  madi_data => madi_data
436
 );
437
 
438
-- adat channel 0
439
 
440 7 dweil
 dp_ram_0_write : process (madi_clk_in)
441 6 root
 begin
442 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
443 6 root
   if madi_channel(5 downto 3) = 0 and madi_write = '1' then
444
    madi_write_0 <= '1';
445
   else
446
    madi_write_0 <= '0';
447
   end if;
448
  end if;
449
 end process dp_ram_0_write;
450
 
451
 dp_ram_0 : dp_ram
452
 port map(
453 7 dweil
  clock => madi_clk_in,
454 6 root
  data => madi_data,
455
  rdaddress => adat_addr_0,
456
  wraddress => madi_channel(2 downto 0),
457
  wren => madi_write_0,
458
  q => adat_data_0
459
 );
460
 
461
 adat_transmitter_0 : adat_transmitter
462
 port map(
463
  data_in => adat_data_0,
464
  address_out => adat_addr_0,
465
  bitclk_in => bit_clk_in,
466 7 dweil
  wordclk_in => word_clk,
467 6 root
  adat_out => adat_0_out
468
 );
469
 
470
-- adat channel 1
471
 
472 7 dweil
 dp_ram_1_write : process (madi_clk_in)
473 6 root
 begin
474 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
475 6 root
   if madi_channel(5 downto 3) = 1 and madi_write = '1' then
476
    madi_write_1 <= '1';
477
   else
478
    madi_write_1 <= '0';
479
   end if;
480
  end if;
481
 end process dp_ram_1_write;
482
 
483
 dp_ram_1 : dp_ram
484
 port map(
485 7 dweil
  clock => madi_clk_in,
486 6 root
  data => madi_data,
487
  rdaddress => adat_addr_1,
488
  wraddress => madi_channel(2 downto 0),
489
  wren => madi_write_1,
490
  q => adat_data_1
491
 );
492
 
493
 adat_transmitter_1 : adat_transmitter
494
 port map(
495
  data_in => adat_data_1,
496
  address_out => adat_addr_1,
497
  bitclk_in => bit_clk_in,
498 7 dweil
  wordclk_in => word_clk,
499 6 root
  adat_out => adat_1_out
500
 );
501
 
502
-- adat channel 2
503
 
504 7 dweil
 dp_ram_2_write : process (madi_clk_in)
505 6 root
 begin
506 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
507 6 root
   if madi_channel(5 downto 3) = 2 and madi_write = '1' then
508
    madi_write_2 <= '1';
509
   else
510
    madi_write_2 <= '0';
511
   end if;
512
  end if;
513
 end process dp_ram_2_write;
514
 
515
 dp_ram_2 : dp_ram
516
 port map(
517 7 dweil
  clock => madi_clk_in,
518 6 root
  data => madi_data,
519
  rdaddress => adat_addr_2,
520
  wraddress => madi_channel(2 downto 0),
521
  wren => madi_write_2,
522
  q => adat_data_2
523
 );
524
 
525
 adat_transmitter_2 : adat_transmitter
526
 port map(
527
  data_in => adat_data_2,
528
  address_out => adat_addr_2,
529
  bitclk_in => bit_clk_in,
530 7 dweil
  wordclk_in => word_clk,
531 6 root
  adat_out => adat_2_out
532
 );
533
 
534
-- adat channel 3
535
 
536 7 dweil
 dp_ram_3_write : process (madi_clk_in)
537 6 root
 begin
538 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
539 6 root
   if madi_channel(5 downto 3) = 3 and madi_write = '1' then
540
    madi_write_3 <= '1';
541
   else
542
    madi_write_3 <= '0';
543
   end if;
544
  end if;
545
 end process dp_ram_3_write;
546
 
547
 dp_ram_3 : dp_ram
548
 port map(
549 7 dweil
  clock => madi_clk_in,
550 6 root
  data => madi_data,
551
  rdaddress => adat_addr_3,
552
  wraddress => madi_channel(2 downto 0),
553
  wren => madi_write_3,
554
  q => adat_data_3
555
 );
556
 
557
 adat_transmitter_3 : adat_transmitter
558
 port map(
559
  data_in => adat_data_3,
560
  address_out => adat_addr_3,
561
  bitclk_in => bit_clk_in,
562 7 dweil
  wordclk_in => word_clk,
563 6 root
  adat_out => adat_3_out
564
 );
565
 
566
-- adat channel 4
567
 
568 7 dweil
 dp_ram_4_write : process (madi_clk_in)
569 6 root
 begin
570 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
571 6 root
   if madi_channel(5 downto 3) = 4 and madi_write = '1' then
572
    madi_write_4 <= '1';
573
   else
574
    madi_write_4 <= '0';
575
   end if;
576
  end if;
577
 end process dp_ram_4_write;
578
 
579
 dp_ram_4 : dp_ram
580
 port map(
581 7 dweil
  clock => madi_clk_in,
582 6 root
  data => madi_data,
583
  rdaddress => adat_addr_4,
584
  wraddress => madi_channel(2 downto 0),
585
  wren => madi_write_4,
586
  q => adat_data_4
587
 );
588
 
589
 adat_transmitter_4 : adat_transmitter
590
 port map(
591
  data_in => adat_data_4,
592
  address_out => adat_addr_4,
593
  bitclk_in => bit_clk_in,
594 7 dweil
  wordclk_in => word_clk,
595 6 root
  adat_out => adat_4_out
596
 );
597
 
598
-- adat channel 5
599
 
600 7 dweil
 dp_ram_5_write : process (madi_clk_in)
601 6 root
 begin
602 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
603 6 root
   if madi_channel(5 downto 3) = 5 and madi_write = '1' then
604
    madi_write_5 <= '1';
605
   else
606
    madi_write_5 <= '0';
607
   end if;
608
  end if;
609
 end process dp_ram_5_write;
610
 
611
 dp_ram_5 : dp_ram
612
 port map(
613 7 dweil
  clock => madi_clk_in,
614 6 root
  data => madi_data,
615
  rdaddress => adat_addr_5,
616
  wraddress => madi_channel(2 downto 0),
617
  wren => madi_write_5,
618
  q => adat_data_5
619
 );
620
 
621
 adat_transmitter_5 : adat_transmitter
622
 port map(
623
  data_in => adat_data_5,
624
  address_out => adat_addr_5,
625
  bitclk_in => bit_clk_in,
626 7 dweil
  wordclk_in => word_clk,
627 6 root
  adat_out => adat_5_out
628
 );
629
 
630
-- adat channel 6
631
 
632 7 dweil
 dp_ram_6_write : process (madi_clk_in)
633 6 root
 begin
634 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
635 6 root
   if madi_channel(5 downto 3) = 6 and madi_write = '1' then
636
    madi_write_6 <= '1';
637
   else
638
    madi_write_6 <= '0';
639
   end if;
640
  end if;
641
 end process dp_ram_6_write;
642
 
643
 dp_ram_6 : dp_ram
644
 port map(
645 7 dweil
  clock => madi_clk_in,
646 6 root
  data => madi_data,
647
  rdaddress => adat_addr_6,
648
  wraddress => madi_channel(2 downto 0),
649
  wren => madi_write_6,
650
  q => adat_data_6
651
 );
652
 
653
 adat_transmitter_6 : adat_transmitter
654
 port map(
655
  data_in => adat_data_6,
656
  address_out => adat_addr_6,
657
  bitclk_in => bit_clk_in,
658 7 dweil
  wordclk_in => word_clk,
659 6 root
  adat_out => adat_6_out
660
 );
661
 
662
-- adat channel 7
663
 
664 7 dweil
 dp_ram_7_write : process (madi_clk_in)
665 6 root
 begin
666 7 dweil
  if madi_clk_in'event and madi_clk_in='1' then
667 6 root
   if madi_channel(5 downto 3) = 7 and madi_write = '1' then
668
    madi_write_7 <= '1';
669
   else
670
    madi_write_7 <= '0';
671
   end if;
672
  end if;
673
 end process dp_ram_7_write;
674
 
675
 dp_ram_7 : dp_ram
676
 port map(
677 7 dweil
  clock => madi_clk_in,
678 6 root
  data => madi_data,
679
  rdaddress => adat_addr_7,
680
  wraddress => madi_channel(2 downto 0),
681
  wren => madi_write_7,
682
  q => adat_data_7
683
 );
684
 
685
 adat_transmitter_7 : adat_transmitter
686
 port map(
687
  data_in => adat_data_7,
688
  address_out => adat_addr_7,
689
  bitclk_in => bit_clk_in,
690 7 dweil
  wordclk_in => word_clk,
691 6 root
  adat_out => adat_7_out
692
 );
693
 
694
end behavioral;

powered by: WebSVN 2.1.0

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