Пример #1
0
    def test_simple_5x5(s, pos_x, pos_y, cmdline_opts):
        ncols = 5
        nrows = 5

        Pkt = mk_mesh_pkt(ncols, nrows, vc=2)

        src_pkts, sink_pkts = mk_srcsink_pkts(
            pos_x,
            pos_y,
            ncols,
            nrows,
            [
                #   src_x  y  dst_x  y  opq  vc  payload
                Pkt(1, 0, 0, 4, 0, 0, 0xfaceb00c),
            ])

        th = TestHarness(Pkt, src_pkts, sink_pkts)
        th.set_param(
            "top.construct",
            ncols=ncols,
            nrows=nrows,
            pos_x=pos_x,
            pos_y=pos_y,
        )
        run_sim(th, cmdline_opts)
Пример #2
0
def test_self_simple( cmdline_opts ):
  PacketType = mk_mesh_pkt(4, 4)
  pkt = PacketType( 0, 0, 0, 0, 0, 0xdead )
  src_pkts  = [ [], [], [], [], [pkt] ]
  sink_pkts = [ [], [], [], [], [pkt] ]
  th = TestHarness( PacketType, 4, 4, 0, 0, src_pkts, sink_pkts )
  run_sim( th, cmdline_opts )
Пример #3
0
def torus_pkt_strat(draw, ncols, nrows):
    src_x = draw(st.integers(0, ncols - 1), label="src_x")
    src_y = draw(st.integers(0, nrows - 1), label="src_y")
    dst_x = draw(st.integers(0, ncols - 1), label="dst_x")
    dst_y = draw(st.integers(0, nrows - 1), label="dst_y")
    payload = draw(st.sampled_from([0xdeadface, 0xfaceb00c, 0xdeadbabe]))
    Pkt = mk_mesh_pkt(ncols, nrows, vc=2)
    return Pkt(src_x, src_y, dst_x, dst_y, 0, 0, payload)
Пример #4
0
    def test_hypothesis(s, ncols, nrows, pkts, cmdline_opts):
        Pkt = mk_mesh_pkt(ncols, nrows, vc=2)

        pkts_lst = pkts.draw(st.lists(torus_pkt_strat(ncols, nrows),
                                      max_size=4),
                             label="pkts")

        src_pkts = mk_src_pkts(ncols, nrows, pkts_lst)
        dst_pkts = torusnet_fl(ncols, nrows, src_pkts)
        th = TestHarness(Pkt, ncols, nrows, src_pkts, dst_pkts)
        run_sim(th, cmdline_opts, max_cycles=5000)
Пример #5
0
def test_normal_simple( cmdline_opts ):
  src_packets = [[],[],[],[],[]]
  for item in test_msgs:
    for i in range( len( item ) ):
      (dst_x,dst_y,payload,dir_out) = item[i]
      PacketType = mk_mesh_pkt (4, 4)
      pkt = PacketType (0, 0, dst_x, dst_y, 1, payload)
      src_packets[i].append( pkt )
      result_msgs[dir_out].append( pkt )

  th = TestHarness( PacketType, 4, 4, 1, 1, src_packets, result_msgs, 0, 0, 0, 0 )
  run_sim( th, cmdline_opts )
Пример #6
0
 def test_simple4x4(s, pos_x, pos_y):
     ncols = 4
     nrows = 4
     Pkt = mk_mesh_pkt(ncols, nrows)
     router_fl = MeshRouterFL(pos_x, pos_y, dimension='x')
     src_pkts = router_fl.arrange_src_pkts([
         #   src_x  y dst_x  y  opq payload
         Pkt(0, 0, 3, 3, 0, 0xdeaddead),
     ])
     dst_pkts = router_fl.route(src_pkts)
     th = s.TestHarness(Pkt, src_pkts, dst_pkts, ncols, nrows, pos_x, pos_y)
     run_sim(th)
Пример #7
0
def mesh_pkt_strat(draw, ncols, nrows, opaque_nbits=8, vc=1, payload_nbits=32):
    dst_x = draw(st.integers(0, ncols - 1))
    dst_y = draw(st.integers(0, nrows - 1))
    src_x = draw(st.integers(0, ncols - 1))
    src_y = draw(st.integers(0, nrows - 1))
    opaque = draw(pst.bits(opaque_nbits))
    payload = draw(st.sampled_from([0, 0xdeadbeef, 0xfaceb00c, 0xc001cafe]))
    Pkt = mk_mesh_pkt(ncols, nrows, opaque_nbits, vc, payload_nbits)
    if vc == 1:
        return Pkt(src_x, src_y, dst_x, dst_y, opaque, payload)
    else:
        return Pkt(src_x, src_y, dst_x, dst_y, opaque, 0, payload)
Пример #8
0
 def test_h1(s):
     pos_x = 0
     pos_y = 0
     ncols = 2
     nrows = 2
     Pkt = mk_mesh_pkt(ncols, nrows)
     router_fl = MeshRouterFL(pos_x, pos_y, dimension='x')
     src_pkts = router_fl.arrange_src_pkts([
         #   src_x  y dst_x  y  opq payload
         Pkt(0, 0, 0, 1, 0, 0xdeadbabe),
     ])
     dst_pkts = router_fl.route(src_pkts)
     th = s.TestHarness(Pkt, src_pkts, dst_pkts, ncols, nrows, pos_x, pos_y)
     run_sim(th)
Пример #9
0
def _mk_mesh_net(opts):
    ncols = opts.ncols
    nrows = opts.nrows
    nports = opts.ncols * opts.nrows
    payload_nbits = opts.channel_bw
    channel_lat = opts.channel_lat

    Pos = mk_mesh_pos(ncols, nrows)
    Pkt = mk_mesh_pkt(ncols, nrows, vc=1, payload_nbits=payload_nbits)
    if hasattr(opts, 'cl') and opts.cl:
        cl_net = MeshNetworkCL(Pkt, Pos, ncols, nrows, channel_lat)
        net = CLNetWrapper(Pkt, cl_net, nports)
    else:
        net = MeshNetworkRTL(Pkt, Pos, ncols, nrows, channel_lat)
    return net
Пример #10
0
def test_h1( cmdline_opts ):
  pos_x, pos_y, ncols, nrows = 0, 0, 2, 2
  PacketType = mk_mesh_pkt( ncols, nrows )
  pkt0 = PacketType( 0, 0, 0, 1, 0, 0xdead )
  src_pkts  = [ [],     [], [], [], [pkt0] ]
  sink_pkts = [ [pkt0], [], [], [], []     ]
  th = TestHarness(
    PacketType, ncols, nrows, pos_x, pos_y,
    src_pkts, sink_pkts
  )
  th.set_param(
    "top.dut.construct",
    RouteUnitType = DORYMeshRouteUnitRTL
  )
  run_sim( th, cmdline_opts )
Пример #11
0
def _mk_torus_net(opts):
    ncols = opts.ncols
    nrows = opts.nrows
    payload_nbits = opts.channel_bw
    channel_lat = opts.channel_lat

    Pos = mk_mesh_pos(ncols, nrows)
    Pkt = mk_mesh_pkt(ncols, nrows, vc=2, payload_nbits=payload_nbits)
    net = TorusNetworkRTL(Pkt,
                          Pos,
                          ncols,
                          nrows,
                          channel_lat,
                          vc=2,
                          credit_line=2)
    return net
Пример #12
0
def test_mesh_simple(test_params):
    PktType = mk_mesh_pkt(ncols=test_params.wid, nrows=test_params.ht, vc=1)

    src_msgs, sink_msgs = mk_src_sink_msgs(PktType, test_params.msg_list,
                                           test_params.wid, test_params.ht)
    th = TestHarness(
        PktType,
        test_params.wid,
        test_params.ht,
        src_msgs,
        sink_msgs,
        test_params.src_init,
        test_params.src_intv,
        test_params.sink_init,
        test_params.sink_intv,
    )
    run_sim(th)
  def test_simple_4x4( s, pos_x, pos_y, cmdline_opts ):

    ncols = 4
    nrows  = 4

    Pkt = mk_mesh_pkt( ncols, nrows, vc=2 )

    src_pkts = [
      #   src_x  y  dst_x  y  opq  vc  payload
      Pkt(    0, 0,     1, 1,   0,  0, 0xfaceb00c ),
      Pkt(    0, 0,     0, 0,   0,  0, 0xdeaddead ),
      Pkt(    0, 0,     1, 0,   0,  0, 0xdeadface ),
      Pkt(    0, 0,     3, 3,   0,  0, 0xdeadface ),
    ]
    dst_pkts = mk_dst_pkts( pos_x, pos_y, ncols, nrows, src_pkts )
    th = TestHarness( Pkt, src_pkts, dst_pkts, ncols, nrows, pos_x, pos_y )
    run_sim( th, cmdline_opts )
Пример #14
0
    def test_simple(s, cmdline_opts):
        ncols = 2
        nrows = 2

        Pkt = mk_mesh_pkt(ncols, nrows, vc=2)

        src_pkts = mk_src_pkts(
            ncols,
            nrows,
            [
                #    src_x  y  dst_x  y   opq vc payload
                Pkt(1, 0, 0, 1, 0, 0, 0xfaceb00c),
                Pkt(1, 1, 1, 0, 0, 0, 0xdeadface),
            ])
        dst_pkts = torusnet_fl(ncols, nrows, src_pkts)
        th = TestHarness(Pkt, ncols, nrows, src_pkts, dst_pkts)
        run_sim(th, cmdline_opts)
Пример #15
0
def test_h2( cmdline_opts ):
  pos_x, pos_y, ncols, nrows = 0, 0, 2, 2
  PacketType = mk_mesh_pkt( ncols, nrows )
  pkt0 = PacketType( 0, 0, 1, 0, 0, 0xdead )
  pkt1 = PacketType( 0, 1, 1, 0, 1, 0xbeef )
  pkt2 = PacketType( 0, 1, 1, 0, 2, 0xcafe )
              # N             S   W   E                   self
  src_pkts  = [ [pkt1, pkt2], [], [], [],                 [pkt0] ]
  sink_pkts = [ [],           [], [], [pkt1, pkt0, pkt2], []     ]
  th = TestHarness(
    PacketType, ncols, nrows, pos_x, pos_y,
    src_pkts, sink_pkts
  )
  th.set_param(
    "top.dut.construct",
    RouteUnitType = DORYMeshRouteUnitRTL
  )
  run_sim( th, cmdline_opts, max_cycles=20 )
Пример #16
0
def _gen_mesh_pkt(opts, timestamp, src_id):
    ncols = opts.ncols
    nrows = opts.nrows
    payload_nbits = opts.channel_bw
    nports = ncols * nrows

    x_type = mk_bits(clog2(opts.ncols))
    y_type = mk_bits(clog2(opts.nrows))

    pkt = mk_mesh_pkt(ncols, nrows, vc=1, payload_nbits=payload_nbits)()
    pkt.payload = timestamp

    dst_id = _gen_dst_id(opts.pattern, nports, src_id)
    pkt.src_x = x_type(src_id % ncols)
    pkt.src_y = y_type(src_id // ncols)
    pkt.dst_x = x_type(dst_id % ncols)
    pkt.dst_y = y_type(dst_id // ncols)

    return pkt
Пример #17
0
 def test_hypothesis(s, ncols, nrows, routing, pos_x, pos_y, pkts, src_init,
                     src_inter, sink_init, sink_inter):
     # Draw some numbers
     pos_x = pos_x.draw(st.integers(0, ncols - 1), label="pos_x")
     pos_y = pos_y.draw(st.integers(0, nrows - 1), label="pos_y")
     Pkt = mk_mesh_pkt(ncols, nrows)
     router_fl = MeshRouterFL(pos_x, pos_y, dimension='x')
     msgs = pkts.draw(st.lists(mesh_pkt_strat(ncols, nrows),
                               min_size=1,
                               max_size=50),
                      label="msgs")
     src_pkts = router_fl.arrange_src_pkts(msgs)
     dst_pkts = router_fl.route(src_pkts)
     th = s.TestHarness(Pkt, src_pkts, dst_pkts, ncols, nrows, pos_x, pos_y)
     th.set_param("top.src*.construct",
                  initial_delay=src_init,
                  interval_delay=src_init)
     th.set_param("top.sink*.construct",
                  initial_delay=sink_init,
                  interval_delay=sink_init)
     run_sim(th, max_cycles=5000)
Пример #18
0
def test_srcsink_mesh4x4( cmdline_opts ):

  #           src, dst, payload
  test_msgs = [ (0, 15, 101), (1, 14, 102), (2, 13, 103), (3, 12, 104),
                (4, 11, 105), (5, 10, 106), (6,  9, 107), (7,  8, 108),
                (8,  7, 109), (9,  6, 110), (10, 5, 111), (11, 4, 112),
                (12, 3, 113), (13, 2, 114), (14, 1, 115), (15, 0, 116) ]

  src_packets  =  [ [],[],[],[],
                    [],[],[],[],
                    [],[],[],[],
                    [],[],[],[] ]

  sink_packets =  [ [],[],[],[],
                    [],[],[],[],
                    [],[],[],[],
                    [],[],[],[] ]

  # note that need to yield one/two cycle for reset
  arrival_pipes = [[8], [6], [6], [8],
                   [6], [4], [4], [6],
                   [6], [4], [4], [6],
                   [8], [6], [6], [8]]

  ncols = 4
  nrows  = 4

  PacketType = mk_mesh_pkt( ncols, nrows )
  for (src, dst, payload) in test_msgs:
    pkt = PacketType( src%ncols, src//ncols, dst%ncols, dst//ncols, 1, payload )
    src_packets [src].append( pkt )
    sink_packets[dst].append( pkt )

  # for i,x in enumerate(src_packets):
    # print("src", i, [str(y) for y in x] )
  # for i,x in enumerate(sink_packets):
    # print("sink", i, [str(y) for y in x] )
  th = TestHarness( PacketType, ncols, nrows, src_packets, sink_packets,
                    0, 0, 0, 0 )
  run_sim( th, cmdline_opts )