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

Subversion Repositories socwire

[/] [socwire/] [trunk/] [CODEC/] [socwire_codec.vhd] - Blame information for rev 24

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 22 bjoerno
---====================== Start Software License ========================---
2
--==                                                                    ==--
3
--== This license governs the use of this software, and your use of     ==--
4
--== this software constitutes acceptance of this license. Agreement    ==--
5
--== with all points is required to use this software.                  ==--
6
--==                                                                    ==--
7
--== 1. This source file may be used and distributed without            ==--
8
--== restriction provided that this software license statement is not   ==--
9
--== removed from the file and that any derivative work contains the    ==--
10
--== original software license notice and the associated disclaimer.    ==--
11
--==                                                                    ==--
12
--== 2. This source file is free software; you can redistribute it      ==--
13
--== and/or modify it under the restriction that UNDER NO CIRCUMTANCES  ==--
14
--== this Software is to be used to CONSTRUCT a SPACEWIRE INTERFACE     ==--
15
--== This implies modification and/or derivative work of this Software. ==--
16
--==                                                                    ==--
17
--== 3. This source is distributed in the hope that it will be useful,  ==--
18
--== but WITHOUT ANY WARRANTY; without even the implied warranty of     ==--
19
--== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               ==--
20
--==                                                                    ==--
21
--== Your rights under this license are terminated immediately if you   ==--
22
--== breach it in any way.                                              ==--
23
--==                                                                    ==--
24
---======================= End Software License =========================---
25
 
26
 
27
---====================== Start Copyright Notice ========================---
28
--==                                                                    ==--
29
--== Filename ..... socwire_codec.vhd                                   ==--
30
--== Download ..... http://www.ida.ing.tu-bs.de                         ==--
31
--== Company ...... IDA TU Braunschweig, Prof. Dr.-Ing. Harald Michalik ==--
32
--== Authors ...... Björn Osterloh, Karel Kotarowski                    ==--
33
--== Contact ...... Björn Osterloh (b.osterloh@tu-bs.de)                ==--
34
--== Copyright .... Copyright (c) 2008 IDA                              ==--
35
--== Project ...... SoCWire CODEC                                       ==--
36
--== Version ...... 1.00                                                ==--
37
--== Conception ... 11 November 2008                                    ==--
38
--== Modified ..... N/A                                                 ==--
39
--==                                                                    ==--
40
---======================= End Copyright Notice =========================---
41
 
42
 
43
 
44
LIBRARY IEEE;
45
USE IEEE.STD_LOGIC_1164.ALL;
46
USE WORK.ALL;
47
 
48
 
49
ENTITY socwire_codec IS
50
  GENERIC(
51 23 bjoerno
              --== USE GEREIC MAPPING FROM TOPLEVEL!!!             ==--
52
              datawidth            : NATURAL RANGE 8 TO 8192:=8;
53
         speed                      : NATURAL RANGE 1 TO 100:=10;               -- Set CODEC speed to system clock in nanoseconds !
54
         after64              : NATURAL RANGE 1 TO 6400:=64;   -- Spacewire Standard 6400 = 6.4 us
55
         after128             : NATURAL RANGE 1 TO 12800:=128; -- Spacewire Standard 12800 = 12.8 us                              
56
              disconnect_detection : NATURAL RANGE 1 TO 850:=85     -- Spacewire Standard 850 = 850 ns
57 22 bjoerno
         );
58
  PORT(
59
       --==  General Interface (Sync Rst, 50MHz Clock) ==--
60
 
61
       rst        : IN  STD_LOGIC;
62
       clk        : IN  STD_LOGIC;
63
 
64
       --== Link Enable Interface ==--
65
 
66 23 bjoerno
       socw_en    : IN  STD_LOGIC;
67
       socw_dis   : IN  STD_LOGIC;
68 22 bjoerno
 
69
       --== Serial Receive Interface ==--
70
 
71 23 bjoerno
       rx         : IN  STD_LOGIC_VECTOR(datawidth+1 DOWNTO 0);
72 22 bjoerno
       rx_valid   : IN  STD_LOGIC;
73
 
74
       --== Serial Transmit Interface ==--
75
 
76 23 bjoerno
       tx         : OUT STD_LOGIC_VECTOR(datawidth+1 DOWNTO 0);
77 22 bjoerno
       tx_valid   : OUT STD_LOGIC;
78
 
79
       --== Data Input Interface ==--
80
 
81
       dat_full   : OUT STD_LOGIC;
82
       dat_nwrite : IN  STD_LOGIC;
83 23 bjoerno
       dat_din    : IN  STD_LOGIC_VECTOR(datawidth DOWNTO 0);
84 22 bjoerno
 
85
       --== Data Output Interface ==--
86
 
87
       dat_nread  : IN  STD_LOGIC;
88
       dat_empty  : OUT STD_LOGIC;
89 23 bjoerno
       dat_dout   : OUT STD_LOGIC_VECTOR(datawidth DOWNTO 0);
90 22 bjoerno
 
91
       --== Active Interface ==--
92
 
93
       active     : OUT STD_LOGIC
94
      );
95
END socwire_codec;
96
 
97
 
98
ARCHITECTURE rtl OF socwire_codec IS
99
 
100
---==========================---
101
--== Constants Declarations ==--
102
---==========================---
103
 
104
CONSTANT st_error_reset : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000";
105
CONSTANT st_error_wait  : STD_LOGIC_VECTOR(2 DOWNTO 0) := "001";
106
CONSTANT st_ready       : STD_LOGIC_VECTOR(2 DOWNTO 0) := "010";
107
CONSTANT st_started     : STD_LOGIC_VECTOR(2 DOWNTO 0) := "011";
108
CONSTANT st_connecting  : STD_LOGIC_VECTOR(2 DOWNTO 0) := "100";
109
CONSTANT st_run         : STD_LOGIC_VECTOR(2 DOWNTO 0) := "101";
110
CONSTANT st_unknown_1   : STD_LOGIC_VECTOR(2 DOWNTO 0) := "110";
111
CONSTANT st_unknown_2   : STD_LOGIC_VECTOR(2 DOWNTO 0) := "111";
112
 
113
---===================================---
114
--== Signal Declarations (SM to All) ==--
115
---===================================---
116
 
117
SIGNAL state : STD_LOGIC_VECTOR(2 DOWNTO 0);
118
 
119
---==================================---
120
--== Signal Declarations (Rx to SM) ==--
121
---==================================---
122
 
123
SIGNAL got_null  : STD_LOGIC;
124
SIGNAL got_fct   : STD_LOGIC;
125
SIGNAL got_nchar : STD_LOGIC;
126
SIGNAL err_par   : STD_LOGIC;
127
SIGNAL err_esc   : STD_LOGIC;
128
SIGNAL err_dsc   : STD_LOGIC;
129
SIGNAL err_fct   : STD_LOGIC;
130
SIGNAL err_nchar : STD_LOGIC;
131
 
132
---=======================================---
133
--== Signal Declarations (Rx to Rx FIFO) ==--
134
---=======================================---
135
 
136
SIGNAL dat_full_i   : STD_LOGIC;
137
SIGNAL dat_nwrite_i : STD_LOGIC;
138 23 bjoerno
SIGNAL dat_din_i    : STD_LOGIC_VECTOR(datawidth DOWNTO 0);
139 22 bjoerno
 
140
---=======================================---
141
--== Signal Declarations (Rx FIFO to Tx) ==--
142
---=======================================---
143
 
144
SIGNAL fct_nread_i : STD_LOGIC;
145
SIGNAL fct_empty_i : STD_LOGIC;
146
 
147
---=======================================---
148
--== Signal Declarations (Rx to Tx FIFO) ==--
149
---=======================================---
150
 
151
SIGNAL fct_full_i   : STD_LOGIC;
152
SIGNAL fct_nwrite_i : STD_LOGIC;
153
 
154
---=======================================---
155
--== Signal Declarations (Tx FIFO to Tx) ==--
156
---=======================================---
157
 
158
SIGNAL dat_nread_i : STD_LOGIC;
159
SIGNAL dat_empty_i : STD_LOGIC;
160 23 bjoerno
SIGNAL dat_dout_i  : STD_LOGIC_VECTOR(datawidth DOWNTO 0);
161 22 bjoerno
 
162
---=============================================---
163
--== TESTBENCH : Type Declarations : TESTBENCH ==--
164
---=============================================---
165
 
166
TYPE ss IS
167
  (
168
   error_reset,
169
   error_wait,
170
   ready,
171
   started,
172
   connecting,
173
   run,
174
   unknown_1,
175
   unknown_2,
176
   baffled
177
  );
178
 
179
---===============================================---
180
--== TESTBENCH : Signal Declarations : TESTBENCH ==--
181
---===============================================---
182
 
183
SIGNAL codec_state : ss;
184
 
185
 
186
---=============================================---
187
--== Component Instantiations for leaf modules ==--
188
---=============================================---
189
 
190
COMPONENT receiver
191
  GENERIC(
192 23 bjoerno
            datawidth : NATURAL RANGE 8 TO 8192;
193
            speed        : NATURAL RANGE 1 TO 100;
194
                        disconnect_detection : NATURAL RANGE 1 TO 850
195 22 bjoerno
         );
196
        PORT(
197
       --== General Interface (Sync Rst, 50MHz Clock) ==--
198
 
199
       rst       : IN  STD_LOGIC;
200
       clk       : IN  STD_LOGIC;
201
 
202
       --== SoCWire Interface ==--
203
 
204
       state     : IN  STD_LOGIC_VECTOR(2 DOWNTO 0);
205
 
206
       --== External Receive Interface ==--
207
 
208 23 bjoerno
       rx                : IN  STD_LOGIC_VECTOR(datawidth+1 DOWNTO 0);
209 22 bjoerno
       rx_valid  : IN  STD_LOGIC;
210
 
211
       --== Character Interface ==--
212
 
213
       got_null  : OUT STD_LOGIC;
214
       got_fct   : OUT STD_LOGIC;
215
       got_nchar : OUT STD_LOGIC;
216
 
217
       --== Error Interface ==--
218
 
219
       err_par   : OUT STD_LOGIC;
220
       err_esc   : OUT STD_LOGIC;
221
       err_dsc   : OUT STD_LOGIC;
222
       err_fct   : OUT STD_LOGIC;
223
       err_nchar : OUT STD_LOGIC;
224
 
225
       --== Data Output Interface ==--
226
 
227
       dat_nread : IN  STD_LOGIC;
228
       dat_empty : OUT STD_LOGIC;
229 23 bjoerno
       dat_dout  : OUT STD_LOGIC_VECTOR(datawidth DOWNTO 0);
230 22 bjoerno
 
231
       --== FCT Output Interface ==--
232
 
233
       fct_nread : IN  STD_LOGIC;
234
       fct_empty : OUT STD_LOGIC
235
      );
236
END COMPONENT;
237
 
238
COMPONENT receive_fifo
239
 
240
  GENERIC(
241 23 bjoerno
          datawidth : NATURAL RANGE 8 TO 8192
242 22 bjoerno
         );
243
 
244
        PORT(
245
       --== General Interface (Sync Rst, 50MHz Clock) ==--
246
 
247
       rst        : IN  STD_LOGIC;
248
       clk        : IN  STD_LOGIC;
249
 
250
       --== SoCWire Interface ==--
251
 
252
       state      : IN  STD_LOGIC_VECTOR(2 DOWNTO 0);
253
 
254
       --== Data Input Interface ==--
255
 
256
       dat_full   : OUT STD_LOGIC;
257
       dat_nwrite : IN  STD_LOGIC;
258 23 bjoerno
       dat_din    : IN  STD_LOGIC_VECTOR(datawidth DOWNTO 0);
259 22 bjoerno
 
260
       --== Data Output Interface ==--
261
 
262
       dat_nread  : IN  STD_LOGIC;
263
       dat_empty  : OUT STD_LOGIC;
264 23 bjoerno
       dat_dout   : OUT STD_LOGIC_VECTOR(datawidth DOWNTO 0);
265 22 bjoerno
 
266
       --== FCT Output Interface ==--
267
 
268
       fct_nread  : IN  STD_LOGIC;
269
       fct_empty  : OUT STD_LOGIC
270
      );
271
END COMPONENT receive_fifo;
272
 
273
COMPONENT state_machine
274
    GENERIC(
275 23 bjoerno
             speed       : NATURAL RANGE 1 TO 100;
276
                         after64   : NATURAL RANGE 1 TO 6400;
277
                         after128  : NATURAL RANGE 1 TO 12800
278 22 bjoerno
           );
279
        PORT(
280
       --==  General Interface (Sync Rst, 50MHz Clock) ==--
281
 
282
       rst       : IN  STD_LOGIC;
283
       clk       : IN  STD_LOGIC;
284
 
285
       --== Link Enable Interface ==--
286
 
287 23 bjoerno
       socw_en    : IN  STD_LOGIC;
288
       socw_dis   : IN  STD_LOGIC;
289 22 bjoerno
 
290
       --== SoCWire Interface ==--
291
 
292
       state     : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
293
 
294
       --== Character Interface ==--
295
 
296
       got_null  : IN  STD_LOGIC;
297
       got_fct   : IN  STD_LOGIC;
298
       got_nchar : IN  STD_LOGIC;
299
 
300
       --== Error Interface ==--
301
 
302
       err_par   : IN  STD_LOGIC;
303
       err_esc   : IN  STD_LOGIC;
304
       err_dsc   : IN  STD_LOGIC;
305
       err_fct   : IN  STD_LOGIC;
306
       err_nchar : IN  STD_LOGIC;
307
 
308
       --== Active Interface ==--
309
 
310
       active    : OUT STD_LOGIC
311
      );
312
END COMPONENT state_machine;
313
 
314
COMPONENT transmitter
315
  GENERIC(
316 23 bjoerno
          datawidth : NATURAL RANGE 8 TO 8192
317 22 bjoerno
         );
318
        PORT(
319
 
320
       --== General Interface (Sync Rst, 50MHz Clock) ==--
321
 
322
       rst        : IN  STD_LOGIC;
323
       clk        : IN  STD_LOGIC;
324
 
325
       --== SoCWire Interface ==--
326
 
327
       state      : IN  STD_LOGIC_VECTOR(2 DOWNTO 0);
328
 
329
       --== External Transmit Interface ==--
330
 
331 23 bjoerno
       tx                 : OUT STD_LOGIC_VECTOR(datawidth+1 DOWNTO 0);
332 22 bjoerno
       tx_valid   : OUT STD_LOGIC;
333
 
334
       --== Data Input Interface ==--
335
 
336
       dat_full   : OUT STD_LOGIC;
337
       dat_nwrite : IN  STD_LOGIC;
338 23 bjoerno
       dat_din    : IN  STD_LOGIC_VECTOR(datawidth DOWNTO 0);
339 22 bjoerno
 
340
       --== FCT Input Interface ==--
341
 
342
       fct_full   : OUT STD_LOGIC;
343
       fct_nwrite : IN  STD_LOGIC
344
      );
345
END COMPONENT transmitter;
346
 
347
COMPONENT transmit_fifo
348
  GENERIC(
349 23 bjoerno
          datawidth : NATURAL RANGE 8 TO 8192
350 22 bjoerno
         );
351
        PORT(
352
       --== General Interface (Sync Rst, 50MHz Clock) ==--
353
 
354
       rst        : IN  STD_LOGIC;
355
       clk        : IN  STD_LOGIC;
356
 
357
       --== SoCWire Interface ==--
358
 
359
       state      : IN  STD_LOGIC_VECTOR(2 DOWNTO 0);
360
 
361
       --== Data Input Interface ==--
362
 
363
       dat_full   : OUT STD_LOGIC;
364
       dat_nwrite : IN  STD_LOGIC;
365 23 bjoerno
       dat_din    : IN  STD_LOGIC_VECTOR(datawidth DOWNTO 0);
366 22 bjoerno
 
367
       --== Data Output Interface ==--
368
 
369
       dat_nread  : IN  STD_LOGIC;
370
       dat_empty  : OUT STD_LOGIC;
371 23 bjoerno
       dat_dout   : OUT STD_LOGIC_VECTOR(datawidth DOWNTO 0);
372 22 bjoerno
 
373
       --== FCT Input Interface ==--
374
 
375
       fct_full   : OUT STD_LOGIC;
376
       fct_nwrite : IN  STD_LOGIC
377
      );
378
END COMPONENT transmit_fifo;
379
 
380
BEGIN
381
 
382
  ---===================================================---
383
  --== TESTBENCH : Show State more clearly : TESTBENCH ==--
384
  ---===================================================---
385
 
386
  codec_state <= error_reset WHEN (state = st_error_reset) ELSE
387
                 error_wait  WHEN (state = st_error_wait) ELSE
388
                 ready       WHEN (state = st_ready) ELSE
389
                 started     WHEN (state = st_started) ELSE
390
                 connecting  WHEN (state = st_connecting) ELSE
391
                 run         WHEN (state = st_run) ELSE
392
                 unknown_1   WHEN (state = st_unknown_1) ELSE
393
                 unknown_2   WHEN (state = st_unknown_2) ELSE
394
                 baffled;
395
 
396
 
397
  ---======================---
398
  --== SoCWire Receiver ==--
399
  ---======================---
400
 
401 23 bjoerno
  rx0 : receiver
402 22 bjoerno
    GENERIC MAP
403
          ( speed => speed,
404 23 bjoerno
            datawidth => datawidth,
405
                disconnect_detection=>disconnect_detection)
406 22 bjoerno
    PORT MAP
407
      (--==  General Interface (Sync Rst) ==--
408
       rst       => rst,
409
       clk       => clk,
410
       --== SoCWire Interface ==--
411
       state     => state,
412
       --== External Receive Interface ==--
413
       rx                => rx,
414
       rx_valid  => rx_valid,
415
       --== Character Interface ==--
416
       got_null  => got_null,
417
       got_fct   => got_fct,
418
       got_nchar => got_nchar,
419
       --== Error Interface ==--
420
       err_par   => err_par,
421
       err_esc   => err_esc,
422
       err_dsc   => err_dsc,
423
       err_fct   => err_fct,
424
       err_nchar => err_nchar,
425
       --== Data Output Interface ==--
426
       dat_nread => dat_full_i,
427
       dat_empty => dat_nwrite_i,
428
       dat_dout  => dat_din_i,
429
       --== FCT Output Interface ==--
430
       fct_nread => fct_full_i,
431
       fct_empty => fct_nwrite_i
432
      );
433
 
434
 
435
  ---================---
436
  --== Receive FIFO ==--
437
  ---================---
438
 
439 23 bjoerno
  rx_fifo : receive_fifo
440 22 bjoerno
      GENERIC MAP
441 23 bjoerno
          ( datawidth => datawidth )
442 22 bjoerno
    PORT MAP
443
      (--==  General Interface (Sync Rst) ==--
444
       rst        => rst,
445
       clk        => clk,
446
       --== SoCWire Interface ==--
447
       state      => state,
448
       --== Data Input Interface ==--
449
       dat_full   => dat_full_i,
450
       dat_nwrite => dat_nwrite_i,
451
       dat_din    => dat_din_i,
452
       --== Data Output Interface ==--
453
       dat_nread  => dat_nread,
454
       dat_empty  => dat_empty,
455
       dat_dout   => dat_dout,
456
       --== FCT Output Interface ==--
457
       fct_nread  => fct_nread_i,
458
       fct_empty  => fct_empty_i
459
      );
460
 
461
 
462
  ---===========================---
463
  --== SoCWire State Machine ==--
464
  ---===========================---
465
 
466 23 bjoerno
  statem : state_machine
467 22 bjoerno
    GENERIC MAP
468 23 bjoerno
          (  speed =>  speed,
469
                 after64 =>after64,
470
                 after128=>after128)
471 22 bjoerno
    PORT MAP
472
      (--==  General Interface (Sync Rst, 50MHz Clock) ==--
473
       rst       => rst,
474
       clk       => clk,
475
       --== Link Enable Interface ==--
476 23 bjoerno
       socw_en    => socw_en,
477
       socw_dis   => socw_dis,
478 22 bjoerno
       --== SoCWire Interface ==--
479
       state     => state,
480
       --== Character Interface ==--
481
       got_null  => got_null,
482
       got_fct   => got_fct,
483
       got_nchar => got_nchar,
484
       --== Error Interface ==--
485
       err_par   => err_par,
486
       err_esc   => err_esc,
487
       err_dsc   => err_dsc,
488
       err_fct   => err_fct,
489
       err_nchar => err_nchar,
490
       --== Active Interface ==--
491
       active    => active
492
      );
493
 
494
 
495
  ---=========================---
496
  --== SoCWire Transmitter ==--
497
  ---=========================---
498
 
499 23 bjoerno
  tx0 : transmitter
500 22 bjoerno
    GENERIC MAP
501 23 bjoerno
          ( datawidth =>  datawidth )
502 22 bjoerno
    PORT MAP
503
      (--== General Interface (Sync Rst, 50MHz Clock) ==--
504
       rst        => rst,
505
       clk        => clk,
506
       --== SoCWire Interface ==--
507
       state      => state,
508
       --== External Transmit Interface ==--
509
       tx                 => tx,
510
       tx_valid   => tx_valid,
511
       --== Data Input Interface ==--
512
       dat_full   => dat_nread_i,
513
       dat_nwrite => dat_empty_i,
514
       dat_din    => dat_dout_i,
515
       --== FCT Input Interface ==--
516
       fct_full   => fct_nread_i,
517
       fct_nwrite => fct_empty_i
518
      );
519
 
520
 
521
  ---====================---
522
  --== Transmitter FIFO ==--
523
  ---====================---
524
 
525 23 bjoerno
  tx_fifo : transmit_fifo
526 22 bjoerno
    GENERIC MAP
527 23 bjoerno
          ( datawidth =>  datawidth )
528 22 bjoerno
    PORT MAP
529
      (--== General Interface (Sync Rst, 50MHz Clock) ==--
530
       rst        => rst,
531
       clk        => clk,
532
       --== SoCWire Interface ==--
533
       state      => state,
534
       --== Data Input Interface ==--
535
       dat_full   => dat_full,
536
       dat_nwrite => dat_nwrite,
537
       dat_din    => dat_din,
538
       --== Data Output Interface ==--
539
       dat_nread  => dat_nread_i,
540
       dat_empty  => dat_empty_i,
541
       dat_dout   => dat_dout_i,
542
       --== FCT Input Interface ==--
543
       fct_full   => fct_full_i,
544
       fct_nwrite => fct_nwrite_i
545
      );
546
 
547
END rtl;

powered by: WebSVN 2.1.0

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