Compare commits

...

2 commits

21 changed files with 113281 additions and 25402 deletions

View file

@ -39,5 +39,4 @@ FIFO5 -> U -> Upstream
![alt text](./drawings/router.png) ![alt text](./drawings/router.png)
# TODO: delete line where header is compared to 1 # TODO: delete line where header is compared to 1
# TODO: do throttle (many same data points) testw # TODO: do throttle (many same data points) testw
# TODO: run simulation again, observing router L5

View file

@ -14,6 +14,7 @@ port (
clk, arstN : in std_logic; clk, arstN : in std_logic;
rout_pos : in t_pos_addr; rout_pos : in t_pos_addr;
packets : in t_DATA(num_paths_up+num_paths_down*4-1 downto 0); packets : in t_DATA(num_paths_up+num_paths_down*4-1 downto 0);
valid_data : in std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0);
avai_paths : in std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0); avai_paths : in std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0);
arb_complete : out std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0); arb_complete : out std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0);
buff_wr_in : out t_FIFO_WR_INS(num_paths_up+num_paths_down*4-1 downto 0) buff_wr_in : out t_FIFO_WR_INS(num_paths_up+num_paths_down*4-1 downto 0)
@ -25,17 +26,16 @@ architecture impl of arbiter is
signal dirs : t_DATA_DIRS(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0')); signal dirs : t_DATA_DIRS(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0'));
signal ps_dirs : t_DATA_DIRS(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0')); signal ps_dirs : t_DATA_DIRS(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0'));
signal avai_pos_nxt : t_AVAI_POS(TOT_NUM_PATHS-1 downto 0);
signal avai_pos : t_AVAI_POS(TOT_NUM_PATHS-1 downto 0); signal avai_pos : t_AVAI_POS(TOT_NUM_PATHS-1 downto 0);
begin begin
get_rout_dir: process(rout_pos, packets) get_rout_dir: process(rout_pos, valid_data, packets)
variable pack_dest : t_pos_addr; variable pack_dest : t_pos_addr;
variable header : std_logic_vector(3 downto 0); --variable header : std_logic_vector(3 downto 0);
variable is_upstream : boolean; variable is_upstream : boolean;
begin begin
for i in 0 to packets'length-1 loop for i in 0 to packets'length-1 loop
header := packets(i)(63 downto 60); if valid_data(i) = '1' then
if header(0) = '1' then --header := packets(i)(63 downto 60);
pack_dest.chip_x := packets(i)(59 downto 55); pack_dest.chip_x := packets(i)(59 downto 55);
pack_dest.chip_y := packets(i)(54 downto 50); pack_dest.chip_y := packets(i)(54 downto 50);
pack_dest.core_x := packets(i)(49 downto 45); pack_dest.core_x := packets(i)(49 downto 45);
@ -64,31 +64,31 @@ begin
if i < num_paths_down then if i < num_paths_down then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(0); avai_index := avai_pos_sizes(0);
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(0) := avai_pos_sizes(0) + 1; avai_pos_sizes(0) := avai_pos_sizes(0) + 1;
end if; end if;
elsif i < num_paths_down*2 then elsif i < num_paths_down*2 then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(1) + num_paths_down; avai_index := avai_pos_sizes(1) + num_paths_down;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(1) := avai_pos_sizes(1) + 1; avai_pos_sizes(1) := avai_pos_sizes(1) + 1;
end if; end if;
elsif i < num_paths_down*3 then elsif i < num_paths_down*3 then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(2) + num_paths_down*2; avai_index := avai_pos_sizes(2) + num_paths_down*2;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(2) := avai_pos_sizes(2) + 1; avai_pos_sizes(2) := avai_pos_sizes(2) + 1;
end if; end if;
elsif i < num_paths_down*4 then elsif i < num_paths_down*4 then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(3) + num_paths_down*3; avai_index := avai_pos_sizes(3) + num_paths_down*3;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(3) := avai_pos_sizes(3) + 1; avai_pos_sizes(3) := avai_pos_sizes(3) + 1;
end if; end if;
else else
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(4) + num_paths_down*4; avai_index := avai_pos_sizes(4) + num_paths_down*4;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(4) := avai_pos_sizes(4) + 1; avai_pos_sizes(4) := avai_pos_sizes(4) + 1;
end if; end if;
end if; end if;
@ -195,13 +195,4 @@ begin
end loop; end loop;
end loop; end loop;
end process; end process;
update_regs: process(clk, arstN)
begin
if arstN = '0' then
avai_pos <= (others => 0);
elsif rising_edge(clk) then
avai_pos <= avai_pos_nxt;
end if;
end process;
end impl; end impl;

View file

@ -23,8 +23,8 @@ type T_FIFO is array (0 to DEPTH-1) of std_logic_vector(WIDTH-1 downto 0);
signal wr_ptr, rd_ptr : unsigned(F_PTR_SIZE-1 downto 0); signal wr_ptr, rd_ptr : unsigned(F_PTR_SIZE-1 downto 0);
signal wr_ptr_nxt, rd_ptr_nxt : unsigned(F_PTR_SIZE-1 downto 0); signal wr_ptr_nxt, rd_ptr_nxt : unsigned(F_PTR_SIZE-1 downto 0);
signal full_nxt, empty_nxt : std_logic;
signal data_out_nxt : std_logic_vector(WIDTH-1 downto 0); signal data_out_nxt : std_logic_vector(WIDTH-1 downto 0);
signal s_full, s_empty : std_logic;
signal fifo, fifo_nxt : T_FIFO; signal fifo, fifo_nxt : T_FIFO;
signal fifo_sel : std_logic_vector(DEPTH-1 downto 0); signal fifo_sel : std_logic_vector(DEPTH-1 downto 0);
@ -35,33 +35,29 @@ begin
wr_ptr <= (others => '0'); wr_ptr <= (others => '0');
rd_ptr <= (others => '0'); rd_ptr <= (others => '0');
fifo <= (others => (others => '0')); fifo <= (others => (others => '0'));
full <= '0';
empty <= '1';
data_out <= (others => '0'); data_out <= (others => '0');
elsif clk'event and clk='1' then elsif clk'event and clk='1' then
fifo <= fifo_nxt; fifo <= fifo_nxt;
wr_ptr <= wr_ptr_nxt; wr_ptr <= wr_ptr_nxt;
rd_ptr <= rd_ptr_nxt; rd_ptr <= rd_ptr_nxt;
full <= full_nxt;
empty <= empty_nxt;
data_out <= data_out_nxt; data_out <= data_out_nxt;
end if; end if;
end process; end process;
update_wr_ptr: process(wr_req, full_nxt, wr_ptr) update_wr_ptr: process(wr_req, s_full, wr_ptr)
begin begin
if wr_req = '1' and full_nxt = '0' then if wr_req = '1' and s_full = '0' then
wr_ptr_nxt <= wr_ptr + 1; wr_ptr_nxt <= wr_ptr + 1;
else else
wr_ptr_nxt <= wr_ptr; wr_ptr_nxt <= wr_ptr;
end if; end if;
end process; end process;
select_fifo_for_writing: process(wr_req, wr_ptr) select_fifo_for_writing: process(wr_req, s_full, wr_ptr)
variable one : unsigned(DEPTH-1 downto 0); variable one : unsigned(DEPTH-1 downto 0);
begin begin
fifo_sel <= (others => '0'); fifo_sel <= (others => '0');
if wr_req = '1' then if wr_req = '1' and s_full = '0' then
one := to_unsigned(1, DEPTH); one := to_unsigned(1, DEPTH);
fifo_sel <= std_logic_vector(shift_left(one, to_integer(wr_ptr(F_PTR_SIZE-2 downto 0)))); fifo_sel <= std_logic_vector(shift_left(one, to_integer(wr_ptr(F_PTR_SIZE-2 downto 0))));
end if; end if;
@ -78,9 +74,9 @@ begin
end loop; end loop;
end process write; end process write;
update_rd_ptr: process(rd_req, empty_nxt, rd_ptr) update_rd_ptr: process(rd_req, s_empty, rd_ptr)
begin begin
if rd_req = '1' and empty_nxt = '0' then if rd_req = '1' and s_empty = '0' then
rd_ptr_nxt <= rd_ptr + 1; rd_ptr_nxt <= rd_ptr + 1;
else else
rd_ptr_nxt <= rd_ptr; rd_ptr_nxt <= rd_ptr;
@ -96,18 +92,21 @@ begin
begin begin
if rd_ptr(F_PTR_SIZE-2 downto 0) = wr_ptr(F_PTR_SIZE-2 downto 0) and if rd_ptr(F_PTR_SIZE-2 downto 0) = wr_ptr(F_PTR_SIZE-2 downto 0) and
rd_ptr(F_PTR_SIZE-1) /= wr_ptr(F_PTR_SIZE-1) then rd_ptr(F_PTR_SIZE-1) /= wr_ptr(F_PTR_SIZE-1) then
full_nxt <= '1'; s_full <= '1';
else else
full_nxt <= '0'; s_full <= '0';
end if; end if;
end process; end process;
determine_empty_flag: process(rd_ptr, wr_ptr) determine_empty_flag: process(rd_ptr, wr_ptr)
begin begin
if rd_ptr = wr_ptr then if rd_ptr = wr_ptr then
empty_nxt <= '1'; s_empty <= '1';
else else
empty_nxt <= '0'; s_empty <= '0';
end if; end if;
end process; end process;
full <= s_full;
empty <= s_empty;
end impl; end impl;

View file

@ -14,6 +14,7 @@ port (
clk, arstN : in std_logic; clk, arstN : in std_logic;
rout_pos : in t_pos_addr; rout_pos : in t_pos_addr;
packets : in t_DATA(num_paths_up*4+num_paths_down*4-1 downto 0); packets : in t_DATA(num_paths_up*4+num_paths_down*4-1 downto 0);
valid_data : in std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0);
avai_paths : in std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0); avai_paths : in std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0);
arb_complete : out std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0); arb_complete : out std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0);
buff_wr_in : out t_FIFO_WR_INS(num_paths_up*4+num_paths_down*4-1 downto 0) buff_wr_in : out t_FIFO_WR_INS(num_paths_up*4+num_paths_down*4-1 downto 0)
@ -25,16 +26,15 @@ architecture impl of parent_arbiter is
signal dirs : t_DATA_DIRS_EXT(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0')); signal dirs : t_DATA_DIRS_EXT(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0'));
signal ps_dirs : t_DATA_DIRS_EXT(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0')); signal ps_dirs : t_DATA_DIRS_EXT(TOT_NUM_PATHS-1 downto 0) := (others => (others => '0'));
signal avai_pos_nxt : t_EX_AVAI_POS(TOT_NUM_PATHS-1 downto 0);
signal avai_pos : t_EX_AVAI_POS(TOT_NUM_PATHS-1 downto 0); signal avai_pos : t_EX_AVAI_POS(TOT_NUM_PATHS-1 downto 0);
begin begin
L5_get_rout_dir: process(rout_pos, packets) L5_get_rout_dir: process(rout_pos, valid_data, packets)
variable pack_dest : t_pos_addr; variable pack_dest : t_pos_addr;
variable header : std_logic_vector(3 downto 0); --variable header : std_logic_vector(3 downto 0);
begin begin
for i in 0 to packets'length-1 loop for i in 0 to packets'length-1 loop
header := packets(i)(63 downto 60); if valid_data(i) = '1' then
if header(0) = '1' then --header := packets(i)(63 downto 60);
pack_dest.chip_x := packets(i)(59 downto 55); pack_dest.chip_x := packets(i)(59 downto 55);
pack_dest.chip_y := packets(i)(54 downto 50); pack_dest.chip_y := packets(i)(54 downto 50);
pack_dest.core_x := packets(i)(49 downto 45); pack_dest.core_x := packets(i)(49 downto 45);
@ -63,49 +63,49 @@ begin
if i < num_paths_down then if i < num_paths_down then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(0); avai_index := avai_pos_sizes(0);
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(0) := avai_pos_sizes(0) + 1; avai_pos_sizes(0) := avai_pos_sizes(0) + 1;
end if; end if;
elsif i < num_paths_down*2 then elsif i < num_paths_down*2 then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(1) + num_paths_down; avai_index := avai_pos_sizes(1) + num_paths_down;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(1) := avai_pos_sizes(1) + 1; avai_pos_sizes(1) := avai_pos_sizes(1) + 1;
end if; end if;
elsif i < num_paths_down*3 then elsif i < num_paths_down*3 then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(2) + num_paths_down*2; avai_index := avai_pos_sizes(2) + num_paths_down*2;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(2) := avai_pos_sizes(2) + 1; avai_pos_sizes(2) := avai_pos_sizes(2) + 1;
end if; end if;
elsif i < num_paths_down*4 then elsif i < num_paths_down*4 then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(3) + num_paths_down*3; avai_index := avai_pos_sizes(3) + num_paths_down*3;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(3) := avai_pos_sizes(3) + 1; avai_pos_sizes(3) := avai_pos_sizes(3) + 1;
end if; end if;
elsif i < num_paths_down*4 + num_paths_up then elsif i < num_paths_down*4 + num_paths_up then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(4) + num_paths_down*4; avai_index := avai_pos_sizes(4) + num_paths_down*4;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(4) := avai_pos_sizes(4) + 1; avai_pos_sizes(4) := avai_pos_sizes(4) + 1;
end if; end if;
elsif i < num_paths_down*4 + num_paths_up*2 then elsif i < num_paths_down*4 + num_paths_up*2 then
if avai_path = '1' then if avai_path = '1' then
avai_index := avai_pos_sizes(5)+num_paths_down*4+num_paths_up; avai_index := avai_pos_sizes(5)+num_paths_down*4+num_paths_up;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(5) := avai_pos_sizes(5) + 1; avai_pos_sizes(5) := avai_pos_sizes(5) + 1;
end if; end if;
elsif i < num_paths_down*4 + num_paths_up*3 then elsif i < num_paths_down*4 + num_paths_up*3 then
if avai_path = '1' then if avai_path = '1' then
avai_index:=avai_pos_sizes(6)+num_paths_down*4+num_paths_up*2; avai_index:=avai_pos_sizes(6)+num_paths_down*4+num_paths_up*2;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(6) := avai_pos_sizes(6) + 1; avai_pos_sizes(6) := avai_pos_sizes(6) + 1;
end if; end if;
else else
if avai_path = '1' then if avai_path = '1' then
avai_index:=avai_pos_sizes(7)+num_paths_down*4+num_paths_up*3; avai_index:=avai_pos_sizes(7)+num_paths_down*4+num_paths_up*3;
avai_pos_nxt(avai_index) <= i; avai_pos(avai_index) <= i;
avai_pos_sizes(7) := avai_pos_sizes(7) + 1; avai_pos_sizes(7) := avai_pos_sizes(7) + 1;
end if; end if;
end if; end if;
@ -218,13 +218,4 @@ begin
end loop; end loop;
end loop; end loop;
end process; end process;
update_regs: process(clk, arstN)
begin
if arstN = '0' then
avai_pos <= (others => 0);
elsif rising_edge(clk) then
avai_pos <= avai_pos_nxt;
end if;
end process;
end impl; end impl;

View file

@ -42,14 +42,19 @@ architecture impl of parent_router is
signal snd_buff_rd_in : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal snd_buff_rd_in : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal rcv_accept_ack : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal rcv_accept_ack : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal rd_data, rd_data_nxt : t_DATA(TOT_NUM_PATHS-1 downto 0); signal rd_data, rd_data_nxt : t_DATA(TOT_NUM_PATHS-1 downto 0);
signal valid_data_nxt : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal valid_data : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal req_flag : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal req_flag : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal rcv_data : t_DATA(TOT_NUM_PATHS-1 downto 0); signal rcv_data : t_DATA(TOT_NUM_PATHS-1 downto 0);
signal rd_reqs : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal rd_reqs : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal continue_send : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal continue_send : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal avai_paths : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal avai_paths : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal arb_complete : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal arb_complete : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal out_buff_rd_reqs : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal packet_states : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0); signal packet_states : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0);
signal packet_states_nxt : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0); signal packet_states_nxt : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0);
signal outb_rd_states : t_OUT_BUFF_RD_STATES(TOT_NUM_PATHS-1 downto 0);
signal outb_rd_states_nxt : t_OUT_BUFF_RD_STATES(TOT_NUM_PATHS-1 downto 0);
begin begin
g_IN_BUFF_GEN: for i in 0 to TOT_NUM_PATHS-1 generate g_IN_BUFF_GEN: for i in 0 to TOT_NUM_PATHS-1 generate
input_fifo: fifo input_fifo: fifo
@ -66,7 +71,7 @@ begin
generic map(WIDTH => buffer_width, DEPTH => buffer_depth, generic map(WIDTH => buffer_width, DEPTH => buffer_depth,
F_PTR_SIZE => fifo_ptr_size) F_PTR_SIZE => fifo_ptr_size)
port map(arstN => arstN, clk => clk, wr_req => snd_buff_wr_in(i).wr_req, port map(arstN => arstN, clk => clk, wr_req => snd_buff_wr_in(i).wr_req,
rd_req => snd_buff_rd_in(i), data_in => snd_buff_wr_in(i).data, rd_req => out_buff_rd_reqs(i), data_in => snd_buff_wr_in(i).data,
data_out => snd_buff_out(i).data, data_out => snd_buff_out(i).data,
full => snd_buff_out(i).full, empty => snd_buff_out(i).empty); full => snd_buff_out(i).full, empty => snd_buff_out(i).empty);
end generate; end generate;
@ -119,6 +124,7 @@ begin
arstN => arstN, arstN => arstN,
rout_pos => rout_pos, rout_pos => rout_pos,
packets => rd_data, packets => rd_data,
valid_data => valid_data,
avai_paths => avai_paths, avai_paths => avai_paths,
arb_complete => arb_complete, arb_complete => arb_complete,
buff_wr_in => snd_buff_wr_in buff_wr_in => snd_buff_wr_in
@ -135,7 +141,57 @@ begin
begin begin
for i in 0 to TOT_NUM_PATHS-1 loop for i in 0 to TOT_NUM_PATHS-1 loop
avai_paths(i) <= not snd_buff_out(i).full; avai_paths(i) <= not snd_buff_out(i).full;
continue_send(i) <= not snd_buff_out(i).empty; end loop;
end process;
read_out_buff_sm_next_logic: process(outb_rd_states, snd_buff_out, snd_buff_rd_in)
begin
for i in 0 to TOT_NUM_PATHS-1 loop
case outb_rd_states(i) is
when EmptyFifo =>
if snd_buff_out(i).empty = '0' then
outb_rd_states_nxt(i) <= StartRead;
else
outb_rd_states_nxt(i) <= EmptyFifo;
end if;
when StartRead =>
if snd_buff_out(i).empty = '1' then
outb_rd_states_nxt(i) <= EmptyFifo;
else
outb_rd_states_nxt(i) <= WaitForSender;
end if;
--when Sending =>
-- outb_rd_states_nxt(i) <= WaitForSender;
when WaitForSender =>
if snd_buff_rd_in(i) = '1' then
if snd_buff_out(i).empty = '1' then
outb_rd_states_nxt(i) <= EmptyFifo;
else
outb_rd_states_nxt(i) <= StartRead;
end if;
else
outb_rd_states_nxt(i) <= WaitForSender;
end if;
when others =>
outb_rd_states_nxt(i) <= EmptyFifo;
end case;
end loop;
end process;
read_out_buff_sm_out_gen: process(outb_rd_states)
begin
for i in 0 to TOT_NUM_PATHS-1 loop
case outb_rd_states(i) is
when StartRead =>
continue_send(i) <= '1';
out_buff_rd_reqs(i) <= '1';
--when Sending =>
-- continue_send(i) <= '1';
-- out_buff_rd_reqs(i) <= '0';
when others =>
continue_send(i) <= '0';
out_buff_rd_reqs(i) <= '0';
end case;
end loop; end loop;
end process; end process;
@ -165,7 +221,7 @@ begin
end loop; end loop;
end process; end process;
packet_sm_out_gen: process(packet_states, rcv_buff_out, arb_complete) packet_sm_out_gen: process(packet_states, rcv_buff_out, arb_complete, rd_data)
begin begin
for i in 0 to TOT_NUM_PATHS-1 loop for i in 0 to TOT_NUM_PATHS-1 loop
case packet_states(i) is case packet_states(i) is
@ -176,15 +232,19 @@ begin
rd_reqs(i) <= '0'; rd_reqs(i) <= '0';
end if; end if;
rd_data_nxt(i) <= (others => '0'); rd_data_nxt(i) <= (others => '0');
valid_data_nxt(i) <= '0';
when Arbitration => when Arbitration =>
rd_reqs(i) <= '0'; rd_reqs(i) <= '0';
rd_data_nxt(i) <= rcv_buff_out(i).data; -- first time read from buffer rd_data_nxt(i) <= rcv_buff_out(i).data; -- first time read from buffer
valid_data_nxt(i) <= '1';
when others => when others =>
rd_reqs(i) <= '0'; rd_reqs(i) <= '0';
if arb_complete(i) = '1' then if arb_complete(i) = '1' then
rd_data_nxt(i) <= (others => '0'); rd_data_nxt(i) <= (others => '0');
valid_data_nxt(i) <= '0';
else else
rd_data_nxt(i) <= rd_data(i); rd_data_nxt(i) <= rd_data(i);
valid_data_nxt(i) <= '1';
end if; end if;
end case; end case;
end loop; end loop;
@ -202,8 +262,10 @@ begin
packet_states <= (others => Idle); packet_states <= (others => Idle);
rd_data <= (others => (others => '0')); rd_data <= (others => (others => '0'));
elsif rising_edge(clk) then elsif rising_edge(clk) then
packet_states <= packet_states_nxt; packet_states <= packet_states_nxt;
rd_data <= rd_data_nxt; rd_data <= rd_data_nxt;
valid_data <= valid_data_nxt;
outb_rd_states <= outb_rd_states_nxt;
end if; end if;
end process; end process;
end impl; end impl;

View file

@ -40,14 +40,19 @@ architecture impl of router is
signal snd_buff_rd_in : std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0); signal snd_buff_rd_in : std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0);
signal rcv_accept_ack : std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0); signal rcv_accept_ack : std_logic_vector(num_paths_up+num_paths_down*4-1 downto 0);
signal rd_data, rd_data_nxt : t_DATA(TOT_NUM_PATHS-1 downto 0); signal rd_data, rd_data_nxt : t_DATA(TOT_NUM_PATHS-1 downto 0);
signal valid_data_nxt : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal valid_data : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal req_flag : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal req_flag : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal rcv_data : t_DATA(TOT_NUM_PATHS-1 downto 0); signal rcv_data : t_DATA(TOT_NUM_PATHS-1 downto 0);
signal rd_reqs : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal rd_reqs : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal continue_send : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal continue_send : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal avai_paths : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal avai_paths : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal arb_complete : std_logic_vector(TOT_NUM_PATHS-1 downto 0); signal arb_complete : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal out_buff_rd_reqs : std_logic_vector(TOT_NUM_PATHS-1 downto 0);
signal packet_states : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0); signal packet_states : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0);
signal packet_states_nxt : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0); signal packet_states_nxt : t_PACKET_STATES(TOT_NUM_PATHS-1 downto 0);
signal outb_rd_states : t_OUT_BUFF_RD_STATES(TOT_NUM_PATHS-1 downto 0);
signal outb_rd_states_nxt : t_OUT_BUFF_RD_STATES(TOT_NUM_PATHS-1 downto 0);
begin begin
g_IN_BUFF_GEN: for i in 0 to TOT_NUM_PATHS-1 generate g_IN_BUFF_GEN: for i in 0 to TOT_NUM_PATHS-1 generate
input_fifo: fifo input_fifo: fifo
@ -64,7 +69,7 @@ begin
generic map(WIDTH => buffer_width, DEPTH => buffer_depth, generic map(WIDTH => buffer_width, DEPTH => buffer_depth,
F_PTR_SIZE => fifo_ptr_size) F_PTR_SIZE => fifo_ptr_size)
port map(arstN => arstN, clk => clk, wr_req => snd_buff_wr_in(i).wr_req, port map(arstN => arstN, clk => clk, wr_req => snd_buff_wr_in(i).wr_req,
rd_req => snd_buff_rd_in(i), data_in => snd_buff_wr_in(i).data, rd_req => out_buff_rd_reqs(i), data_in => snd_buff_wr_in(i).data,
data_out => snd_buff_out(i).data, data_out => snd_buff_out(i).data,
full => snd_buff_out(i).full, empty => snd_buff_out(i).empty); full => snd_buff_out(i).full, empty => snd_buff_out(i).empty);
end generate; end generate;
@ -96,6 +101,7 @@ begin
arstN => arstN, arstN => arstN,
rout_pos => rout_pos, rout_pos => rout_pos,
packets => rd_data, packets => rd_data,
valid_data => valid_data,
avai_paths => avai_paths, avai_paths => avai_paths,
arb_complete => arb_complete, arb_complete => arb_complete,
buff_wr_in => snd_buff_wr_in buff_wr_in => snd_buff_wr_in
@ -112,7 +118,57 @@ begin
begin begin
for i in 0 to TOT_NUM_PATHS-1 loop for i in 0 to TOT_NUM_PATHS-1 loop
avai_paths(i) <= not snd_buff_out(i).full; avai_paths(i) <= not snd_buff_out(i).full;
continue_send(i) <= not snd_buff_out(i).empty; end loop;
end process;
read_out_buff_sm_next_logic: process(outb_rd_states, snd_buff_out, snd_buff_rd_in)
begin
for i in 0 to TOT_NUM_PATHS-1 loop
case outb_rd_states(i) is
when EmptyFifo =>
if snd_buff_out(i).empty = '0' then
outb_rd_states_nxt(i) <= StartRead;
else
outb_rd_states_nxt(i) <= EmptyFifo;
end if;
when StartRead =>
if snd_buff_out(i).empty = '1' then
outb_rd_states_nxt(i) <= EmptyFifo;
else
outb_rd_states_nxt(i) <= WaitForSender;
end if;
--when Sending =>
-- outb_rd_states_nxt(i) <= WaitForSender;
when WaitForSender =>
if snd_buff_rd_in(i) = '1' then
if snd_buff_out(i).empty = '1' then
outb_rd_states_nxt(i) <= EmptyFifo;
else
outb_rd_states_nxt(i) <= StartRead;
end if;
else
outb_rd_states_nxt(i) <= WaitForSender;
end if;
when others =>
outb_rd_states_nxt(i) <= EmptyFifo;
end case;
end loop;
end process;
read_out_buff_sm_out_gen: process(outb_rd_states)
begin
for i in 0 to TOT_NUM_PATHS-1 loop
case outb_rd_states(i) is
when StartRead =>
continue_send(i) <= '1';
out_buff_rd_reqs(i) <= '1';
--when Sending =>
-- continue_send(i) <= '1';
-- out_buff_rd_reqs(i) <= '0';
when others =>
continue_send(i) <= '0';
out_buff_rd_reqs(i) <= '0';
end case;
end loop; end loop;
end process; end process;
@ -152,16 +208,20 @@ begin
else else
rd_reqs(i) <= '0'; rd_reqs(i) <= '0';
end if; end if;
rd_data_nxt(i) <= (others => '0'); rd_data_nxt(i) <= (others => '0');
valid_data_nxt(i) <= '0';
when Arbitration => when Arbitration =>
rd_reqs(i) <= '0'; rd_reqs(i) <= '0';
rd_data_nxt(i) <= rcv_buff_out(i).data; -- first time read from buffer rd_data_nxt(i) <= rcv_buff_out(i).data; -- first time read from buffer
valid_data_nxt(i) <= '1';
when others => when others =>
rd_reqs(i) <= '0'; rd_reqs(i) <= '0';
if arb_complete(i) = '1' then if arb_complete(i) = '1' then
rd_data_nxt(i) <= (others => '0'); rd_data_nxt(i) <= (others => '0');
valid_data_nxt(i) <= '0';
else else
rd_data_nxt(i) <= rd_data(i); rd_data_nxt(i) <= rd_data(i);
valid_data_nxt(i) <= '1';
end if; end if;
end case; end case;
end loop; end loop;
@ -177,10 +237,13 @@ begin
rout_pos.copy_x <= (others => '-'); rout_pos.copy_x <= (others => '-');
rout_pos.copy_y <= (others => '-'); rout_pos.copy_y <= (others => '-');
packet_states <= (others => Idle); packet_states <= (others => Idle);
outb_rd_states <= (others => EmptyFifo);
rd_data <= (others => (others => '0')); rd_data <= (others => (others => '0'));
elsif rising_edge(clk) then elsif rising_edge(clk) then
packet_states <= packet_states_nxt; packet_states <= packet_states_nxt;
rd_data <= rd_data_nxt; rd_data <= rd_data_nxt;
valid_data <= valid_data_nxt;
outb_rd_states <= outb_rd_states_nxt;
end if; end if;
end process; end process;
end impl; end impl;

View file

@ -46,6 +46,8 @@ package router_components is
clk, arstN : in std_logic; clk, arstN : in std_logic;
rout_pos : in t_pos_addr; rout_pos : in t_pos_addr;
packets : in t_DATA(num_paths_up+num_paths_down*4-1 downto 0); packets : in t_DATA(num_paths_up+num_paths_down*4-1 downto 0);
valid_data : in std_logic_vector(
num_paths_up+num_paths_down*4-1 downto 0);
avai_paths : in std_logic_vector( avai_paths : in std_logic_vector(
num_paths_up+num_paths_down*4-1 downto 0); num_paths_up+num_paths_down*4-1 downto 0);
arb_complete : out std_logic_vector( arb_complete : out std_logic_vector(
@ -65,6 +67,7 @@ package router_components is
clk, arstN : in std_logic; clk, arstN : in std_logic;
rout_pos : in t_pos_addr; rout_pos : in t_pos_addr;
packets : in t_DATA(num_paths_up*4+num_paths_down*4-1 downto 0); packets : in t_DATA(num_paths_up*4+num_paths_down*4-1 downto 0);
valid_data : in std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0);
avai_paths : in std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0); avai_paths : in std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0);
arb_complete : out std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0); arb_complete : out std_logic_vector(num_paths_up*4+num_paths_down*4-1 downto 0);
buff_wr_in : out t_FIFO_WR_INS(num_paths_up*4+num_paths_down*4-1 downto 0) buff_wr_in : out t_FIFO_WR_INS(num_paths_up*4+num_paths_down*4-1 downto 0)

View file

@ -15,8 +15,10 @@ package router_types is
subtype WORD is std_logic_vector(63 downto 0); subtype WORD is std_logic_vector(63 downto 0);
subtype H_WORD is std_logic_vector(31 downto 0); subtype H_WORD is std_logic_vector(31 downto 0);
type t_PACKET_STATE is (Idle, Arbitration, InArbQueue); type t_PACKET_STATE is (Idle, Arbitration, InArbQueue, WritingFifo);
type t_PACKET_STATES is array (integer range <>) of t_PACKET_STATE; type t_PACKET_STATES is array (integer range <>) of t_PACKET_STATE;
type t_OUT_BUFF_RD_STATE is (EmptyFifo, StartRead, Sending, WaitForSender);
type t_OUT_BUFF_RD_STATES is array (integer range <>) of t_OUT_BUFF_RD_STATE;
type t_PATHS is array (integer range <>) of type t_PATHS is array (integer range <>) of
std_logic_vector(NUM_DIRS-1 downto 0); std_logic_vector(NUM_DIRS-1 downto 0);
type t_AVAI_POS is array(integer range <>) of type t_AVAI_POS is array(integer range <>) of

View file

@ -22,7 +22,7 @@ begin
when ack_edge = '1' else upd_req; when ack_edge = '1' else upd_req;
data_nxt_mux <= '1' when upd_req = '1' and continue_send = '1' else '0'; data_nxt_mux <= '1' when upd_req = '1' and continue_send = '1' else '0';
req_nxt <= not sgn_req when data_nxt_mux = '1' else sgn_req; req_nxt <= not sgn_req when data_nxt_mux = '1' else sgn_req;
rd_req <= data_nxt_mux; rd_req <= ack_edge; -- means that the data has been received
ack_edge <= ack2 xor ack3; ack_edge <= ack2 xor ack3;
data_nxt <= data_in when data_nxt_mux = '1' else sgn_data; data_nxt <= data_in when data_nxt_mux = '1' else sgn_data;
req <= sgn_req; req <= sgn_req;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,111 @@
# is external? | path | data # is external? | path | data
0 346 0001000000000010000011000100010001000000000000000000000000000001 # origin: (11100-00011) --> dest: (10000-01100,11000-11101) 0 946 0001000000000010010110010111000000000000000000000000000000000001 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 14 0001000000000011001011101010001001000000000000000000000000000001 # origin: (11100-11101) --> dest: (11001-01110,01101-00111) 0 872 0001000000000001000101000111011111000000000000000000000000000010 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 459 0001000000000001100110101111111111000000000000000000000000000001 # origin: (10100-00110) --> dest: (01100-11010,01011-00010,01110-10100,11001-00001,01110-00100,00111-10001) 0 997 0001000000000011101001001011111111000000000000000000000000000011 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 968 0001000000000001101110010000000000000000000000000000000000000001 # origin: (00101-00111) --> dest: (01101-11001) 0 812 0001000000000000100000110000000000000000000000000000000000000100 # origin: (01001-01101) --> dest: (00100-00011)
0 535 0001000000000011101011110000000000000000000000000000000000000001 # origin: (01110-11000) --> dest: (11101-01111) 0 293 0001000000000011100111110000000000000000000000000000000000000101 # origin: (11011-01100) --> dest: (11100-11111)
0 933 0001000000000001110010100000000000000000000000000000000000000001 # origin: (00011-01100) --> dest: (01110-01010) 0 322 0001000000000001110111000000000000000000000000000000000000000110 # origin: (11110-00111) --> dest: (01110-11100)
0 665 0001000000000010000000001111111111000000000000000000000000000001 # origin: (00101-11010) --> dest: (10000-00000,01000-11100,10000-11000,10110-10110,10001-11011,10010-00110) 0 253 0001000000000001110010001111111110000000000000000000000000000111 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 60 0001000000000000001000001111111111000000000000000000000000000001 # origin: (11001-11001) --> dest: (00001-00000,10111-00011,01110-01111,10000-11101) 0 442 0001000000000010101000100101101101000000000000000000000000001000 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 798 0001000000000010110110111011111111000000000000000000000000000001 # origin: (01100-01001) --> dest: (10110-11011,10001-11110,00011-00101,10101-01110) 0 222 0001000000000011001101000000000000000000000000000000000000001001 # origin: (10100-10001) --> dest: (11001-10100)
0 100 0001000000000011100101100000000000000000000000000000000000000001 # origin: (11011-10101) --> dest: (11100-10110) 0 779 0001000000000010010100001011111101000000000000000000000000001010 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000001011 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000001100 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000001101 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000001110 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000001111 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000010000 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000010001 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000010010 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000010011 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000010100 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000010101 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000010110 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000010111 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000011000 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000011001 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000011010 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000011011 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000011100 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000011101 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000011110 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000011111 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000100000 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000100001 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000100010 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000100011 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000100100 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000100101 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000100110 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000100111 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000101000 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000101001 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000101010 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000101011 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000101100 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000101101 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000101110 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000101111 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000110000 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000110001 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000110010 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000110011 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000110100 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000110101 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000110110 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000110111 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000111000 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000111001 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000111010 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000111011 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000111100 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000111101 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000111110 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000111111 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001000000 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001000001 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001000010 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001000011 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001000100 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001000101 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001000110 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000001000111 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000001001000 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000001001001 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001001010 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001001011 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001001100 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001001101 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001001110 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001001111 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001010000 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000001010001 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000001010010 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000001010011 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001010100 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001010101 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001010110 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001010111 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001011000 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001011001 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001011010 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000001011011 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000001011100 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000001011101 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001011110 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001011111 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001100000 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001100001 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001100010 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001100011 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001100100 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)

File diff suppressed because it is too large Load diff

View file

@ -49,8 +49,7 @@ architecture bench of noc_tb is
procedure log_test_result ( procedure log_test_result (
index : integer; index : integer;
istwert : WORD; istwert : WORD;
is_external : std_logic; is_external : std_logic
istpath : integer
) is ) is
variable rowOut : LINE; variable rowOut : LINE;
begin begin
@ -104,19 +103,30 @@ begin
variable is_external : std_logic_vector(0 downto 0); variable is_external : std_logic_vector(0 downto 0);
variable path : integer; variable path : integer;
variable data : std_logic_vector(63 downto 0); variable data : std_logic_vector(63 downto 0);
variable wait_for_pe : boolean;
variable wait_for_ec : boolean;
begin begin
arstN <= '0'; arstN <= '0';
data_chip_in <= (others => (others => '0')); data_chip_in <= (others => (others => '0'));
c_rcv_reqs <= (others => '0'); c_rcv_reqs <= (others => '0');
pe_data_in <= (others => (others => '0')); pe_data_in <= (others => (others => '0'));
pe_rcv_reqs <= (others => '0'); pe_rcv_reqs <= (others => '0');
wait_for_pe := false;
wait_for_ec := false;
wait until rising_edge(clk); wait until rising_edge(clk);
arstN <= '1'; arstN <= '1';
wait until rising_edge(clk); wait until rising_edge(clk);
while not(endfile(stimuli_file)) loop while not(endfile(stimuli_file)) loop
readline(stimuli_file, input_line); readline(stimuli_file, input_line);
if input_line.all'length = 0 then if input_line.all'length = 0 then
wait until rising_edge(clk); if wait_for_pe then
wait on pe_rcv_acks;
elsif wait_for_ec then
wait on c_rcv_ack;
end if;
wait_for_pe := false;
wait_for_ec := false;
--wait until rising_edge(clk);
next; next;
elsif input_line.all(1) = '#' then elsif input_line.all(1) = '#' then
next; next;
@ -139,11 +149,13 @@ begin
report "Invalid path index value in file (external)" severity error; report "Invalid path index value in file (external)" severity error;
data_chip_in(path) <= data; data_chip_in(path) <= data;
c_rcv_reqs(path) <= not c_rcv_reqs(path); c_rcv_reqs(path) <= not c_rcv_reqs(path);
wait_for_ec := true;
else else
assert path < 4**level-1 assert path < 4**level-1
report "Invalid path index value in file (ds)" severity error; report "Invalid path index value in file (ds)" severity error;
pe_data_in(path) <= data; pe_data_in(path) <= data;
pe_rcv_reqs(path) <= not pe_rcv_reqs(path); pe_rcv_reqs(path) <= not pe_rcv_reqs(path);
wait_for_pe := true;
end if; end if;
exit when endfile(stimuli_file); exit when endfile(stimuli_file);
end loop; end loop;
@ -154,15 +166,13 @@ begin
c_send_reqs_prev, pe_send_reqs_prev, c_send_reqs_prev, pe_send_reqs_prev,
data_chip_out, pe_data_out, pe_send_ack, c_send_ack) data_chip_out, pe_data_out, pe_send_ack, c_send_ack)
variable istwert : WORD; variable istwert : WORD;
variable istpath : integer;
begin begin
if c_send_reqs'event or c_send_reqs_prev'event then if c_send_reqs'event or c_send_reqs_prev'event then
for i in 0 to num_paths_ext*4-1 loop for i in 0 to num_paths_ext*4-1 loop
if (c_send_reqs(i) = '0' and c_send_reqs_prev(i) = '1') or if (c_send_reqs(i) = '0' and c_send_reqs_prev(i) = '1') or
(c_send_reqs(i) = '1' and c_send_reqs_prev(i) = '0') then (c_send_reqs(i) = '1' and c_send_reqs_prev(i) = '0') then
istwert := data_chip_out(i); istwert := data_chip_out(i);
istpath := i; log_test_result(i, istwert, '1');
log_test_result(i, istwert, '1', istpath);
c_send_ack_nxt(i) <= not c_send_ack(i); c_send_ack_nxt(i) <= not c_send_ack(i);
else else
c_send_ack_nxt(i) <= c_send_ack(i); c_send_ack_nxt(i) <= c_send_ack(i);
@ -179,8 +189,7 @@ begin
if (pe_send_reqs(i) = '0' and pe_send_reqs_prev(i) = '1') or if (pe_send_reqs(i) = '0' and pe_send_reqs_prev(i) = '1') or
(pe_send_reqs(i) = '1' and pe_send_reqs_prev(i) = '0') then (pe_send_reqs(i) = '1' and pe_send_reqs_prev(i) = '0') then
istwert := pe_data_out(i); istwert := pe_data_out(i);
istpath := i; log_test_result(i, istwert, '0');
log_test_result(i, istwert, '0', istpath);
pe_send_ack_nxt(i) <= not pe_send_ack(i); pe_send_ack_nxt(i) <= not pe_send_ack(i);
else else
pe_send_ack_nxt(i) <= pe_send_ack(i); pe_send_ack_nxt(i) <= pe_send_ack(i);

View file

@ -6,6 +6,7 @@ from utils import *
#recv_paths = [["00010","01110","11110","10011","10011","00000", #recv_paths = [["00010","01110","11110","10011","10011","00000",
# "01101","01001","11011","11011","10101","01100"]] # "01101","01001","11011","11011","10101","01100"]]
sender_paths, recv_paths = generate_random_send_recv_paths(10) sender_paths, recv_paths = generate_random_send_recv_paths(10)
repetitions = 10
test_name = "random_pe_to_pe_test" test_name = "random_pe_to_pe_test"
# constants # constants
@ -13,20 +14,22 @@ stimuli = "# is external? | path | data\n"
reference = "" reference = ""
data_packet = 1 data_packet = 1
for p, path in enumerate(sender_paths): for i in range(repetitions):
if len(path) == 2: for p, path in enumerate(sender_paths):
index_path = get_index_path(path[0], path[1]) if len(path) == 2:
stimuli += "0 " + str(index_path) + " " index_path = get_index_path(path[0], path[1])
if len(recv_paths[p]) == 1: stimuli += "0 " + str(index_path) + " "
data_packet, stimuli, reference = gen_ref_for_direct_msg( if len(recv_paths[p]) == 1:
path, recv_paths[p], data_packet, stimuli, reference) data_packet, stimuli, reference = gen_ref_for_direct_msg(
elif len(recv_paths[p]) == 2: path, recv_paths[p], data_packet, stimuli, reference)
data_packet, stimuli, reference = gen_ref_for_sing_dir_multicast( elif len(recv_paths[p]) == 2:
path, recv_paths[p], data_packet, stimuli, reference) data_packet, stimuli, reference = gen_ref_for_sing_dir_multicast(
else: path, recv_paths[p], data_packet, stimuli, reference)
data_packet, stimuli, reference = gen_ref_for_mult_dir_multicast( else:
path, recv_paths[p], data_packet, stimuli, reference) data_packet, stimuli, reference = gen_ref_for_mult_dir_multicast(
data_packet += 1 path, recv_paths[p], data_packet, stimuli, reference)
data_packet += 1
stimuli += "\n"
with open("stimuli.txt", "w") as f: with open("stimuli.txt", "w") as f:
f.write(stimuli) f.write(stimuli)

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,111 @@
# is external? | path | data # is external? | path | data
0 346 0001000000000010000011000100010001000000000000000000000000000001 # origin: (11100-00011) --> dest: (10000-01100,11000-11101) 0 946 0001000000000010010110010111000000000000000000000000000000000001 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 14 0001000000000011001011101010001001000000000000000000000000000001 # origin: (11100-11101) --> dest: (11001-01110,01101-00111) 0 872 0001000000000001000101000111011111000000000000000000000000000010 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 459 0001000000000001100110101111111111000000000000000000000000000001 # origin: (10100-00110) --> dest: (01100-11010,01011-00010,01110-10100,11001-00001,01110-00100,00111-10001) 0 997 0001000000000011101001001011111111000000000000000000000000000011 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 968 0001000000000001101110010000000000000000000000000000000000000001 # origin: (00101-00111) --> dest: (01101-11001) 0 812 0001000000000000100000110000000000000000000000000000000000000100 # origin: (01001-01101) --> dest: (00100-00011)
0 535 0001000000000011101011110000000000000000000000000000000000000001 # origin: (01110-11000) --> dest: (11101-01111) 0 293 0001000000000011100111110000000000000000000000000000000000000101 # origin: (11011-01100) --> dest: (11100-11111)
0 933 0001000000000001110010100000000000000000000000000000000000000001 # origin: (00011-01100) --> dest: (01110-01010) 0 322 0001000000000001110111000000000000000000000000000000000000000110 # origin: (11110-00111) --> dest: (01110-11100)
0 665 0001000000000010000000001111111111000000000000000000000000000001 # origin: (00101-11010) --> dest: (10000-00000,01000-11100,10000-11000,10110-10110,10001-11011,10010-00110) 0 253 0001000000000001110010001111111110000000000000000000000000000111 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 60 0001000000000000001000001111111111000000000000000000000000000001 # origin: (11001-11001) --> dest: (00001-00000,10111-00011,01110-01111,10000-11101) 0 442 0001000000000010101000100101101101000000000000000000000000001000 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 798 0001000000000010110110111011111111000000000000000000000000000001 # origin: (01100-01001) --> dest: (10110-11011,10001-11110,00011-00101,10101-01110) 0 222 0001000000000011001101000000000000000000000000000000000000001001 # origin: (10100-10001) --> dest: (11001-10100)
0 100 0001000000000011100101100000000000000000000000000000000000000001 # origin: (11011-10101) --> dest: (11100-10110) 0 779 0001000000000010010100001011111101000000000000000000000000001010 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000001011 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000001100 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000001101 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000001110 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000001111 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000010000 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000010001 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000010010 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000010011 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000010100 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000010101 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000010110 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000010111 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000011000 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000011001 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000011010 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000011011 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000011100 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000011101 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000011110 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000011111 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000100000 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000100001 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000100010 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000100011 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000100100 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000100101 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000100110 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000100111 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000101000 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000101001 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000101010 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000101011 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000101100 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000101101 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000101110 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000101111 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000110000 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000110001 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000110010 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000110011 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000110100 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000110101 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000000110110 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000000110111 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000000111000 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000000111001 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000000111010 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000000111011 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000000111100 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000000111101 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000000111110 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000000111111 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001000000 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001000001 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001000010 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001000011 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001000100 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001000101 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001000110 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000001000111 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000001001000 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000001001001 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001001010 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001001011 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001001100 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001001101 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001001110 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001001111 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001010000 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000001010001 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000001010010 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000001010011 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001010100 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001010101 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001010110 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001010111 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001011000 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001011001 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001011010 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)
0 946 0001000000000010010110010111000000000000000000000000000001011011 # origin: (00010-01011) --> dest: (10010-11001,11100-11001)
0 872 0001000000000001000101000111011111000000000000000000000001011100 # origin: (01001-00111) --> dest: (01000-10100,01110-10011,00100-01100)
0 997 0001000000000011101001001011111111000000000000000000000001011101 # origin: (00011-00100) --> dest: (11101-00100,01110-00001,11010-00100,11110-10011,01100-01011)
0 812 0001000000000000100000110000000000000000000000000000000001011110 # origin: (01001-01101) --> dest: (00100-00011)
0 293 0001000000000011100111110000000000000000000000000000000001011111 # origin: (11011-01100) --> dest: (11100-11111)
0 322 0001000000000001110111000000000000000000000000000000000001100000 # origin: (11110-00111) --> dest: (01110-11100)
0 253 0001000000000001110010001111111110000000000000000000000001100001 # origin: (10001-10000) --> dest: (01110-01000,01011-10110,10001-00110)
0 442 0001000000000010101000100101101101000000000000000000000001100010 # origin: (10000-01011) --> dest: (10101-00010,11110-01111)
0 222 0001000000000011001101000000000000000000000000000000000001100011 # origin: (10100-10001) --> dest: (11001-10100)
0 779 0001000000000010010100001011111101000000000000000000000001100100 # origin: (01100-01110) --> dest: (10010-10000,10010-00100,00100-01100,10101-01001,10011-01101)

View file

@ -147,7 +147,7 @@ def gen_ref_for_mult_dir_multicast(path, recv_path, data_packet, stimuli, refere
return data_packet, stimuli, reference return data_packet, stimuli, reference
def generate_random_send_recv_paths(num_msgs): def generate_random_send_recv_paths(num_msgs, repetitions = 1):
sender_paths = [] sender_paths = []
recv_paths = [] recv_paths = []
for i in range(num_msgs): for i in range(num_msgs):
@ -168,4 +168,5 @@ def generate_random_send_recv_paths(num_msgs):
recv_path.append(f'{np.random.randint(32):05b}') recv_path.append(f'{np.random.randint(32):05b}')
recv_path.append(f'{np.random.randint(32):05b}') recv_path.append(f'{np.random.randint(32):05b}')
recv_paths.append(recv_path) recv_paths.append(recv_path)
return sender_paths, recv_paths return sender_paths, recv_paths

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff