2011-12-16 15:30:14 -05:00
|
|
|
from migen.fhdl.structure import *
|
2011-12-05 11:43:56 -05:00
|
|
|
|
2012-02-06 07:55:50 -05:00
|
|
|
class RegisterRaw:
|
|
|
|
def __init__(self, name, size=1):
|
2011-12-05 11:43:56 -05:00
|
|
|
self.name = name
|
2012-02-06 07:55:50 -05:00
|
|
|
self.size = size
|
|
|
|
self.re = Signal()
|
|
|
|
self.r = Signal(BV(self.size))
|
|
|
|
self.w = Signal(BV(self.size))
|
2011-12-05 11:43:56 -05:00
|
|
|
|
|
|
|
(READ_ONLY, WRITE_ONLY, READ_WRITE) = range(3)
|
|
|
|
|
|
|
|
class Field:
|
2012-02-06 07:55:50 -05:00
|
|
|
def __init__(self, name, size=1, access_bus=READ_WRITE, access_dev=READ_ONLY, reset=0):
|
2011-12-05 11:43:56 -05:00
|
|
|
self.name = name
|
|
|
|
self.size = size
|
|
|
|
self.access_bus = access_bus
|
|
|
|
self.access_dev = access_dev
|
2012-02-06 07:55:50 -05:00
|
|
|
self.storage = Signal(BV(self.size), reset=reset)
|
2011-12-05 11:43:56 -05:00
|
|
|
if self.access_dev == READ_ONLY or self.access_dev == READ_WRITE:
|
2012-02-06 07:55:50 -05:00
|
|
|
self.r = Signal(BV(self.size))
|
2011-12-05 11:43:56 -05:00
|
|
|
if self.access_dev == WRITE_ONLY or self.access_dev == READ_WRITE:
|
2012-02-06 07:55:50 -05:00
|
|
|
self.w = Signal(BV(self.size))
|
|
|
|
self.we = Signal()
|
|
|
|
|
|
|
|
class RegisterFields:
|
|
|
|
def __init__(self, name, fields):
|
|
|
|
self.name = name
|
|
|
|
self.fields = fields
|
|
|
|
|
|
|
|
class RegisterField(RegisterFields):
|
|
|
|
def __init__(self, name, size=1, access_bus=READ_WRITE, access_dev=READ_ONLY, reset=0):
|
|
|
|
self.field = Field(name, size, access_bus, access_dev, reset)
|
|
|
|
RegisterFields.__init__(self, name, [self.field])
|