22#include < systemc.h>
33#include " packetGenerator.h"
44
5-
65void packetGenerator::fill_data (unsigned char * data, int packet_length)
76{
87 int actual_length = (packet_length * 2 > N) ? N : packet_length * 2 ;
98 unsigned char tmp_data;
10- sc_dt::sc_bv<N * 4 > tmp_data_in = data_in; // Ensure data_in is properly connected
11- sc_dt::sc_bv<N> tmp_data_valid = data_in_valid; // Ensure data_in_valid is properly connected
9+ sc_dt::sc_bv<N * 4 > tmp_data_in = 0 ;
10+ sc_dt::sc_bv<N> tmp_data_valid = 0 ;
1211
1312 for (int i = 0 ; i < actual_length; i++)
1413 {
@@ -23,54 +22,100 @@ void packetGenerator::fill_data(unsigned char* data, int packet_length)
2322
2423 data_in = tmp_data_in;
2524 data_in_valid = tmp_data_valid;
26- n1_data_in_valid = tmp_data_valid;
27- n2_data_in_valid = tmp_data_valid;
28- }
2925
30- void packetGenerator::processing ()
31- {
32- generate_packet ();
26+ // Insert first the preamble
27+ for (int i = 0 ; i < 15 ; i++)
28+ {
29+ std::cout << " @" << sc_time_stamp () << " Inside fill_data(): i " << i << std::endl;
30+ data_to_send.range (i * 4 + 3 , i * 4 ) = " 1010" ;
31+ }
32+ data_to_send.range (63 , 60 ) = " 1011" ;
33+ data_valid_to_send = " 1111111111111111" ;
34+
35+ n2_data_valid = data_valid_to_send;
36+ n1_data_valid = n2_data_valid;
37+
38+ preamble_in_process = true ;
3339}
3440
35- void packetGenerator::generate_packet ()
41+ void packetGenerator::processing ()
3642{
37- sc_dt::sc_bv<N * 4 > tmp_data_in = data_in ;
38- sc_dt::sc_bv<N> tmp_data_valid = data_in_valid ;
43+ sc_dt::sc_bv<N * 4 > tmp_data_to_send = data_to_send ;
44+ sc_dt::sc_bv<N> tmp_data_valid_to_send = data_valid_to_send ;
3945
4046 bool manual_update = false ;
4147
48+ if ((tmp_data_valid_to_send.or_reduce () == 0 ) && (preamble_in_process == true ))
49+ {
50+ unsigned char length = 0 ;
51+ sc_dt::sc_bv<8 > local_length = 0 ;
52+
53+ preamble_in_process = false ;
54+ data_length_in_process = true ;
55+
56+ for (int i = 0 ; i < N; i++)
57+ {
58+ if (data_in_valid[i] == 1 )
59+ {
60+ length++;
61+ }
62+ }
63+ local_length = length / 2 ;
64+
65+ data_to_send = 0 ;
66+ data_to_send.range (7 , 0 ) = local_length;
67+ data_valid_to_send = " 11" ;
68+ tmp_data_to_send = data_to_send;
69+ tmp_data_valid_to_send = data_valid_to_send;
70+
71+ n2_data_valid = data_valid_to_send;
72+ n1_data_valid = n2_data_valid;
73+ }
74+ else if ((tmp_data_valid_to_send.or_reduce () == 0 ) && (data_length_in_process == true ))
75+ {
76+ data_length_in_process = false ;
77+
78+ data_to_send = data_in;
79+ data_valid_to_send = data_in_valid;
80+ tmp_data_to_send = data_to_send;
81+ tmp_data_valid_to_send = data_valid_to_send;
82+
83+ n2_data_valid = data_valid_to_send;
84+ n1_data_valid = n2_data_valid;
85+ }
86+
4287 n1_data_out = n2_data_out;
4388 n1_data_out_valid = n2_data_out_valid;
44- n1_data_in_valid = n2_data_in_valid ;
89+ n1_data_valid = n2_data_valid ;
4590
46- if (tmp_data_valid .or_reduce ())
91+ if (tmp_data_valid_to_send .or_reduce ())
4792 {
4893 for (int i = 0 ; i < N; i++)
4994 {
50- if (tmp_data_valid [i] == 1 )
95+ if (tmp_data_valid_to_send [i] == 1 )
5196 {
5297 if ((bitCount == 0 ) && (tmp_data_out_valid == false ) && (n1_data_out_valid == false ))
5398 {
54- tmp_data_valid [i] = 0 ;
55- n2_data_out = tmp_data_in .range (i * 4 + 3 , i * 4 );
99+ tmp_data_valid_to_send [i] = 0 ;
100+ n2_data_out = tmp_data_to_send .range (i * 4 + 3 , i * 4 );
56101 n2_data_out_valid = true ;
57- n2_data_in_valid = tmp_data_valid ;
102+ n2_data_valid = tmp_data_valid_to_send ;
58103 std::cout << " @" << sc_time_stamp () << " Inside generate_packet(): data to sent " << n2_data_out << std::endl;
59104 break ;
60105 }
61106 else if ((bitCount == 0 ) && (tmp_data_out_valid == true ))
62107 {
63- tmp_data_valid [i] = 0 ;
64- data_out.write (tmp_data_in .range (i * 4 + 3 , i * 4 ));
108+ tmp_data_valid_to_send [i] = 0 ;
109+ data_out.write (tmp_data_to_send .range (i * 4 + 3 , i * 4 ));
65110 data_out_valid.write (1 );
66111 tmp_data_out_valid = true ;
67- data_in_valid = tmp_data_valid ;
68- n2_data_out = tmp_data_in .range (i * 4 + 3 , i * 4 );
112+ data_valid_to_send_ = tmp_data_valid_to_send ;
113+ n2_data_out = tmp_data_to_send .range (i * 4 + 3 , i * 4 );
69114 n2_data_out_valid = true ;
70- n2_data_in_valid = tmp_data_valid ;
115+ n2_data_valid = tmp_data_valid_to_send ;
71116 n1_data_out = n2_data_out;
72117 n1_data_out_valid = n2_data_out_valid;
73- n1_data_in_valid = n2_data_in_valid ;
118+ n1_data_valid = n2_data_valid ;
74119 manual_update = true ;
75120 std::cout << " @" << sc_time_stamp () << " Inside generate_packet(): data to sent " << n2_data_out << std::endl;
76121 break ;
@@ -104,7 +149,7 @@ void packetGenerator::generate_packet()
104149
105150 if (!manual_update)
106151 {
107- data_in_valid = n1_data_in_valid ;
152+ data_valid_to_send = n1_data_valid ;
108153 data_out.write (n1_data_out);
109154 }
110155
@@ -118,12 +163,15 @@ void packetGenerator::generate_packet()
118163
119164 n2_data_out_valid_.write (n2_data_out_valid);
120165 n2_data_out_.write (n2_data_out);
121- n2_data_in_valid_ .write (n2_data_in_valid );
166+ n2_data_valid_ .write (n2_data_valid );
122167
123168 n1_data_out_valid_.write (n1_data_out_valid);
124169 n1_data_out_.write (n1_data_out);
125- n1_data_in_valid_ .write (n1_data_in_valid );
170+ n1_data_valid_ .write (n1_data_valid );
126171
127172 data_in_.write (data_in);
128173 data_in_valid_.write (data_in_valid);
174+
175+ data_to_send_.write (data_to_send);
176+ data_valid_to_send_.write (data_valid_to_send);
129177}
0 commit comments