cores/xadc: Review/Cleanup PR#838, rename _XADC to SystemMonitorDRP and USSYSMON to USSystemMonitor.

This commit is contained in:
Florent Kermarrec 2021-03-15 10:35:10 +01:00
parent 367b510590
commit 04cb8e0e5e
1 changed files with 33 additions and 26 deletions

View File

@ -2,21 +2,24 @@
# This file is part of LiteX.
#
# Copyright (c) 2014-2015 Robert Jordens <jordens@gmail.com>
# Copyright (c) 2019-2021 Florent Kermarrec <florent@enjoy-digital.fr>
# Copyright (c) 2019 bunnie <bunnie@kosagi.com>
# Copyright (c) 2019-2020 Florent Kermarrec <florent@enjoy-digital.fr>
# Copyright (c) 2021 Vamsi K Vytla <vamsi.vytla@gmail.com>
# SPDX-License-Identifier: BSD-2-Clause
from migen import *
from litex.soc.interconnect.csr import *
# XADC ---------------------------------------------------------------------------------------------
# Layouts -----------------------------------------------------------------------------------------
analog_layout = [("vauxp", 16), ("vauxn", 16), ("vp", 1), ("vn", 1)]
class _XADC(Module, AutoCSR):
# Xilinx System Monitor DRP ------------------------------------------------------------------------
class SystemMonitorDRP(Module, AutoCSR):
def expose_drp(self):
self.drp_enable = CSRStorage() # Set to 1 to use DRP and disable auto-sampling
self.drp_enable = CSRStorage() # Set to 1 to use DRP and disable auto-sampling.
self.drp_read = CSR()
self.drp_write = CSR()
self.drp_drdy = CSRStatus()
@ -26,7 +29,7 @@ class _XADC(Module, AutoCSR):
# # #
den_pipe = Signal() # add a register to ease timing closure of den
den_pipe = Signal() # Add a register to ease timing closure of den.
self.comb += [
self.di.eq(self.drp_dat_w.storage),
@ -47,8 +50,9 @@ class _XADC(Module, AutoCSR):
)
]
# Xilinx 7-Series System Monitor -------------------------------------------------------------------
class XADC(_XADC, AutoCSR):
class S7SystemMonitor(SystemMonitorDRP, AutoCSR):
dadr_size = 7
def __init__(self, analog_pads=None):
@ -79,7 +83,7 @@ class XADC(_XADC, AutoCSR):
eoc = Signal()
eos = Signal()
# XADC instance ----------------------------------------------------------------------------
# XADC instance.
self.dwe = Signal()
self.den = Signal()
self.drdy = Signal()
@ -88,7 +92,7 @@ class XADC(_XADC, AutoCSR):
self.do = Signal(16)
self.drp_en = Signal()
self.specials += Instance("XADC",
# From ug480
# From UG480
p_INIT_40=0x9000, p_INIT_41=0x2ef0, p_INIT_42=0x0400,
p_INIT_48=0x4701, p_INIT_49=0x000f,
p_INIT_4A=0x4700, p_INIT_4B=0x0000,
@ -127,12 +131,12 @@ class XADC(_XADC, AutoCSR):
)
]
# Channels update --------------------------------------------------------------------------
# Channels update.
channels = {
0: self.temperature,
1: self.vccint,
2: self.vccaux,
6: self.vccbram
0x0 : self.temperature,
0x1 : self.vccint,
0x2 : self.vccaux,
0x6 : self.vccbram
}
self.sync += [
If(self.drdy,
@ -142,14 +146,17 @@ class XADC(_XADC, AutoCSR):
)
]
# End of Convertion/Sequence update --------------------------------------------------------
# End of Convertion/Sequence update.
self.sync += [
self.eoc.status.eq((self.eoc.status & ~self.eoc.we) | eoc),
self.eos.status.eq((self.eos.status & ~self.eos.we) | eos),
]
class XADC(S7SystemMonitor): pass
class USSYSMON(_XADC, AutoCSR):
# Xilinx Ultrascale System Monitor -----------------------------------------------------------------
class USSystemMonitor(SystemMonitorDRP, AutoCSR):
dadr_size = 8
def __init__(self, analog_pads=None):
@ -186,7 +193,7 @@ class USSYSMON(_XADC, AutoCSR):
eoc = Signal()
eos = Signal()
# SYSMONE1 instance ----------------------------------------------------------------------------
# SYSMONE1 instance ------------------------------------------------------------------------
self.dwe = Signal()
self.den = Signal()
self.drdy = Signal()
@ -195,7 +202,7 @@ class USSYSMON(_XADC, AutoCSR):
self.do = Signal(16)
self.drp_en = Signal()
self.specials += Instance("SYSMONE1",
# From ug580
# From UG580
p_INIT_40=0x9000, p_INIT_41=0x2fd0, p_INIT_42=0x1000,
p_INIT_46=0x000f, p_INIT_48=0x4701, p_INIT_49=0x000f,
p_INIT_47=0x000f, p_INIT_4A=0x47e0, p_INIT_4B=0x0000,
@ -234,12 +241,12 @@ class USSYSMON(_XADC, AutoCSR):
)
]
# Channels update --------------------------------------------------------------------------
# Channels update.
channels = {
0: self.temperature,
1: self.vccint,
2: self.vccaux,
6: self.vccbram,
0x0 : self.temperature,
0x1 : self.vccint,
0x2 : self.vccaux,
0x6 : self.vccbram,
0xd : self.vccpsintlp,
0xe : self.vccpsintfp,
0xf : self.vccpsaux,
@ -252,7 +259,7 @@ class USSYSMON(_XADC, AutoCSR):
)
]
# End of Convertion/Sequence update --------------------------------------------------------
# End of Convertion/Sequence update.
self.sync += [
self.eoc.status.eq((self.eoc.status & ~self.eoc.we) | eoc),
self.eos.status.eq((self.eos.status & ~self.eos.we) | eos),