Skip to content

Instantly share code, notes, and snippets.

@awygle
Created August 9, 2020 21:07
Show Gist options
  • Save awygle/ee910299cad0ba9f0a49250b84efc379 to your computer and use it in GitHub Desktop.
Save awygle/ee910299cad0ba9f0a49250b84efc379 to your computer and use it in GitHub Desktop.
import sys
from nmigen import *;
from nmigen.build import *
from nmigen.vendor.lattice_ecp5 import *
from nmigen_boards.resources import *
from nmigen.back import *
from nmigen_boards.versa_ecp5 import *
from nmigen.lib.cdc import FFSynchronizer
from udptherbone.stream import *
from udptherbone.slip import SLIPFramer
from udptherbone.slip import SLIPUnframer
from udptherbone.uart import UARTTx, UARTRx
from udptherbone.udp import *
from runelord.runelord import RunelordECP5Platform
import os
import subprocess
from scapy.all import *
class Add32(Elaboratable):
def __init__(self, in1, in2, outpins):
self.in1 = in1
self.in2 = in2
self.outpins = outpins
def elaborate(self, platform):
m = Module()
reg1 = Signal(32)
reg1.attrs["keep"] = 1
reg2 = Signal(32)
reg2.attrs["keep"] = 1
m.d.sync += reg1.eq(self.in1)
m.d.sync += reg2.eq(self.in2)
m.d.sync += self.outpins.eq(reg1 + reg2)
return m
class Top(Elaboratable):
def __init__(self):
pass
def elaborate(self, platform):
m = Module()
i1 = Signal(32)
i2 = Signal(32)
o = Signal(32)
i1.attrs["keep"] = 1
i2.attrs["keep"] = 1
o.attrs["keep"] = 1
m.submodules.add = Add32(i1, i2, o)
return m
if sys.argv[1] == "program":
RunelordECP5Platform().build(Top(), do_program=False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment