コード例 #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)
コード例 #13
0
  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 )