udpip_tb: loopback working with model! :)
This commit is contained in:
parent
a9da9dc750
commit
ca1e028c77
|
@ -40,6 +40,7 @@ class UDPPacket(Packet):
|
||||||
class UDP(Module):
|
class UDP(Module):
|
||||||
def __init__(self, ip, ip_address, debug=False, loopback=False):
|
def __init__(self, ip, ip_address, debug=False, loopback=False):
|
||||||
self.ip = ip
|
self.ip = ip
|
||||||
|
self.ip_address = ip_address
|
||||||
self.debug = debug
|
self.debug = debug
|
||||||
self.loopback = loopback
|
self.loopback = loopback
|
||||||
self.tx_packets = []
|
self.tx_packets = []
|
||||||
|
@ -63,8 +64,10 @@ class UDP(Module):
|
||||||
ip_packet.flags = 0
|
ip_packet.flags = 0
|
||||||
ip_packet.fragment_offset = 0
|
ip_packet.fragment_offset = 0
|
||||||
ip_packet.time_to_live = 0x80
|
ip_packet.time_to_live = 0x80
|
||||||
ip_packet.source_ip_address = ip_address,
|
ip_packet.source_ip_address = self.ip_address
|
||||||
ip_packet.destination_ip_address = 0x12345678 # XXX
|
ip_packet.destination_ip_address = 0x12345678 # XXX
|
||||||
|
ip_packet.header_checksum = 0
|
||||||
|
ip_packet.protocol = udp_protocol
|
||||||
self.ip.send(ip_packet)
|
self.ip.send(ip_packet)
|
||||||
|
|
||||||
def callback(self, packet):
|
def callback(self, packet):
|
||||||
|
|
|
@ -14,20 +14,22 @@ mac_address = 0x12345678abcd
|
||||||
|
|
||||||
class TB(Module):
|
class TB(Module):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.submodules.phy_model = phy.PHY(8, debug=True)
|
self.submodules.phy_model = phy.PHY(8, debug=False)
|
||||||
self.submodules.mac_model = mac.MAC(self.phy_model, debug=True, loopback=False)
|
self.submodules.mac_model = mac.MAC(self.phy_model, debug=False, loopback=False)
|
||||||
self.submodules.arp_model = arp.ARP(self.mac_model, mac_address, ip_address, debug=True)
|
self.submodules.arp_model = arp.ARP(self.mac_model, mac_address, ip_address, debug=False)
|
||||||
self.submodules.ip_model = ip.IP(self.mac_model, mac_address, ip_address, debug=True, loopback=False)
|
self.submodules.ip_model = ip.IP(self.mac_model, mac_address, ip_address, debug=False, loopback=False)
|
||||||
self.submodules.udp_model = udp.UDP(self.ip_model, ip_address, debug=True, loopback=False)
|
self.submodules.udp_model = udp.UDP(self.ip_model, ip_address, debug=False, loopback=True)
|
||||||
|
|
||||||
self.submodules.udp_ip = LiteEthUDPIPCore(self.phy_model, mac_address, ip_address)
|
self.submodules.udp_ip = LiteEthUDPIPCore(self.phy_model, mac_address, ip_address)
|
||||||
self.submodules.streamer = PacketStreamer(eth_udp_user_description(8))
|
self.submodules.streamer = PacketStreamer(eth_udp_user_description(8))
|
||||||
|
self.submodules.logger = PacketLogger(eth_udp_user_description(8))
|
||||||
self.comb += [
|
self.comb += [
|
||||||
Record.connect(self.streamer.source, self.udp_ip.sink),
|
Record.connect(self.streamer.source, self.udp_ip.sink),
|
||||||
self.udp_ip.sink.ip_address.eq(0x12345678),
|
self.udp_ip.sink.ip_address.eq(0x12345678),
|
||||||
self.udp_ip.sink.source_port.eq(0x1234),
|
self.udp_ip.sink.source_port.eq(0x1234),
|
||||||
self.udp_ip.sink.destination_port.eq(0x5678),
|
self.udp_ip.sink.destination_port.eq(0x5678),
|
||||||
self.udp_ip.sink.length.eq(64)
|
self.udp_ip.sink.length.eq(64),
|
||||||
|
Record.connect(self.udp_ip.source, self.logger.sink)
|
||||||
]
|
]
|
||||||
|
|
||||||
# use sys_clk for each clock_domain
|
# use sys_clk for each clock_domain
|
||||||
|
@ -53,6 +55,12 @@ class TB(Module):
|
||||||
while True:
|
while True:
|
||||||
packet = Packet([i for i in range(64)])
|
packet = Packet([i for i in range(64)])
|
||||||
yield from self.streamer.send(packet)
|
yield from self.streamer.send(packet)
|
||||||
|
yield from self.logger.receive()
|
||||||
|
|
||||||
|
# check results
|
||||||
|
s, l, e = check(packet, self.logger.packet)
|
||||||
|
print("shift "+ str(s) + " / length " + str(l) + " / errors " + str(e))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
run_simulation(TB(), ncycles=2048, vcd_name="my.vcd", keep_files=True)
|
run_simulation(TB(), ncycles=2048, vcd_name="my.vcd", keep_files=True)
|
||||||
|
|
Loading…
Reference in New Issue