Source code for hwtLib.mem.extern.migUserPort
from hwt.hwIO import HwIO
from hwt.hwIOs.std import HwIOSignal, HwIOVectSignal
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from ipCorePackager.constants import DIRECTION
[docs]
class MIG_CMD():
WRITE = 0b000
READ = 0b001
WR_BYTES = 0b011
[docs]
class MigUserPortWDF(HwIO):
@override
def hwConfig(self):
self.DATA_WIDTH = HwParam(64)
@override
def hwDeclr(self):
# DDR data to write
self.data = HwIOVectSignal(self.DATA_WIDTH)
# DDR write burst end
self.end = HwIOSignal()
# DDR mask of data to write (select which bytes will be written)
self.mask = HwIOVectSignal(self.DATA_WIDTH // 8)
# DDR write enable
self.wren = HwIOSignal()
# DDR driver is ready to accept write request
self.rdy = HwIOSignal(masterDir=DIRECTION.IN)
[docs]
class MigUserPortRD(HwIO):
@override
def hwConfig(self):
self.DATA_WIDTH = HwParam(64)
@override
def hwDeclr(self):
# DDR read dataslv_array_2d_t
self.data = HwIOVectSignal(self.DATA_WIDTH)
# DDR read burst end
self.end = HwIOSignal()
# DDR read data valid
self.valid = HwIOSignal()
[docs]
class MigUserPort(HwIO):
"""
HwIO used to control Xilinx MIG (Memory HwIO Generator) DDR4 controller
https://www.xilinx.com/support/documentation/ip_documentation/ultrascale_memory_ip/v1_4/pg150-ultrascale-memory-ip.pdf
p. 122
"""
@override
def hwConfig(self):
self.DATA_WIDTH = HwParam(64)
self.ADDR_WIDTH = HwParam(32)
@override
def hwDeclr(self):
IN = DIRECTION.IN
# Calibration complete
self.calib_complete = HwIOSignal(masterDir=IN)
# DDR address
self.addr = HwIOVectSignal(self.ADDR_WIDTH)
# DDR command
self.cmd = HwIOVectSignal(3)
# DDR enable signal
self.en = HwIOSignal()
# DDR driver is ready to accept read request
self.RDY = HwIOSignal(masterDir=IN)
with self._hwParamsShared():
# data write channel
self.wdf = MigUserPortWDF()
# data read channel
self.rd = MigUserPortRD(masterDir=IN)