Source code for hwtLib.mem.extern.migUserPort

from hwt.interfaces.std import Signal, VectSignal
from hwt.synthesizer.interface import Interface
from hwt.synthesizer.param import Param
from ipCorePackager.constants import DIRECTION


[docs]class MIG_CMD(): WRITE = 0b000 READ = 0b001 WR_BYTES = 0b011
[docs]class MigUserPortWDF(Interface): def _config(self): self.DATA_WIDTH = Param(64) def _declr(self): # DDR data to write self.data = VectSignal(self.DATA_WIDTH) # DDR write burst end self.end = Signal() # DDR mask of data to write (select which bytes will be written) self.mask = VectSignal(self.DATA_WIDTH // 8) # DDR write enable self.wren = Signal() # DDR driver is ready to accept write request self.rdy = Signal(masterDir=DIRECTION.IN)
[docs]class MigUserPortRD(Interface): def _config(self): self.DATA_WIDTH = Param(64) def _declr(self): # DDR read dataslv_array_2d_t self.data = VectSignal(self.DATA_WIDTH) # DDR read burst end self.end = Signal() # DDR read data valid self.valid = Signal()
[docs]class MigUserPort(Interface): """ Interface used to control Xilinx MIG (Memory Interface Generator) DDR4 controller https://www.xilinx.com/support/documentation/ip_documentation/ultrascale_memory_ip/v1_4/pg150-ultrascale-memory-ip.pdf p. 122 """ def _config(self): self.DATA_WIDTH = Param(64) self.ADDR_WIDTH = Param(32) def _declr(self): IN = DIRECTION.IN # Calibration complete self.calib_complete = Signal(masterDir=IN) # DDR address self.addr = VectSignal(self.ADDR_WIDTH) # DDR command self.cmd = VectSignal(3) # DDR enable signal self.en = Signal() # DDR driver is ready to accept read request self.RDY = Signal(masterDir=IN) with self._paramsShared(): # data write channel self.wdf = MigUserPortWDF() # data read channel self.rd = MigUserPortRD(masterDir=IN)