1
0
mirror of https://github.com/corundum/corundum.git synced 2025-01-30 08:32:52 +08:00

merged changes in eth

This commit is contained in:
Alex Forencich 2022-02-03 00:57:55 -08:00
commit 440e6a06a2
10 changed files with 34 additions and 31 deletions

View File

@ -207,14 +207,15 @@ always @* begin
if (send_eth_payload_reg) begin if (send_eth_payload_reg) begin
s_eth_payload_axis_tready_next = m_axis_tready_int_early && shift_eth_payload_axis_input_tready; s_eth_payload_axis_tready_next = m_axis_tready_int_early && shift_eth_payload_axis_input_tready;
m_axis_tdata_int = shift_eth_payload_axis_tdata;
m_axis_tkeep_int = shift_eth_payload_axis_tkeep;
m_axis_tlast_int = shift_eth_payload_axis_tlast;
m_axis_tuser_int = shift_eth_payload_axis_tuser;
if ((s_eth_payload_axis_tready && s_eth_payload_axis_tvalid) || (m_axis_tready_int_reg && shift_eth_payload_axis_extra_cycle_reg)) begin if ((s_eth_payload_axis_tready && s_eth_payload_axis_tvalid) || (m_axis_tready_int_reg && shift_eth_payload_axis_extra_cycle_reg)) begin
transfer_in_save = 1'b1; transfer_in_save = 1'b1;
m_axis_tdata_int = shift_eth_payload_axis_tdata;
m_axis_tkeep_int = shift_eth_payload_axis_tkeep;
m_axis_tvalid_int = 1'b1; m_axis_tvalid_int = 1'b1;
m_axis_tlast_int = shift_eth_payload_axis_tlast;
m_axis_tuser_int = shift_eth_payload_axis_tuser;
if (shift_eth_payload_axis_tlast) begin if (shift_eth_payload_axis_tlast) begin
flush_save = 1'b1; flush_save = 1'b1;

View File

@ -361,13 +361,13 @@ always @* begin
s_eth_payload_axis_tready_next = m_ip_payload_axis_tready_int_early; s_eth_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
m_ip_payload_axis_tdata_int = s_eth_payload_axis_tdata; m_ip_payload_axis_tdata_int = s_eth_payload_axis_tdata;
m_ip_payload_axis_tvalid_int = s_eth_payload_axis_tvalid;
m_ip_payload_axis_tlast_int = s_eth_payload_axis_tlast; m_ip_payload_axis_tlast_int = s_eth_payload_axis_tlast;
m_ip_payload_axis_tuser_int = s_eth_payload_axis_tuser; m_ip_payload_axis_tuser_int = s_eth_payload_axis_tuser;
if (s_eth_payload_axis_tready && s_eth_payload_axis_tvalid) begin if (s_eth_payload_axis_tready && s_eth_payload_axis_tvalid) begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 16'd1; word_count_next = word_count_reg - 16'd1;
m_ip_payload_axis_tvalid_int = 1'b1;
if (s_eth_payload_axis_tlast) begin if (s_eth_payload_axis_tlast) begin
if (word_count_reg > 16'd1) begin if (word_count_reg > 16'd1) begin
// end of frame, but length does not match // end of frame, but length does not match
@ -395,7 +395,6 @@ always @* begin
s_eth_payload_axis_tready_next = m_ip_payload_axis_tready_int_early; s_eth_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
m_ip_payload_axis_tdata_int = last_word_data_reg; m_ip_payload_axis_tdata_int = last_word_data_reg;
m_ip_payload_axis_tvalid_int = s_eth_payload_axis_tvalid && s_eth_payload_axis_tlast;
m_ip_payload_axis_tlast_int = s_eth_payload_axis_tlast; m_ip_payload_axis_tlast_int = s_eth_payload_axis_tlast;
m_ip_payload_axis_tuser_int = s_eth_payload_axis_tuser; m_ip_payload_axis_tuser_int = s_eth_payload_axis_tuser;
@ -403,6 +402,7 @@ always @* begin
if (s_eth_payload_axis_tlast) begin if (s_eth_payload_axis_tlast) begin
s_eth_hdr_ready_next = !m_ip_hdr_valid_next; s_eth_hdr_ready_next = !m_ip_hdr_valid_next;
s_eth_payload_axis_tready_next = 1'b0; s_eth_payload_axis_tready_next = 1'b0;
m_ip_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_READ_PAYLOAD_LAST; state_next = STATE_READ_PAYLOAD_LAST;

View File

@ -388,7 +388,6 @@ always @* begin
m_ip_payload_axis_tdata_int = shift_eth_payload_axis_tdata; m_ip_payload_axis_tdata_int = shift_eth_payload_axis_tdata;
m_ip_payload_axis_tkeep_int = shift_eth_payload_axis_tkeep; m_ip_payload_axis_tkeep_int = shift_eth_payload_axis_tkeep;
m_ip_payload_axis_tvalid_int = shift_eth_payload_axis_tvalid;
m_ip_payload_axis_tlast_int = shift_eth_payload_axis_tlast; m_ip_payload_axis_tlast_int = shift_eth_payload_axis_tlast;
m_ip_payload_axis_tuser_int = shift_eth_payload_axis_tuser; m_ip_payload_axis_tuser_int = shift_eth_payload_axis_tuser;
@ -398,6 +397,7 @@ always @* begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 16'd8; word_count_next = word_count_reg - 16'd8;
transfer_in_save = 1'b1; transfer_in_save = 1'b1;
m_ip_payload_axis_tvalid_int = 1'b1;
if (word_count_reg <= 8) begin if (word_count_reg <= 8) begin
// have entire payload // have entire payload
m_ip_payload_axis_tkeep_int = shift_eth_payload_axis_tkeep & count2keep(word_count_reg); m_ip_payload_axis_tkeep_int = shift_eth_payload_axis_tkeep & count2keep(word_count_reg);
@ -462,7 +462,6 @@ always @* begin
m_ip_payload_axis_tdata_int = last_word_data_reg; m_ip_payload_axis_tdata_int = last_word_data_reg;
m_ip_payload_axis_tkeep_int = last_word_keep_reg; m_ip_payload_axis_tkeep_int = last_word_keep_reg;
m_ip_payload_axis_tvalid_int = shift_eth_payload_axis_tvalid && shift_eth_payload_axis_tlast;
m_ip_payload_axis_tlast_int = shift_eth_payload_axis_tlast; m_ip_payload_axis_tlast_int = shift_eth_payload_axis_tlast;
m_ip_payload_axis_tuser_int = shift_eth_payload_axis_tuser; m_ip_payload_axis_tuser_int = shift_eth_payload_axis_tuser;
@ -472,6 +471,7 @@ always @* begin
s_eth_payload_axis_tready_next = 1'b0; s_eth_payload_axis_tready_next = 1'b0;
flush_save = 1'b1; flush_save = 1'b1;
s_eth_hdr_ready_next = !m_ip_hdr_valid_next; s_eth_hdr_ready_next = !m_ip_hdr_valid_next;
m_ip_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_READ_PAYLOAD_LAST; state_next = STATE_READ_PAYLOAD_LAST;

View File

@ -298,13 +298,13 @@ always @* begin
s_ip_payload_axis_tready_next = m_eth_payload_axis_tready_int_early; s_ip_payload_axis_tready_next = m_eth_payload_axis_tready_int_early;
m_eth_payload_axis_tdata_int = s_ip_payload_axis_tdata; m_eth_payload_axis_tdata_int = s_ip_payload_axis_tdata;
m_eth_payload_axis_tvalid_int = s_ip_payload_axis_tvalid;
m_eth_payload_axis_tlast_int = s_ip_payload_axis_tlast; m_eth_payload_axis_tlast_int = s_ip_payload_axis_tlast;
m_eth_payload_axis_tuser_int = s_ip_payload_axis_tuser; m_eth_payload_axis_tuser_int = s_ip_payload_axis_tuser;
if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 6'd1; word_count_next = word_count_reg - 6'd1;
m_eth_payload_axis_tvalid_int = 1'b1;
if (s_ip_payload_axis_tlast) begin if (s_ip_payload_axis_tlast) begin
if (word_count_reg != 16'd1) begin if (word_count_reg != 16'd1) begin
// end of frame, but length does not match // end of frame, but length does not match
@ -332,7 +332,6 @@ always @* begin
s_ip_payload_axis_tready_next = m_eth_payload_axis_tready_int_early; s_ip_payload_axis_tready_next = m_eth_payload_axis_tready_int_early;
m_eth_payload_axis_tdata_int = last_word_data_reg; m_eth_payload_axis_tdata_int = last_word_data_reg;
m_eth_payload_axis_tvalid_int = s_ip_payload_axis_tvalid && s_ip_payload_axis_tlast;
m_eth_payload_axis_tlast_int = s_ip_payload_axis_tlast; m_eth_payload_axis_tlast_int = s_ip_payload_axis_tlast;
m_eth_payload_axis_tuser_int = s_ip_payload_axis_tuser; m_eth_payload_axis_tuser_int = s_ip_payload_axis_tuser;
@ -340,6 +339,7 @@ always @* begin
if (s_ip_payload_axis_tlast) begin if (s_ip_payload_axis_tlast) begin
s_ip_hdr_ready_next = !m_eth_hdr_valid_next; s_ip_hdr_ready_next = !m_eth_hdr_valid_next;
s_ip_payload_axis_tready_next = 1'b0; s_ip_payload_axis_tready_next = 1'b0;
m_eth_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_WRITE_PAYLOAD_LAST; state_next = STATE_WRITE_PAYLOAD_LAST;

View File

@ -408,7 +408,6 @@ always @* begin
m_eth_payload_axis_tdata_int = shift_ip_payload_axis_tdata; m_eth_payload_axis_tdata_int = shift_ip_payload_axis_tdata;
m_eth_payload_axis_tkeep_int = shift_ip_payload_axis_tkeep; m_eth_payload_axis_tkeep_int = shift_ip_payload_axis_tkeep;
m_eth_payload_axis_tvalid_int = shift_ip_payload_axis_tvalid;
m_eth_payload_axis_tlast_int = shift_ip_payload_axis_tlast; m_eth_payload_axis_tlast_int = shift_ip_payload_axis_tlast;
m_eth_payload_axis_tuser_int = shift_ip_payload_axis_tuser; m_eth_payload_axis_tuser_int = shift_ip_payload_axis_tuser;
@ -418,6 +417,7 @@ always @* begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 16'd8; word_count_next = word_count_reg - 16'd8;
transfer_in_save = 1'b1; transfer_in_save = 1'b1;
m_eth_payload_axis_tvalid_int = 1'b1;
if (word_count_reg <= 8) begin if (word_count_reg <= 8) begin
// have entire payload // have entire payload
m_eth_payload_axis_tkeep_int = count2keep(word_count_reg); m_eth_payload_axis_tkeep_int = count2keep(word_count_reg);
@ -458,7 +458,6 @@ always @* begin
m_eth_payload_axis_tdata_int = last_word_data_reg; m_eth_payload_axis_tdata_int = last_word_data_reg;
m_eth_payload_axis_tkeep_int = last_word_keep_reg; m_eth_payload_axis_tkeep_int = last_word_keep_reg;
m_eth_payload_axis_tvalid_int = shift_ip_payload_axis_tvalid && shift_ip_payload_axis_tlast;
m_eth_payload_axis_tlast_int = shift_ip_payload_axis_tlast; m_eth_payload_axis_tlast_int = shift_ip_payload_axis_tlast;
m_eth_payload_axis_tuser_int = shift_ip_payload_axis_tuser; m_eth_payload_axis_tuser_int = shift_ip_payload_axis_tuser;
@ -467,6 +466,7 @@ always @* begin
if (shift_ip_payload_axis_tlast) begin if (shift_ip_payload_axis_tlast) begin
s_ip_hdr_ready_next = !m_eth_hdr_valid_next; s_ip_hdr_ready_next = !m_eth_hdr_valid_next;
s_ip_payload_axis_tready_next = 1'b0; s_ip_payload_axis_tready_next = 1'b0;
m_eth_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_WRITE_PAYLOAD_LAST; state_next = STATE_WRITE_PAYLOAD_LAST;

View File

@ -320,13 +320,13 @@ always @* begin
s_ip_payload_axis_tready_next = m_udp_payload_axis_tready_int_early; s_ip_payload_axis_tready_next = m_udp_payload_axis_tready_int_early;
m_udp_payload_axis_tdata_int = s_ip_payload_axis_tdata; m_udp_payload_axis_tdata_int = s_ip_payload_axis_tdata;
m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid;
m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast; m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser; m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 16'd1; word_count_next = word_count_reg - 16'd1;
m_udp_payload_axis_tvalid_int = 1'b1;
if (s_ip_payload_axis_tlast) begin if (s_ip_payload_axis_tlast) begin
if (word_count_reg != 16'd1) begin if (word_count_reg != 16'd1) begin
// end of frame, but length does not match // end of frame, but length does not match
@ -354,7 +354,6 @@ always @* begin
s_ip_payload_axis_tready_next = m_udp_payload_axis_tready_int_early; s_ip_payload_axis_tready_next = m_udp_payload_axis_tready_int_early;
m_udp_payload_axis_tdata_int = last_word_data_reg; m_udp_payload_axis_tdata_int = last_word_data_reg;
m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid && s_ip_payload_axis_tlast;
m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast; m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser; m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
@ -362,6 +361,7 @@ always @* begin
if (s_ip_payload_axis_tlast) begin if (s_ip_payload_axis_tlast) begin
s_ip_hdr_ready_next = !m_udp_hdr_valid_next; s_ip_hdr_ready_next = !m_udp_hdr_valid_next;
s_ip_payload_axis_tready_next = 1'b0; s_ip_payload_axis_tready_next = 1'b0;
m_udp_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_READ_PAYLOAD_LAST; state_next = STATE_READ_PAYLOAD_LAST;

View File

@ -328,7 +328,6 @@ always @* begin
m_udp_payload_axis_tdata_int = s_ip_payload_axis_tdata; m_udp_payload_axis_tdata_int = s_ip_payload_axis_tdata;
m_udp_payload_axis_tkeep_int = s_ip_payload_axis_tkeep; m_udp_payload_axis_tkeep_int = s_ip_payload_axis_tkeep;
m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid;
m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast; m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser; m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
@ -337,6 +336,7 @@ always @* begin
if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 16'd8; word_count_next = word_count_reg - 16'd8;
m_udp_payload_axis_tvalid_int = 1'b1;
if (word_count_reg <= 8) begin if (word_count_reg <= 8) begin
// have entire payload // have entire payload
m_udp_payload_axis_tkeep_int = s_ip_payload_axis_tkeep & count2keep(word_count_reg); m_udp_payload_axis_tkeep_int = s_ip_payload_axis_tkeep & count2keep(word_count_reg);
@ -375,7 +375,6 @@ always @* begin
m_udp_payload_axis_tdata_int = last_word_data_reg; m_udp_payload_axis_tdata_int = last_word_data_reg;
m_udp_payload_axis_tkeep_int = last_word_keep_reg; m_udp_payload_axis_tkeep_int = last_word_keep_reg;
m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid && s_ip_payload_axis_tlast;
m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast; m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser; m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
@ -383,6 +382,7 @@ always @* begin
if (s_ip_payload_axis_tlast) begin if (s_ip_payload_axis_tlast) begin
s_ip_hdr_ready_next = !m_udp_hdr_valid_next; s_ip_hdr_ready_next = !m_udp_hdr_valid_next;
s_ip_payload_axis_tready_next = 1'b0; s_ip_payload_axis_tready_next = 1'b0;
m_udp_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_READ_PAYLOAD_LAST; state_next = STATE_READ_PAYLOAD_LAST;

View File

@ -289,13 +289,13 @@ always @* begin
s_udp_payload_axis_tready_next = m_ip_payload_axis_tready_int_early; s_udp_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
m_ip_payload_axis_tdata_int = s_udp_payload_axis_tdata; m_ip_payload_axis_tdata_int = s_udp_payload_axis_tdata;
m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid;
m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast; m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser; m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
if (s_udp_payload_axis_tready && s_udp_payload_axis_tvalid) begin if (s_udp_payload_axis_tready && s_udp_payload_axis_tvalid) begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 16'd1; word_count_next = word_count_reg - 16'd1;
m_ip_payload_axis_tvalid_int = 1'b1;
if (s_udp_payload_axis_tlast) begin if (s_udp_payload_axis_tlast) begin
if (word_count_reg != 16'd1) begin if (word_count_reg != 16'd1) begin
// end of frame, but length does not match // end of frame, but length does not match
@ -323,7 +323,6 @@ always @* begin
s_udp_payload_axis_tready_next = m_ip_payload_axis_tready_int_early; s_udp_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
m_ip_payload_axis_tdata_int = last_word_data_reg; m_ip_payload_axis_tdata_int = last_word_data_reg;
m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid && s_udp_payload_axis_tlast;
m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast; m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser; m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
@ -331,6 +330,7 @@ always @* begin
if (s_udp_payload_axis_tlast) begin if (s_udp_payload_axis_tlast) begin
s_udp_hdr_ready_next = !m_ip_hdr_valid_next; s_udp_hdr_ready_next = !m_ip_hdr_valid_next;
s_udp_payload_axis_tready_next = 1'b0; s_udp_payload_axis_tready_next = 1'b0;
m_ip_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_WRITE_PAYLOAD_LAST; state_next = STATE_WRITE_PAYLOAD_LAST;

View File

@ -325,7 +325,6 @@ always @* begin
m_ip_payload_axis_tdata_int = s_udp_payload_axis_tdata; m_ip_payload_axis_tdata_int = s_udp_payload_axis_tdata;
m_ip_payload_axis_tkeep_int = s_udp_payload_axis_tkeep; m_ip_payload_axis_tkeep_int = s_udp_payload_axis_tkeep;
m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid;
m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast; m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser; m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
@ -334,6 +333,7 @@ always @* begin
if (m_ip_payload_axis_tready_int_reg && s_udp_payload_axis_tvalid) begin if (m_ip_payload_axis_tready_int_reg && s_udp_payload_axis_tvalid) begin
// word transfer through // word transfer through
word_count_next = word_count_reg - 16'd8; word_count_next = word_count_reg - 16'd8;
m_ip_payload_axis_tvalid_int = 1'b1;
if (word_count_reg <= 8) begin if (word_count_reg <= 8) begin
// have entire payload // have entire payload
m_ip_payload_axis_tkeep_int = count2keep(word_count_reg); m_ip_payload_axis_tkeep_int = count2keep(word_count_reg);
@ -372,7 +372,6 @@ always @* begin
m_ip_payload_axis_tdata_int = last_word_data_reg; m_ip_payload_axis_tdata_int = last_word_data_reg;
m_ip_payload_axis_tkeep_int = last_word_keep_reg; m_ip_payload_axis_tkeep_int = last_word_keep_reg;
m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid && s_udp_payload_axis_tlast;
m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast; m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser; m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
@ -380,6 +379,7 @@ always @* begin
if (s_udp_payload_axis_tlast) begin if (s_udp_payload_axis_tlast) begin
s_udp_hdr_ready_next = !m_ip_hdr_valid_next; s_udp_hdr_ready_next = !m_ip_hdr_valid_next;
s_udp_payload_axis_tready_next = 1'b0; s_udp_payload_axis_tready_next = 1'b0;
m_ip_payload_axis_tvalid_int = 1'b1;
state_next = STATE_IDLE; state_next = STATE_IDLE;
end else begin end else begin
state_next = STATE_WRITE_PAYLOAD_LAST; state_next = STATE_WRITE_PAYLOAD_LAST;

View File

@ -1,23 +1,25 @@
# tox configuration # tox configuration
[tox] [tox]
envlist = py39 envlist = py3
skipsdist = True skipsdist = True
minversion = 3.2.0
requires = virtualenv >= 16.1
[gh-actions] [gh-actions]
python = python =
3.9: py39 3.9: py3
[testenv] [testenv]
deps = deps =
pytest pytest == 6.2.5
pytest-xdist pytest-xdist == 2.4.0
pytest-split pytest-split == 0.4.0
cocotb cocotb == 1.6.1
cocotb-test cocotb-test == 0.2.1
cocotbext-axi cocotbext-axi == 0.1.16
cocotbext-eth cocotbext-eth == 0.1.18
scapy scapy == 2.4.5
jinja2 jinja2 == 3.0.3
commands = commands =
pytest -n auto {posargs} pytest -n auto {posargs}