Compare commits
3 commits
d9fafc7437
...
3957306d86
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3957306d86 | ||
![]() |
a7e725ee99 | ||
![]() |
9d47e04a0c |
18 changed files with 25398 additions and 1051 deletions
|
@ -40,3 +40,4 @@ FIFO5 -> U -> Upstream
|
|||
|
||||
# TODO: delete line where header is compared to 1
|
||||
# TODO: do throttle (many same data points) testw
|
||||
# TODO: run simulation again, observing router L5
|
|
@ -50,28 +50,6 @@ begin
|
|||
end loop;
|
||||
end process;
|
||||
|
||||
-- g_L5_ROUT_DIR_PROC: if level = 5 generate
|
||||
-- L5_get_rout_dir: process(rout_pos, packets)
|
||||
-- variable pack_dest : t_pos_addr;
|
||||
-- variable header : std_logic_vector(3 downto 0);
|
||||
-- begin
|
||||
-- for i in 0 to packets'length-1 loop
|
||||
-- header := packets(i)(63 downto 60);
|
||||
-- if header(0) = '1' then
|
||||
-- pack_dest.chip_x := packets(i)(59 downto 55);
|
||||
-- pack_dest.chip_y := packets(i)(54 downto 50);
|
||||
-- pack_dest.core_x := packets(i)(49 downto 45);
|
||||
-- pack_dest.core_y := packets(i)(44 downto 40);
|
||||
-- pack_dest.copy_x := packets(i)(39 downto 35);
|
||||
-- pack_dest.copy_y := packets(i)(34 downto 30);
|
||||
-- dirs(i) <= L5_single_packet_rout_dir_det(level, pack_dest, rout_pos);
|
||||
-- else
|
||||
-- dirs(i) <= (others => '0');
|
||||
-- end if;
|
||||
-- end loop;
|
||||
-- end process;
|
||||
-- end generate;
|
||||
|
||||
rout_path_determination: process(packets, dirs, avai_paths)
|
||||
variable sum_dirs : integer;
|
||||
variable j : integer;
|
||||
|
@ -139,45 +117,55 @@ begin
|
|||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
end if;
|
||||
if avai_pos_sizes(j) > 0 then
|
||||
avai_pos_sizes(j) := avai_pos_sizes(j)-1;
|
||||
end if;
|
||||
-- 1 to 2 multicast
|
||||
elsif sum_dirs = 2 then
|
||||
if dirs(i)(2) = '1' and dirs(i)(4) = '1' then
|
||||
if avai_pos_sizes(2) <= 0 or avai_pos_sizes(4) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
end if;
|
||||
elsif dirs(i)(1) = '1' and dirs(i)(3) = '1' then
|
||||
if dirs(i)(1) = '1' and dirs(i)(3) = '1' then
|
||||
if avai_pos_sizes(1) <= 0 or avai_pos_sizes(3) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(1) := avai_pos_sizes(1)-1;
|
||||
avai_pos_sizes(3) := avai_pos_sizes(3)-1;
|
||||
end if;
|
||||
elsif dirs(i)(3) = '1' and dirs(i)(4) = '1' then
|
||||
if avai_pos_sizes(3) <= 0 or avai_pos_sizes(4) <= 0 then
|
||||
elsif dirs(i)(0) = '1' and dirs(i)(2) = '1' then
|
||||
if avai_pos_sizes(0) <= 0 or avai_pos_sizes(2) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(0) := avai_pos_sizes(0)-1;
|
||||
avai_pos_sizes(2) := avai_pos_sizes(2)-1;
|
||||
end if;
|
||||
elsif dirs(i)(2) = '1' and dirs(i)(3) = '1' then
|
||||
if avai_pos_sizes(2) <= 0 or avai_pos_sizes(3) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(2) := avai_pos_sizes(2)-1;
|
||||
avai_pos_sizes(3) := avai_pos_sizes(3)-1;
|
||||
end if;
|
||||
--elsif dirs(i)(1) = '1' and dirs(i)(2) = '1' then
|
||||
else
|
||||
if avai_pos_sizes(1) <= 0 or avai_pos_sizes(2) <= 0 then
|
||||
if avai_pos_sizes(0) <= 0 or avai_pos_sizes(1) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(0) := avai_pos_sizes(0)-1;
|
||||
avai_pos_sizes(1) := avai_pos_sizes(1)-1;
|
||||
end if;
|
||||
end if;
|
||||
-- 1 to 4 multicast
|
||||
elsif sum_dirs = 4 then
|
||||
if avai_pos_sizes(1) <= 0 or avai_pos_sizes(2) <= 0 or
|
||||
avai_pos_sizes(3) <= 0 or avai_pos_sizes(4) <= 0 then
|
||||
if avai_pos_sizes(0) <= 0 or avai_pos_sizes(1) <= 0 or
|
||||
avai_pos_sizes(2) <= 0 or avai_pos_sizes(3) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(0) := avai_pos_sizes(0)-1;
|
||||
avai_pos_sizes(1) := avai_pos_sizes(1)-1;
|
||||
avai_pos_sizes(2) := avai_pos_sizes(2)-1;
|
||||
avai_pos_sizes(3) := avai_pos_sizes(3)-1;
|
||||
end if;
|
||||
else
|
||||
ps_dirs(i) <= (others => '0');
|
||||
|
|
|
@ -63,7 +63,7 @@ begin
|
|||
fifo_sel <= (others => '0');
|
||||
if wr_req = '1' then
|
||||
one := to_unsigned(1, DEPTH);
|
||||
fifo_sel <= std_logic_vector(shift_left(one, to_integer(wr_ptr)));
|
||||
fifo_sel <= std_logic_vector(shift_left(one, to_integer(wr_ptr(F_PTR_SIZE-2 downto 0))));
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
|
|
@ -140,45 +140,55 @@ begin
|
|||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
end if;
|
||||
if avai_pos_sizes(j) > 0 then
|
||||
avai_pos_sizes(j) := avai_pos_sizes(j)-1;
|
||||
end if;
|
||||
-- 1 to 2 multicast
|
||||
elsif sum_dirs = 2 then
|
||||
if dirs(i)(2) = '1' and dirs(i)(4) = '1' then
|
||||
if avai_pos_sizes(2) <= 0 or avai_pos_sizes(4) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
end if;
|
||||
elsif dirs(i)(1) = '1' and dirs(i)(3) = '1' then
|
||||
if dirs(i)(1) = '1' and dirs(i)(3) = '1' then
|
||||
if avai_pos_sizes(1) <= 0 or avai_pos_sizes(3) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(1) := avai_pos_sizes(1)-1;
|
||||
avai_pos_sizes(3) := avai_pos_sizes(3)-1;
|
||||
end if;
|
||||
elsif dirs(i)(3) = '1' and dirs(i)(4) = '1' then
|
||||
if avai_pos_sizes(3) <= 0 or avai_pos_sizes(4) <= 0 then
|
||||
elsif dirs(i)(0) = '1' and dirs(i)(2) = '1' then
|
||||
if avai_pos_sizes(0) <= 0 or avai_pos_sizes(2) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(0) := avai_pos_sizes(0)-1;
|
||||
avai_pos_sizes(2) := avai_pos_sizes(2)-1;
|
||||
end if;
|
||||
elsif dirs(i)(2) = '1' and dirs(i)(3) = '1' then
|
||||
if avai_pos_sizes(2) <= 0 or avai_pos_sizes(3) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(2) := avai_pos_sizes(2)-1;
|
||||
avai_pos_sizes(3) := avai_pos_sizes(3)-1;
|
||||
end if;
|
||||
--elsif dirs(i)(1) = '1' and dirs(i)(2) = '1' then
|
||||
else
|
||||
if avai_pos_sizes(1) <= 0 or avai_pos_sizes(2) <= 0 then
|
||||
if avai_pos_sizes(0) <= 0 or avai_pos_sizes(1) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(0) := avai_pos_sizes(0)-1;
|
||||
avai_pos_sizes(1) := avai_pos_sizes(1)-1;
|
||||
end if;
|
||||
end if;
|
||||
-- 1 to 4 multicast
|
||||
elsif sum_dirs = 4 then
|
||||
if avai_pos_sizes(1) <= 0 or avai_pos_sizes(2) <= 0 or
|
||||
avai_pos_sizes(3) <= 0 or avai_pos_sizes(4) <= 0 then
|
||||
if avai_pos_sizes(0) <= 0 or avai_pos_sizes(1) <= 0 or
|
||||
avai_pos_sizes(2) <= 0 or avai_pos_sizes(3) <= 0 then
|
||||
ps_dirs(i) <= (others => '0');
|
||||
else
|
||||
ps_dirs(i) <= dirs(i);
|
||||
avai_pos_sizes(0) := avai_pos_sizes(0)-1;
|
||||
avai_pos_sizes(1) := avai_pos_sizes(1)-1;
|
||||
avai_pos_sizes(2) := avai_pos_sizes(2)-1;
|
||||
avai_pos_sizes(3) := avai_pos_sizes(3)-1;
|
||||
end if;
|
||||
else
|
||||
ps_dirs(i) <= (others => '0');
|
||||
|
|
|
@ -142,7 +142,7 @@ begin
|
|||
end loop;
|
||||
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
|
||||
for i in 0 to TOT_NUM_PATHS-1 loop
|
||||
case packet_states(i) is
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,11 @@
|
|||
# is external? | path | data
|
||||
0 272 0001000000000001110111100100010000000000000000000000000000000001 # origin: (11111-01011) --> dest: (01110-11110,00110-01110)
|
||||
0 863 0001000000000010100010111100111111000000000000000000000000000001 # origin: (01100-00000) --> dest: (10100-01011,00101-00000,10101-00001,11101-10111)
|
||||
0 346 0001000000000010000011000100010001000000000000000000000000000001 # origin: (11100-00011) --> dest: (10000-01100,11000-11101)
|
||||
0 14 0001000000000011001011101010001001000000000000000000000000000001 # origin: (11100-11101) --> dest: (11001-01110,01101-00111)
|
||||
0 459 0001000000000001100110101111111111000000000000000000000000000001 # origin: (10100-00110) --> dest: (01100-11010,01011-00010,01110-10100,11001-00001,01110-00100,00111-10001)
|
||||
0 968 0001000000000001101110010000000000000000000000000000000000000001 # origin: (00101-00111) --> dest: (01101-11001)
|
||||
0 535 0001000000000011101011110000000000000000000000000000000000000001 # origin: (01110-11000) --> dest: (11101-01111)
|
||||
0 933 0001000000000001110010100000000000000000000000000000000000000001 # origin: (00011-01100) --> dest: (01110-01010)
|
||||
0 665 0001000000000010000000001111111111000000000000000000000000000001 # origin: (00101-11010) --> dest: (10000-00000,01000-11100,10000-11000,10110-10110,10001-11011,10010-00110)
|
||||
0 60 0001000000000000001000001111111111000000000000000000000000000001 # origin: (11001-11001) --> dest: (00001-00000,10111-00011,01110-01111,10000-11101)
|
||||
0 798 0001000000000010110110111011111111000000000000000000000000000001 # origin: (01100-01001) --> dest: (10110-11011,10001-11110,00011-00101,10101-01110)
|
||||
0 100 0001000000000011100101100000000000000000000000000000000000000001 # origin: (11011-10101) --> dest: (11100-10110)
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -37,6 +37,8 @@ architecture bench of noc_tb is
|
|||
signal pe_rcv_acks : std_logic_vector(4**level-1 downto 0);
|
||||
signal pe_send_reqs : std_logic_vector(4**level-1 downto 0);
|
||||
|
||||
signal c_send_ack_nxt : std_logic_vector(4*num_paths_ext-1 downto 0);
|
||||
signal pe_send_ack_nxt : std_logic_vector(4**level-1 downto 0);
|
||||
signal c_send_reqs_prev : std_logic_vector(4*num_paths_ext-1 downto 0);
|
||||
signal pe_send_reqs_prev : std_logic_vector(4**level-1 downto 0);
|
||||
|
||||
|
@ -106,10 +108,8 @@ begin
|
|||
arstN <= '0';
|
||||
data_chip_in <= (others => (others => '0'));
|
||||
c_rcv_reqs <= (others => '0');
|
||||
c_send_ack <= (others => '0');
|
||||
pe_data_in <= (others => (others => '0'));
|
||||
pe_rcv_reqs <= (others => '0');
|
||||
pe_send_ack <= (others => '0');
|
||||
wait until rising_edge(clk);
|
||||
arstN <= '1';
|
||||
wait until rising_edge(clk);
|
||||
|
@ -152,7 +152,7 @@ begin
|
|||
|
||||
save_results: process(c_send_reqs, pe_send_reqs,
|
||||
c_send_reqs_prev, pe_send_reqs_prev,
|
||||
data_chip_out, pe_data_out)
|
||||
data_chip_out, pe_data_out, pe_send_ack, c_send_ack)
|
||||
variable istwert : WORD;
|
||||
variable istpath : integer;
|
||||
begin
|
||||
|
@ -163,27 +163,46 @@ begin
|
|||
istwert := data_chip_out(i);
|
||||
istpath := i;
|
||||
log_test_result(i, istwert, '1', istpath);
|
||||
c_send_ack(i) <= not c_send_ack(i);
|
||||
c_send_ack_nxt(i) <= not c_send_ack(i);
|
||||
else
|
||||
c_send_ack_nxt(i) <= c_send_ack(i);
|
||||
end if;
|
||||
end loop;
|
||||
elsif pe_send_reqs'event or pe_send_reqs_prev'event then
|
||||
else
|
||||
for i in 0 to num_paths_ext*4-1 loop
|
||||
c_send_ack_nxt(i) <= c_send_ack(i);
|
||||
end loop;
|
||||
end if;
|
||||
|
||||
if pe_send_reqs'event or pe_send_reqs_prev'event then
|
||||
for i in 0 to 4**level-1 loop
|
||||
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
|
||||
istwert := pe_data_out(i);
|
||||
istpath := i;
|
||||
log_test_result(i, istwert, '0', istpath);
|
||||
pe_send_ack(i) <= not pe_send_ack(i);
|
||||
pe_send_ack_nxt(i) <= not pe_send_ack(i);
|
||||
else
|
||||
pe_send_ack_nxt(i) <= pe_send_ack(i);
|
||||
end if;
|
||||
end loop;
|
||||
else
|
||||
for i in 0 to 4**level-1 loop
|
||||
pe_send_ack_nxt(i) <= pe_send_ack(i);
|
||||
end loop;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
update_signals: process(clk)
|
||||
update_signals: process(clk, arstN)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if arstN = '0' then
|
||||
c_send_ack <= (others => '0');
|
||||
pe_send_ack <= (others => '0');
|
||||
elsif rising_edge(clk) then
|
||||
c_send_reqs_prev <= c_send_reqs;
|
||||
pe_send_reqs_prev <= pe_send_reqs;
|
||||
c_send_ack <= c_send_ack_nxt;
|
||||
pe_send_ack <= pe_send_ack_nxt;
|
||||
end if;
|
||||
end process;
|
||||
end;
|
|
@ -5,17 +5,15 @@ from utils import *
|
|||
#sender_paths = [["01100","00000"]] # x,y
|
||||
#recv_paths = [["00010","01110","11110","10011","10011","00000",
|
||||
# "01101","01001","11011","11011","10101","01100"]]
|
||||
sender_paths, recv_paths = generate_random_send_recv_paths(2)
|
||||
sender_paths, recv_paths = generate_random_send_recv_paths(10)
|
||||
test_name = "random_pe_to_pe_test"
|
||||
print(sender_paths)
|
||||
print(recv_paths)
|
||||
|
||||
# constants
|
||||
stimuli = "# is external? | path | data\n"
|
||||
reference = ""
|
||||
|
||||
data_packet = 1
|
||||
for p, path in enumerate(sender_paths):
|
||||
data_packet = 1
|
||||
if len(path) == 2:
|
||||
index_path = get_index_path(path[0], path[1])
|
||||
stimuli += "0 " + str(index_path) + " "
|
||||
|
@ -28,7 +26,6 @@ for p, path in enumerate(sender_paths):
|
|||
else:
|
||||
data_packet, stimuli, reference = gen_ref_for_mult_dir_multicast(
|
||||
path, recv_paths[p], data_packet, stimuli, reference)
|
||||
print(len(reference))
|
||||
data_packet += 1
|
||||
|
||||
with open("stimuli.txt", "w") as f:
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,11 @@
|
|||
# is external? | path | data
|
||||
0 272 0001000000000001110111100100010000000000000000000000000000000001 # origin: (11111-01011) --> dest: (01110-11110,00110-01110)
|
||||
0 863 0001000000000010100010111100111111000000000000000000000000000001 # origin: (01100-00000) --> dest: (10100-01011,00101-00000,10101-00001,11101-10111)
|
||||
0 346 0001000000000010000011000100010001000000000000000000000000000001 # origin: (11100-00011) --> dest: (10000-01100,11000-11101)
|
||||
0 14 0001000000000011001011101010001001000000000000000000000000000001 # origin: (11100-11101) --> dest: (11001-01110,01101-00111)
|
||||
0 459 0001000000000001100110101111111111000000000000000000000000000001 # origin: (10100-00110) --> dest: (01100-11010,01011-00010,01110-10100,11001-00001,01110-00100,00111-10001)
|
||||
0 968 0001000000000001101110010000000000000000000000000000000000000001 # origin: (00101-00111) --> dest: (01101-11001)
|
||||
0 535 0001000000000011101011110000000000000000000000000000000000000001 # origin: (01110-11000) --> dest: (11101-01111)
|
||||
0 933 0001000000000001110010100000000000000000000000000000000000000001 # origin: (00011-01100) --> dest: (01110-01010)
|
||||
0 665 0001000000000010000000001111111111000000000000000000000000000001 # origin: (00101-11010) --> dest: (10000-00000,01000-11100,10000-11000,10110-10110,10001-11011,10010-00110)
|
||||
0 60 0001000000000000001000001111111111000000000000000000000000000001 # origin: (11001-11001) --> dest: (00001-00000,10111-00011,01110-01111,10000-11101)
|
||||
0 798 0001000000000010110110111011111111000000000000000000000000000001 # origin: (01100-01001) --> dest: (10110-11011,10001-11110,00011-00101,10101-01110)
|
||||
0 100 0001000000000011100101100000000000000000000000000000000000000001 # origin: (11011-10101) --> dest: (11100-10110)
|
||||
|
|
|
@ -54,8 +54,6 @@ def get_multicast_reference(copy_x, copy_y, recv_path, packet):
|
|||
else 0
|
||||
y_poss_ind = y_poss_ind+1 if y_poss_ind+1 < len(y_poss_paths[i]) \
|
||||
else 0
|
||||
print(copy_x)
|
||||
print(copy_y)
|
||||
reference = ""
|
||||
for x_path, y_path in zip(x_paths, y_paths):
|
||||
index_path = get_index_path(x_path, y_path)
|
||||
|
|
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
|
@ -19,12 +19,19 @@ with open("simulation.log", "r") as f:
|
|||
for line in f:
|
||||
results.append(line)
|
||||
|
||||
all_test_passed = True
|
||||
test_logs = []
|
||||
for result in results:
|
||||
if result in reference:
|
||||
test_logs.append(result + "---> passed!")
|
||||
for ref in reference:
|
||||
if ref in results:
|
||||
test_logs.append(ref[:-1] + " ---> passed!")
|
||||
else:
|
||||
test_logs.append(result + "---> failed!")
|
||||
all_test_passed = False
|
||||
test_logs.append(ref[:-1] + " ---> failed!")
|
||||
|
||||
if all_test_passed:
|
||||
test_logs.append("All tests passed successfully :)")
|
||||
else:
|
||||
test_logs.append("One or more test failed :(")
|
||||
|
||||
with open("test.log", "w") as f:
|
||||
for test_log in test_logs:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue