Skip to content
Snippets Groups Projects
Commit efeca55a authored by Byron Lathi's avatar Byron Lathi
Browse files

Send basic header

parent 3c5cabd2
No related branches found
No related tags found
1 merge request!74Resolve "Network Processor"
Pipeline #696 failed
......@@ -15,22 +15,89 @@ module tcp_packet_generator (
input wire [31:0] i_src_ip,
input wire [31:0] i_dst_ip,
output logic o_packet_done,
ip_intf.MASTER m_ip
);
logic [31:0] counter, counter_next;
enum logic [1:0] {IDLE, HEADER, DATA} state, state_next;
logic [15:0] checksum;
always_ff @(posedge i_clk) begin
if (i_rst) begin
counter <= '0;
state <= IDLE;
end else begin
counter <= counter_next;
state <= state_next;
end
end
always_comb begin
m_ip.ip_hdr_valid = '0;
o_packet_done = '0;
case (state)
IDLE: begin
if (i_hdr_valid) begin
m_ip.ip_hdr_valid = '1;
m_ip.ip_dscp = '0;
m_ip.ip_ecn = '0;
m_ip.ip_length = '0;
m_ip.ip_ttl = '1;
m_ip.ip_protocol = 8'h6;
m_ip.ip_source_ip = i_src_ip;
m_ip.ip_dest_ip = i_dst_ip;
if (m_ip.ip_hdr_ready) begin
state_next = HEADER;
end
end
end
HEADER: begin
m_ip.ip_payload_axis_tvalid = '1;
case (counter)
0: m_ip.ip_payload_axis_tdata = i_source_port[15:8];
1: m_ip.ip_payload_axis_tdata = i_source_port[7:0];
2: m_ip.ip_payload_axis_tdata = i_dest_port[15:8];
3: m_ip.ip_payload_axis_tdata = i_dest_port[7:0];
4: m_ip.ip_payload_axis_tdata = i_seq_number[31:24];
5: m_ip.ip_payload_axis_tdata = i_seq_number[23:16];
6: m_ip.ip_payload_axis_tdata = i_seq_number[15:8];
7: m_ip.ip_payload_axis_tdata = i_seq_number[7:0];
8: m_ip.ip_payload_axis_tdata = i_ack_number[31:24];
9: m_ip.ip_payload_axis_tdata = i_ack_number[23:16];
10: m_ip.ip_payload_axis_tdata = i_ack_number[15:8];
11: m_ip.ip_payload_axis_tdata = i_ack_number[7:0];
12: m_ip.ip_payload_axis_tdata = '0;
13: m_ip.ip_payload_axis_tdata = i_flags;
14: m_ip.ip_payload_axis_tdata = i_window_size[15:8];
15: m_ip.ip_payload_axis_tdata = i_window_size[7:0];
16: m_ip.ip_payload_axis_tdata = checksum[15:8];
17: m_ip.ip_payload_axis_tdata = checksum[7:0];
18: m_ip.ip_payload_axis_tdata = '0;
19: begin
m_ip.ip_payload_axis_tdata = '0;
m_ip.ip_payload_axis_tlast = '1;
end
endcase
if (m_ip.ip_payload_axis_tready) begin
counter_next <= counter + 1;
if (m_ip.ip_payload_axis_tlast) begin
state_next = IDLE;
o_packet_done = '1;
end
end
end
endcase
if (i_hdr_valid) begin
m_ip.ip_hdr_valid = '1;
m_ip.ip_dscp = '0;
m_ip.ip_ecn = '0;
m_ip.ip_length = '0;
m_ip.ip_ttl = '1;
m_ip.ip_protocol = 8'h6;
m_ip.ip_source_ip = i_src_ip;
m_ip.ip_dest_ip = i_dst_ip;
end
end
endmodule
\ No newline at end of file
......@@ -37,7 +37,7 @@ always_ff @(posedge i_clk) begin
if (i_rst) begin
tcp_state <= IDLE;
end else begin
if (i_enable) begin
if (~i_enable) begin
tcp_state <= IDLE;
end else begin
tcp_state <= tcp_state_next;
......@@ -48,6 +48,8 @@ end
always_comb begin
tcp_state_next = tcp_state;
o_tx_ctrl_valid = '0;
o_tx_ctrl = TX_CTRL_NOP;
o_tx_ctrl_valid = '0;
......
......@@ -45,6 +45,7 @@ logic [31:0] w_tx_ack_number;
logic [7:0] w_tx_flags;
logic [15:0] w_tx_window_size;
logic w_tx_hdr_valid;
logic w_tx_packet_done;
tcp_pkg::rx_msg_t rx_msg;
......@@ -163,7 +164,9 @@ tcp_tx_ctrl u_tcp_tx_ctrl (
.o_ack_number (w_tx_ack_number),
.o_flags (w_tx_flags),
.o_window_size (w_tx_window_size),
.o_hdr_valid (w_tx_hdr_valid)
.o_hdr_valid (w_tx_hdr_valid),
.i_packet_done (w_tx_packet_done)
);
// packet generator
......@@ -183,6 +186,8 @@ tcp_packet_generator u_tcp_packet_generator (
.i_src_ip (hwif_out.source_ip.d.value),
.i_dst_ip (hwif_out.dest_ip.d.value),
.o_packet_done (w_tx_packet_done),
.m_ip (m_ip_tx)
);
......
......@@ -12,7 +12,9 @@ module tcp_tx_ctrl(
output logic [31:0] o_ack_number,
output logic [7:0] o_flags,
output logic [15:0] o_window_size,
output logic o_hdr_valid
output logic o_hdr_valid,
input wire i_packet_done
);
localparam FLAG_FIN = (1 << 0);
......@@ -55,6 +57,10 @@ always_comb begin
SEND_SYN: begin
o_flags = FLAG_SYN;
o_hdr_valid = '1;
if (i_packet_done) begin
state_next = IDLE;
end
end
endcase
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment