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

Subversion Repositories gigabit_udp_mac

[/] [gigabit_udp_mac/] [trunk/] [LAN/] [UDP_KED/] [ping_cheksum_calc.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 boa_a_m
--****************************************************************************************
2
library IEEE;
3
use IEEE.STD_LOGIC_1164.all;
4
use IEEE.NUMERIC_STD.all;
5
use IEEE.std_logic_unsigned.all;
6
 
7
library work;
8
use work.signal_Package.all;
9
 
10
library unisim;
11
use unisim.vcomponents.all;
12
 
13
entity ping_cheksum_calc is
14
port
15
(
16
        i_clk                : in  std_logic;
17
        i_reset              : in  std_logic;
18
        i_din                : in  std_logic_vector(7 downto 0);
19
        i_din_rdy            : in  std_logic;
20
        i_start_calc         : in  std_logic;
21
        i_stop_calc          : in  std_logic;
22
        o_checksum_valid     : out std_logic;
23
        o_checksum           : out std_logic_vector(15 downto 0)
24
);
25
end ping_cheksum_calc;
26
 
27
architecture Behavioral of ping_cheksum_calc is
28
--================================= Constant ===========================================================
29
--Generate Block Conditional Constants
30
constant c_GENERATE_PING_MODULE             : boolean  := true;                                  --if Ping Block is not Used,Value is False
31
constant c_GENERATE_ARP_MODULE              : boolean  := true;                                  --if ARP  Block is not Used,Value is False
32
constant c_DEFAULT_DST_MAC_ADDR             : std_logic_vector (47 downto 0) := x"F46D04962225"; --if ARP Block is not Used,Copy PC MAC Address to This Value    
33
 
34
 
35
--Application Layer Data Length
36
constant c_PACKET_LENGTH                    : std_logic_vector (15 downto 0):= x"05c0";          --1472 (Maximum Application Layer Packet Length)
37
constant c_udp_tx_src_ip                    : std_logic_vector (31 downto 0):= x"C0A86403";      --192.168.100.3(FPGA IP Adress)
38
constant c_udp_tx_dst_ip                    : std_logic_vector (31 downto 0):= x"C0A86402";      --192.168.100.2(PC IP Address)
39
constant c_udp_tx_protocol                  : std_logic_vector (7 downto 0) := x"11";            --UDP Protocol
40
constant c_udp_tx_src_mac                   : std_logic_vector (47 downto 0):= x"112233445566";  --FPGA MAC Address
41
constant c_udp_tx_checksum                  : std_logic_vector (15 downto 0):= x"0000";          --UDP Checksum(Value For This Constant is not Importanat)
42
constant c_udp_tx_src_port                  : std_logic_vector (15 downto 0):= x"0401";          --UDP Src Port(Value For This Constant is not Importanat)
43
constant c_udp_tx_dst_port                  : std_logic_vector (15 downto 0):= x"0FF5";          --UDP Dst Port(Value For This Constant is not Importanat)
44
 
45
 
46
--ARP Constants
47
constant c_TIME_OUT_LOOKUP_TABLE_ARP        : std_logic_vector (31 downto 0) := x"9502F900";     --20S(Value/125MHz = 20 )       
48
constant c_TIME_OUT_WAIT_FOR_ARP_REPLY      : std_logic_vector (31 downto 0) := x"07735940";     --1S    (Value/125MHz = 1 )     
49
constant c_RE_SEND_ARP_REQUEST              : std_logic_vector (3 downto 0)  := x"A";            --10    
50
 
51
 
52
--IP Constants
53
constant c_IP_TTL                           : std_logic_vector (7 downto 0)  := x"80";           -- IP Packet Time to live
54
constant c_IP_BC_ADDR                       : std_logic_vector (31 downto 0) := x"ffffffff";     -- Broadcast IP  Address
55
constant c_MAC_BC_ADDR                      : std_logic_vector (47 downto 0) := x"ffffffffffff"; -- Broadcast MAC Address
56
--======================================================================================================
57
 
58
--===================== Reset_gen Signals ==============================================================
59
signal   s_cnt_rst     : std_logic_vector(15 downto 0):=(others=>'0');
60
--======================================================================================================
61
 
62
--================================ Ethernet 1g Signals =================================================
63
signal   s_gtx_clk                :  std_logic;
64
signal   s_tx_clk                 :  std_logic;
65
signal   s_rx_clk                 :  std_logic;
66
signal   s_rstn                   :  std_logic;
67
signal   s_rx_reset             :  std_logic;
68
signal   s_tx_reset             :  std_logic;
69
 
70
 
71
--mac to gmii_if signals
72
signal   s_mac_gmii_rxd           :  std_logic_vector(7 downto 0);
73
signal   s_mac_gmii_rx_dv         :  std_logic;
74
signal   s_mac_gmii_rx_er         :  std_logic;
75
 
76
signal   s_mac_gmii_txd           :  std_logic_vector(7 downto 0);
77
signal   s_mac_gmii_tx_en         :  std_logic;
78
signal   s_mac_gmii_tx_er         :  std_logic;
79
 
80
 
81
 
82
--ip to mac signals
83
signal   s_mac_tx_tready        :  std_logic;
84
signal  s_mac_tx_tdata         :  std_logic_vector(7 downto 0);
85
signal   s_mac_tx_tvalid        :  std_logic;
86
signal   s_mac_tx_tlast         :  std_logic;
87
 
88
signal   s_mac_rx_tdata         :  std_logic_vector(7 downto 0);
89
signal   s_mac_rx_tvalid        :  std_logic;
90
signal   s_mac_rx_tlast         :  std_logic;
91
--======================================================================================================
92
 
93
 
94
--================================ UDP Signals =========================================================
95
    -------- for transfer Rx data from IP to UDP layer----------------
96
        signal s_ip_rx_dout           :  std_logic_vector(7 downto 0);
97
        signal s_ip_rx_dout_rdy       :  std_logic;
98
        signal s_ip_rx_dout_last      :  std_logic;
99
 
100
        -------- for transfer Rx status data from IP to UDP layer---------
101
        signal s_ip_rx_src_ip         :  std_logic_vector(31 downto 0);
102
    signal s_ip_rx_dst_ip         :  std_logic_vector(31 downto 0);
103
    signal s_ip_rx_data_len       :  std_logic_vector(15 downto 0);
104
    signal s_ip_rx_protocol       :  std_logic_vector(7 downto 0);
105
    signal s_ip_rx_broadcast      :  std_logic;
106
    signal s_ip_rx_err_out_udp        :  std_logic_vector (3 downto 0);
107
    signal s_ip_tx_err_out_udp        :  std_logic_vector (3 downto 0);
108
    signal s_arp_rx_err_out_udp       :  std_logic_vector (3 downto 0);
109
 
110
        -------- for transfer Tx data from UDP to IP layer---------------
111
        signal s_ip_tx_start          :  std_logic;
112
        signal s_ip_tx_rdy            :  std_logic;
113
        signal s_ip_tx_din                :  std_logic_vector(7 downto 0);
114
 
115
        -------- for transfer Tx header data from UDP to IP layer--------
116
        signal s_ip_tx_src_ip         :  std_logic_vector(31 downto 0);
117
        signal s_ip_tx_dst_ip         :  std_logic_vector(31 downto 0);
118
        signal s_ip_tx_src_mac        :  std_logic_vector(47 downto 0);
119
        signal s_ip_tx_data_len       :  std_logic_vector(15 downto 0);
120
        signal s_ip_tx_protocol       :  std_logic_vector(7 downto 0);
121
        -----------------------------------------------------------------
122
--======================================================================================================
123
 
124
 
125
 
126
--============================= IP Signals =============================================================
127
  signal s_ip_mac_tx_tvalid    : std_logic;
128
  signal s_ip_mac_tx_tlast     : std_logic;
129
  signal s_ip_mac_tx_tdata     : std_logic_vector(7 downto 0);
130
  signal s_ip_mac_tx_req       : std_logic;
131
  signal s_ip_mac_tx_granted   : std_logic;
132
 
133
  signal s_arp_mac_tx_tvalid   : std_logic;
134
  signal s_arp_mac_tx_tlast    : std_logic;
135
  signal s_arp_mac_tx_tdata    : std_logic_vector(7 downto 0);
136
  signal s_arp_mac_tx_req      : std_logic;
137
  signal s_arp_mac_tx_granted  : std_logic;
138
 
139
  signal s_ping_mac_tx_tvalid   : std_logic;
140
  signal s_ping_mac_tx_tlast    : std_logic;
141
  signal s_ping_mac_tx_tdata    : std_logic_vector(7 downto 0);
142
  signal s_ping_mac_tx_req      : std_logic;
143
  signal s_ping_mac_tx_granted  : std_logic;
144
 
145
  signal s_lookup_req          : std_logic;
146
  signal s_lookup_ip           : std_logic_vector(31 downto 0);
147
  signal s_lookup_mac_addr     : std_logic_vector(47 downto 0);
148
  signal s_lookup_mac_got      : std_logic;
149
  signal s_lookup_mac_err      : std_logic;
150
 
151
 
152
 
153
  signal s_no_ping_packet      : std_logic;
154
  signal s_ip_rx_err_out            : std_logic_vector(3 downto 0);
155
  --======================================================================================================
156
 
157
 
158
 
159
 
160
 
161
 
162
 
163
 
164
 
165
 
166
 
167
 
168
  --============================= IP4_TX Signals ==========================================================
169
  type t_tx_ip_state_type   is (IDLE,WAIT_MAC_ADDR,WAIT_CHN,SEND_DATA);
170
  type t_crc_state_type  is (IDLE, TOT_LEN, ID, FLAGS, TTL, CKS, SAH, SAL, DAH, DAL, ADDOVF, FINAL, WAIT_END);
171
  signal st_crc_state     : t_crc_state_type:=IDLE;
172
  signal s_tx_hdr_cks    : std_logic_vector (23 downto 0):=(others=>'0');
173
  signal s_cal_cheksum   : std_logic:='0';
174
 
175
 
176
  signal st_tx_ip_state      : t_tx_ip_state_type:=IDLE;
177
  signal s_cnt_ip_tx      : std_logic_vector (15 downto 0):=(others=>'0');
178
  signal s_dst_mac_addr  : std_logic_vector (47 downto 0); -- arp block updats this signal
179
  signal s_total_length  : std_logic_vector (15 downto 0); -- s_total_length is i_data_length+20(ip header) 
180
 
181
  signal s_ip_header     : std_logic_vector (7 downto 0):=(others=>'0');
182
  --========================================================================================================
183
 
184
 
185
 
186
 
187
 
188
 
189
 
190
 
191
 
192
 
193
  --============================ IP4_RX  Signals============================================================
194
  type t_rx_ip_state_type is (IDLE,ETH_H,IP_H,USER_DATA,WAIT_END);
195
  signal st_RX_IP_STATE         : t_rx_ip_state_type:=IDLE;
196
  signal s_cnt_ip_rx         : std_logic_vector (15 downto 0):=x"0001";
197
 
198
  signal s_src_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
199
  signal s_dst_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
200
  signal s_data_len_ip_rx       : std_logic_vector (15 downto 0):=(others=>'0');
201
  signal s_protocol_ip_rx       : std_logic_vector (7 downto 0) :=(others=>'0');
202
  signal s_broadcast_ip_rx      : std_logic;
203
  --========================================================================================================
204
 
205
 
206
 
207
 
208
 
209
 
210
 
211
 
212
 
213
 
214
 
215
--==================================== ARP Signals ==========================================================
216
type         t_arp_state_type is     (IDLE,LOOK_UP,WAIT_PC_REPLY);
217
signal       st_ARP_STATE             : t_arp_state_type:=IDLE;
218
signal       s_timeout_wait_reply_cnt           : std_logic_vector(31 downto 0):=(others=>'0');
219
signal       s_error_cnt             : std_logic_vector(3 downto 0):=(others=>'0');
220
 
221
--ARP_TX Signals
222
signal       s_dst_ip_addr_pc      : std_logic_vector(31 downto 0):=(others=>'0');
223
signal       s_dst_mac_addr_pc     : std_logic_vector(47 downto 0):=(others=>'0');
224
signal       s_dst_ip_addr_lookup  : std_logic_vector(31 downto 0):=(others=>'0');
225
signal       s_fpga_req_tx         : std_logic:='0';
226
signal       s_pc_req_tx           : std_logic:='0';
227
 
228
 
229
--ARP_RX Signals
230
signal       s_ip_addr0            : std_logic_vector(31 downto 0);
231
signal       s_mac_addr0           : std_logic_vector(47 downto 0);
232
signal       s_addr_valid0         : std_logic;
233
signal       s_pc_reply_rx         : std_logic;
234
signal       s_pc_req_rx           : std_logic;
235
--===========================================================================================================
236
 
237
 
238
 
239
 
240
 
241
 
242
 
243
 
244
 
245
 
246
 
247
--=============================== ARP RX Signals ============================================================
248
type t_rx_arp_state_type is       (IDLE,ETH_H,ARP_DATA,WAIT_END);
249
signal st_RX_ARP_STATE             : t_rx_arp_state_type:=IDLE;
250
signal s_cnt_arp_rx             : std_logic_vector (15 downto 0):=x"0001";
251
 
252
 
253
signal s_dst_ip            : std_logic_vector (31 downto 0):=(others=>'0');
254
signal s_operation         : std_logic_vector (15 downto 0):=(others=>'0');
255
signal s_addr_valid        : std_logic:='0';
256
signal s_pc_req            : std_logic:='0';
257
signal s_pc_reply          : std_logic:='0';
258
 
259
 
260
signal s_src_mac_arp_rx            : std_logic_vector (47 downto 0):=(others=>'0');
261
signal s_src_ip_arp_rx             : std_logic_vector (31 downto 0):=(others=>'0');
262
signal s_addr_valid_pulse   : std_logic:='0';
263
signal s_pc_req_pulse       : std_logic:='0';
264
signal s_pc_reply_pulse     : std_logic:='0';
265
signal s_trans_data_pulse   : std_logic:='0';
266
--===========================================================================================================
267
 
268
 
269
 
270
 
271
 
272
 
273
 
274
 
275
 
276
 
277
 
278
 
279
--=================================== ARP LOOKUP_TABLE Signals ==============================================
280
signal   s_timeout_lookup_table_cnt        : std_logic_vector(31 downto 0):=(others=>'0');
281
 
282
signal   s_din              : std_logic_vector(82 downto 0):=(others=>'0');
283
signal   s_wr_en            : std_logic;
284
signal   s_dout             : std_logic_vector(82 downto 0):=(others=>'0');
285
signal   s_valid            : std_logic;
286
signal   s_empty              : std_logic;
287
signal   s_notempty           : std_logic;
288
 
289
 
290
signal   s_mac_addr_out     : std_logic_vector(47 downto 0):=(others=>'0');
291
signal   s_ip_addr_out      : std_logic_vector(31 downto 0):=(others=>'0');
292
signal   s_addr_valid_out   : std_logic:='0';
293
signal   s_request_out      : std_logic:='0';
294
signal   s_reply_out        : std_logic:='0';
295
--============================================================================================================
296
 
297
 
298
 
299
 
300
 
301
 
302
 
303
 
304
 
305
 
306
 
307
--============================ ARP TX Signals ================================================================
308
type t_arp_tx_state_type   is (IDLE,WAIT_CHN,SEND_DATA);
309
signal st_tx_arp_state          : t_arp_tx_state_type:=IDLE;
310
signal s_cnt_arp_tx          : std_logic_vector (7 downto 0):=(others=>'0');
311
signal s_arp_type          : std_logic_vector (15 downto 0):=(others=>'0');
312
signal s_dst_ip_addr     : std_logic_vector (31 downto 0):=(others=>'0');
313
signal s_dst_mac_addr1   : std_logic_vector (47 downto 0):=(others=>'0');
314
signal s_dst_mac_addr2   : std_logic_vector (47 downto 0):=(others=>'0');
315
--============================================================================================================
316
 
317
 
318
 
319
 
320
 
321
 
322
 
323
 
324
 
325
 
326
 
327
 
328
--============================== PING Signals =================================================================
329
--for Delayed Inputs
330
signal   s_mac_data_in_r        : std_logic_vector (7 downto 0);
331
signal   s_mac_data_in_valid_r  : std_logic;
332
signal   s_mac_data_in_last_r   : std_logic;
333
 
334
 
335
--Sync_fifo_ping Signals
336
signal   s_ip_rx_in          : std_logic_vector(14 downto 0);
337
signal   s_ip_rx_out         : std_logic_vector(14 downto 0):=(others=>'0');
338
signal   s_mac_data_in          : std_logic_vector(7 downto 0);
339
signal   s_mac_data_in_valid  : std_logic;
340
signal   s_mac_data_in_last   : std_logic;
341
signal   s_mac_data_in_last_d : std_logic;
342
signal   s_ip_rx_err_in       : std_logic_vector(3 downto 0);
343
signal   s_no_ping_data     : std_logic;
344
signal   s_empty_sync_fifo    : std_logic:='0';
345
signal   s_not_empty_sync_fifo: std_logic;
346
 
347
 
348
--Data_fifo_ping Signals
349
signal   s_rst_fifo_ping     : std_logic:='1';
350
signal   s_wr_en_fifo_ping   : std_logic:='0';
351
signal   s_din_fifo_ping     : std_logic_vector(7 downto 0):=(others=>'0');
352
signal   s_rd_en_fifo_ping   : std_logic;
353
signal   s_dout_fifo_ping    : std_logic_vector(7 downto 0);
354
 
355
 
356
--Checksum Signals
357
signal   s_checksum_data_out   : std_logic_vector(15 downto 0);
358
signal   s_checksum_data_in    : std_logic_vector(7 downto 0);
359
signal   s_checksum_start_calc : std_logic:='0';
360
signal   s_checksum_stop_calc  : std_logic:='0';
361
 
362
 
363
--st_PING_STATE Machine Process Signals 
364
type     t_ping_state            is (IDLE,ACQUIRE_DATA,WAIT_END,WAIT_CHN,SEND_DATA);
365
signal   st_PING_STATE               : t_ping_state:=IDLE;
366
signal   s_wr_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
367
signal   s_rd_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
368
signal   s_start_send          : std_logic;
369
 
370
 
371
signal   s_src_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
372
signal   s_dst_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
373
signal   s_src_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
374
signal   s_dst_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
375
--=================================================================================================================
376
 
377
 
378
 
379
 
380
 
381
 
382
 
383
 
384
 
385
 
386
 
387
 
388
--================================= Ping Checksum Calc Signals ====================================================
389
type        t_checksum_state   is   (IDLE,CALC);
390
signal      st_checksum_state      : t_checksum_state:=IDLE;
391
 
392
signal      s_flag       : std_logic:='0';
393
signal      s_din_r      : std_logic_vector(7 downto 0);
394
signal      s_sum        : std_logic_vector(31 downto 0):=(others=>'0');
395
--=================================================================================================================
396
 
397
 
398
 
399
 
400
 
401
 
402
 
403
 
404
 
405
 
406
 
407
--============================ TX_Arbitior Signals =====================================================================
408
type   t_state_type is       (IDLE,DATA_REQ,ARP_REQ,PING_REQ);
409
signal st_STATE               : t_state_type:=IDLE;
410
--======================================================================================================================
411
 
412
 
413
 
414
 
415
 
416
 
417
 
418
 
419
 
420
 
421
 
422
 
423
--============================ UDP RX Signals ===========================================================================
424
  type t_rx_udp_state_type is  (IDLE, UDP_HDR, USER_DATA, WAIT_END);
425
  signal st_RX_UDP_STATE         : t_rx_udp_state_type:=IDLE;
426
  signal s_cnt_udp_rx         : std_logic_vector (15 downto 0):=x"0001";
427
 
428
  signal s_src_ip_udp_rx  : std_logic_vector (31 downto 0):=(others=>'0');
429
  signal s_src_port       : std_logic_vector (15 downto 0):=(others=>'0');
430
  signal s_dst_port       : std_logic_vector (15 downto 0):=(others=>'0');
431
  signal s_data_len_udp_rx       : std_logic_vector (15 downto 0):=(others=>'0');
432
  signal s_err_out        : std_logic_vector (3 downto 0) :=(others=>'0');
433
 --======================================================================================================================= 
434
 
435
 
436
 
437
 
438
 
439
 
440
 
441
 
442
 
443
 
444
 
445
 --============================ UDP TX Signals =============================================================================
446
  type t_tx_udp_state_type     is (IDLE,SEND_DATA);
447
  signal st_tx_udp_state        : t_tx_udp_state_type:=IDLE;
448
 
449
  signal s_cnt_udp_tx        : std_logic_vector (15 downto 0):=(others=>'0');
450
  signal s_ip_data_len   : std_logic_vector (15 downto 0);
451
  signal s_udp_header      : std_logic_vector (7 downto 0):=(others=>'0');
452
--==========================================================================================================================
453
 
454
 
455
 
456
 
457
 
458
 
459
 
460
 
461
 
462
 
463
 
464
--============================ PHY_Interface Signals =======================================================================
465
signal s_gmii_col_reg         : std_logic;
466
signal s_gmii_col_reg_reg     : std_logic;
467
signal s_gmii_rx_clk          : std_logic;
468
--==========================================================================================================================
469
 
470
 
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
 
479
 
480
--=========================== Ping_Pong Fifo Signals =======================================================================
481
signal s_empty1              : std_logic;
482
signal s_empty2              : std_logic;
483
signal s_notempty1           : std_logic;
484
signal s_notempty2           : std_logic;
485
 
486
 
487
signal s_data_m              : std_logic_vector(7 downto 0);
488
signal s_valid_m             : std_logic;
489
signal s_last_m              : std_logic;
490
 
491
 
492
signal s_wr_en_a             : std_logic:='0';
493
signal s_din_a               : std_logic_vector(7 downto 0):=(others=>'0');
494
signal s_rd_en_a             : std_logic;
495
signal s_dout_a              : std_logic_vector(7 downto 0);
496
signal s_valid_a             : std_logic;
497
signal s_empty_a             : std_logic;
498
 
499
signal s_wr_en_b             : std_logic:='0';
500
signal s_din_b               : std_logic_vector(7 downto 0):=(others=>'0');
501
signal s_rd_en_b             : std_logic;
502
signal s_dout_b              : std_logic_vector(7 downto 0);
503
signal s_valid_b             : std_logic;
504
signal s_empty_b             : std_logic;
505
 
506
 
507
signal s_cnt_a               : std_logic_vector(15 downto 0):=(others=>'0');
508
signal s_cnt_b               : std_logic_vector(15 downto 0):=(others=>'0');
509
signal s_rd_cnt_a            : std_logic_vector(15 downto 0):=(others=>'0');
510
signal s_rd_cnt_b            : std_logic_vector(15 downto 0):=(others=>'0');
511
 
512
signal s_busy_a              : std_logic:='0';
513
signal s_busy_b              : std_logic:='0';
514
 
515
signal s_last_a              : std_logic:='0';
516
signal s_last_b              : std_logic:='0';
517
 
518
signal s_dout_len          : std_logic_vector(15 downto 0);
519
 
520
type        t_pingpong_state     is (wait_data,rd_fifo_a,rd_fifo_b);
521
signal      st_ping_pong_state          : t_pingpong_state:=wait_data;
522
--========================================================================================================================= 
523
 
524
 
525
begin
526
 
527
--==================== Ping Checksum Calculator ==========================================================
528
p_checksum_calculator:process(i_clk)
529
begin
530
if rising_edge(i_clk) then
531
        if (i_reset='1') then
532
                st_checksum_state       <= IDLE;
533
                s_flag                          <= '0';
534
                s_sum                           <= (others=>'0');
535
                o_checksum_valid                <= '0';
536
                o_checksum                      <= (others=>'0');
537
        else
538
        case st_checksum_state is
539
 
540
        WHEN IDLE       =>
541
                s_flag                          <= '0';
542
                if (i_start_calc='1') then
543
                        s_sum                   <= (others=>'0');
544
                        o_checksum_valid        <= '0';
545
                        o_checksum              <= (others=>'0');
546
                        st_checksum_state       <= CALC;
547
                end if;
548
 
549
        WHEN CALC       =>
550
        if (i_din_rdy='1') then
551
            s_din_r                     <= i_din;
552
            s_flag                      <= not s_flag;
553
            if (s_flag='1') then
554
                                s_sum                   <= s_sum+(x"0000" & s_din_r & i_din);
555
                        end if;
556
        end if;
557
        if (i_stop_calc='1') then
558
            o_checksum          <= not(s_sum(31 downto 16) + s_sum(15 downto 0));
559
                        o_checksum_valid        <= '1';
560
                        st_checksum_state       <= IDLE;
561
                end if;
562
 
563
        END CASE;
564
        end if;
565
end if;
566
end process p_checksum_calculator;
567
--========================================================================================================
568
 
569
end Behavioral;

powered by: WebSVN 2.1.0

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