Skip to content

Commit 6462ca3

Browse files
fa-jimenezErickOF
authored andcommitted
Connect encoder with packet generator and change the generator to include preamble of ethernet packets
1 parent 4c47020 commit 6462ca3

File tree

3 files changed

+114
-40
lines changed

3 files changed

+114
-40
lines changed

modules/ethernetAMS/include/packetGenerator.h

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,65 @@ SCA_TDF_MODULE(packetGenerator)
1010
n1_data_out_valid = false;
1111
n2_data_out_valid = false;
1212
n2_sigBitCount = 0;
13+
14+
preamble_in_process = false;
15+
data_length_in_process = false;
1316
}
1417

1518
#define N 16
1619

20+
// Main results from block
1721
sca_tdf::sca_out<bool> data_out_valid;
1822
sca_tdf::sca_out<sc_dt::sc_bv<4>> data_out;
1923

24+
// Signals for tracing the values
2025
sca_tdf::sca_out<bool> tmp_data_out_valid_;
2126

2227
sca_tdf::sca_out<bool> n1_data_out_valid_;
2328
sca_tdf::sca_out<sc_dt::sc_bv<4>> n1_data_out_;
24-
sca_tdf::sca_out<sc_dt::sc_bv<N>> n1_data_in_valid_;
29+
sca_tdf::sca_out<sc_dt::sc_bv<N>> n1_data_valid_;
2530

2631
sca_tdf::sca_out<bool> n2_data_out_valid_;
2732
sca_tdf::sca_out<sc_dt::sc_bv<4>> n2_data_out_;
28-
sca_tdf::sca_out<sc_dt::sc_bv<N>> n2_data_in_valid_;
33+
sca_tdf::sca_out<sc_dt::sc_bv<N>> n2_data_valid_;
2934

3035
sca_tdf::sca_out<sc_dt::sc_bv<N * 4>> data_in_;
3136
sca_tdf::sca_out<sc_dt::sc_bv<N>> data_in_valid_;
37+
38+
sca_tdf::sca_out<sc_dt::sc_bv<N * 4>> data_to_send_;
39+
sca_tdf::sca_out<sc_dt::sc_bv<N>> data_valid_to_send_;
40+
3241
sca_tdf::sca_out<sc_dt::sc_int<4>> n1_sigBitCount_;
3342
sca_tdf::sca_out<sc_dt::sc_int<4>> n2_sigBitCount_;
3443
sca_tdf::sca_out<sc_dt::sc_int<4>> sigBitCount;
3544

45+
// Internal values to do the logic
3646
bool tmp_data_out_valid;
3747

3848
bool n1_data_out_valid;
3949
sc_dt::sc_bv<4> n1_data_out;
40-
sc_dt::sc_bv<N> n1_data_in_valid;
50+
sc_dt::sc_bv<N> n1_data_valid;
4151
sc_dt::sc_int<4> n1_sigBitCount;
4252

4353
bool n2_data_out_valid;
4454
sc_dt::sc_bv<4> n2_data_out;
45-
sc_dt::sc_bv<N> n2_data_in_valid;
55+
sc_dt::sc_bv<N> n2_data_valid;
4656
sc_dt::sc_int<4> n2_sigBitCount;
4757

58+
bool preamble_in_process;
59+
bool data_length_in_process;
60+
61+
// Data to be sent, set in fill_data()
4862
sc_dt::sc_bv<N * 4> data_in;
4963
sc_dt::sc_bv<N> data_in_valid;
5064

65+
sc_dt::sc_bv<N * 4> data_to_send;
66+
sc_dt::sc_bv<N> data_valid_to_send;
67+
5168
int bitCount;
5269

5370
void fill_data(unsigned char* data, int data_length);
54-
void generate_packet();
71+
5572
void processing();
5673

57-
// Removed sc_in<bool> cclk;
5874
};

modules/ethernetAMS/src/packetGenerator.cpp

Lines changed: 75 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
#include <systemc.h>
33
#include "packetGenerator.h"
44

5-
65
void 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
}

modules/ethernetAMS/src/tb_ethernet_encoder.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@ int sc_main(int argc, char* argv[])
1515

1616
sca_tdf::sca_signal<bool> n2_data_out_valid;
1717
sca_tdf::sca_signal<sc_dt::sc_bv<4>> n2_data_out;
18-
sca_tdf::sca_signal<sc_dt::sc_bv<16>> n2_data_in_valid;
18+
sca_tdf::sca_signal<sc_dt::sc_bv<16>> n2_data_valid;
1919
sca_tdf::sca_signal<bool> n1_data_out_valid;
2020
sca_tdf::sca_signal<sc_dt::sc_bv<4>> n1_data_out;
21-
sca_tdf::sca_signal<sc_dt::sc_bv<16>> n1_data_in_valid;
21+
sca_tdf::sca_signal<sc_dt::sc_bv<16>> n1_data_valid;
2222

2323
sca_tdf::sca_signal<sc_dt::sc_bv<64>> data_in;
2424
sca_tdf::sca_signal<sc_dt::sc_bv<16>> data_in_valid;
25+
26+
sca_tdf::sca_signal<sc_dt::sc_bv<64>> data_to_send;
27+
sca_tdf::sca_signal<sc_dt::sc_bv<16>> data_valid_to_send;
28+
2529
sca_tdf::sca_signal<sc_dt::sc_int<4>> n1_sigBitCount;
2630
sca_tdf::sca_signal<sc_dt::sc_int<4>> n2_sigBitCount;
2731
sca_tdf::sca_signal<sc_dt::sc_int<4>> sigBitCount;
@@ -43,14 +47,18 @@ int sc_main(int argc, char* argv[])
4347

4448
pkt_gen.n2_data_out_valid_(n2_data_out_valid);
4549
pkt_gen.n2_data_out_(n2_data_out);
46-
pkt_gen.n2_data_in_valid_(n2_data_in_valid);
50+
pkt_gen.n2_data_valid_(n2_data_valid);
4751

4852
pkt_gen.n1_data_out_valid_(n1_data_out_valid);
4953
pkt_gen.n1_data_out_(n1_data_out);
50-
pkt_gen.n1_data_in_valid_(n1_data_in_valid);
54+
pkt_gen.n1_data_valid_(n1_data_valid);
5155

5256
pkt_gen.data_in_(data_in);
5357
pkt_gen.data_in_valid_(data_in_valid);
58+
59+
pkt_gen.data_to_send_(data_to_send);
60+
pkt_gen.data_valid_to_send_(data_valid_to_send);
61+
5462
pkt_gen.n1_sigBitCount_(n1_sigBitCount);
5563
pkt_gen.n2_sigBitCount_(n2_sigBitCount);
5664
pkt_gen.sigBitCount(sigBitCount);
@@ -65,16 +73,18 @@ int sc_main(int argc, char* argv[])
6573
sca_util::sca_trace(traceFile, data_out, "data_out");
6674
sca_util::sca_trace(traceFile, data_in, "pkt_gen_data_in");
6775
sca_util::sca_trace(traceFile, data_in_valid, "pkt_gen_data_in_valid");
68-
sca_util::sca_trace(traceFile, n2_data_in_valid, "pkt_gen_n2_data_in_valid");
76+
sca_util::sca_trace(traceFile, n2_data_valid, "pkt_gen_n2_data_valid");
6977
sca_util::sca_trace(traceFile, n2_data_out_valid, "pkt_gen_n2_data_out_valid");
7078
sca_util::sca_trace(traceFile, n2_data_out, "pkt_gen_n2_data_out");
71-
sca_util::sca_trace(traceFile, n1_data_in_valid, "pkt_gen_n1_data_in_valid");
79+
sca_util::sca_trace(traceFile, n1_data_valid, "pkt_gen_n1_data_valid");
7280
sca_util::sca_trace(traceFile, n1_data_out_valid, "pkt_gen_n1_data_out_valid");
7381
sca_util::sca_trace(traceFile, n1_data_out, "pkt_gen_n1_data_out");
7482
sca_util::sca_trace(traceFile, sigBitCount, "pkt_gen_sigBitCount");
7583
sca_util::sca_trace(traceFile, n1_sigBitCount, "pkt_gen_n1_sigBitCount");
7684
sca_util::sca_trace(traceFile, n2_sigBitCount, "pkt_gen_n2_sigBitCount");
7785
sca_util::sca_trace(traceFile, tmp_data_out_valid, "pkt_gen_tmp_data_out_valid");
86+
sca_util::sca_trace(traceFile, data_to_send, "pkt_gen_data_to_send");
87+
sca_util::sca_trace(traceFile, data_valid_to_send, "pkt_gen_data_valid_to_send");
7888
}
7989

8090
sc_start(45, SC_NS);
@@ -83,7 +93,7 @@ int sc_main(int argc, char* argv[])
8393
data[2] = 204;
8494
pkt_gen.fill_data(data, 3);
8595

86-
sc_start(455, SC_NS); // Run the simulation for 500 ns
96+
sc_start(1455, SC_NS); // Run the simulation for 500 ns
8797

8898
if (traceFile)
8999
{

0 commit comments

Comments
 (0)