forked from M-Labs/artiq
parent
a467b8f851
commit
2bea5e3d58
|
@ -31,6 +31,7 @@ CFG_CLK_SEL1 = 21
|
||||||
CFG_SYNC_SEL = 18
|
CFG_SYNC_SEL = 18
|
||||||
CFG_RST = 19
|
CFG_RST = 19
|
||||||
CFG_IO_RST = 20
|
CFG_IO_RST = 20
|
||||||
|
CFG_CLK_DIV = 22
|
||||||
|
|
||||||
# STA status register bit offsets
|
# STA status register bit offsets
|
||||||
STA_RF_SW = 0
|
STA_RF_SW = 0
|
||||||
|
@ -54,7 +55,7 @@ CS_DDS_CH3 = 7
|
||||||
|
|
||||||
@portable
|
@portable
|
||||||
def urukul_cfg(rf_sw, led, profile, io_update, mask_nu,
|
def urukul_cfg(rf_sw, led, profile, io_update, mask_nu,
|
||||||
clk_sel, sync_sel, rst, io_rst):
|
clk_sel, sync_sel, rst, io_rst, clk_div):
|
||||||
"""Build Urukul CPLD configuration register"""
|
"""Build Urukul CPLD configuration register"""
|
||||||
return ((rf_sw << CFG_RF_SW) |
|
return ((rf_sw << CFG_RF_SW) |
|
||||||
(led << CFG_LED) |
|
(led << CFG_LED) |
|
||||||
|
@ -65,7 +66,8 @@ def urukul_cfg(rf_sw, led, profile, io_update, mask_nu,
|
||||||
((clk_sel & 0x02) << (CFG_CLK_SEL1 - 1)) |
|
((clk_sel & 0x02) << (CFG_CLK_SEL1 - 1)) |
|
||||||
(sync_sel << CFG_SYNC_SEL) |
|
(sync_sel << CFG_SYNC_SEL) |
|
||||||
(rst << CFG_RST) |
|
(rst << CFG_RST) |
|
||||||
(io_rst << CFG_IO_RST))
|
(io_rst << CFG_IO_RST) |
|
||||||
|
(clk_div << CFG_CLK_DIV))
|
||||||
|
|
||||||
|
|
||||||
@portable
|
@portable
|
||||||
|
@ -133,6 +135,11 @@ class CPLD:
|
||||||
internal MMCX. For hardware revision <= v1.2 valid options are: 0 -
|
internal MMCX. For hardware revision <= v1.2 valid options are: 0 -
|
||||||
either XO or MMCX dependent on component population; 1 SMA. Unsupported
|
either XO or MMCX dependent on component population; 1 SMA. Unsupported
|
||||||
clocking options are silently ignored.
|
clocking options are silently ignored.
|
||||||
|
:param clk_div: Reference clock divider. Valid options are 0: variant
|
||||||
|
dependent default (divide-by-4 for AD9910 and divide-by-1 for AD9912);
|
||||||
|
1: divide-by-1; 2: divide-by-2; 3: divide-by-4.
|
||||||
|
On Urukul boards with CPLD gateware before v1.3.1 only the default
|
||||||
|
(0, i.e. variant dependent divider) is valid.
|
||||||
:param sync_sel: SYNC (multi-chip synchronisation) signal source selection.
|
:param sync_sel: SYNC (multi-chip synchronisation) signal source selection.
|
||||||
0 corresponds to SYNC_IN being supplied by the FPGA via the EEM
|
0 corresponds to SYNC_IN being supplied by the FPGA via the EEM
|
||||||
connector. 1 corresponds to SYNC_OUT from DDS0 being distributed to the
|
connector. 1 corresponds to SYNC_OUT from DDS0 being distributed to the
|
||||||
|
@ -148,16 +155,18 @@ class CPLD:
|
||||||
`sync_device` was specified).
|
`sync_device` was specified).
|
||||||
:param core_device: Core device name
|
:param core_device: Core device name
|
||||||
"""
|
"""
|
||||||
kernel_invariants = {"refclk", "bus", "core", "io_update"}
|
kernel_invariants = {"refclk", "bus", "core", "io_update", "clk_div"}
|
||||||
|
|
||||||
def __init__(self, dmgr, spi_device, io_update_device=None,
|
def __init__(self, dmgr, spi_device, io_update_device=None,
|
||||||
dds_reset_device=None, sync_device=None,
|
dds_reset_device=None, sync_device=None,
|
||||||
sync_sel=0, clk_sel=0, rf_sw=0,
|
sync_sel=0, clk_sel=0, clk_div=0, rf_sw=0,
|
||||||
refclk=125e6, att=0x00000000, sync_div=None,
|
refclk=125e6, att=0x00000000, sync_div=None,
|
||||||
core_device="core"):
|
core_device="core"):
|
||||||
|
|
||||||
self.core = dmgr.get(core_device)
|
self.core = dmgr.get(core_device)
|
||||||
self.refclk = refclk
|
self.refclk = refclk
|
||||||
|
assert 0 <= clk_div <= 3
|
||||||
|
self.clk_div = clk_div
|
||||||
|
|
||||||
self.bus = dmgr.get(spi_device)
|
self.bus = dmgr.get(spi_device)
|
||||||
if io_update_device is not None:
|
if io_update_device is not None:
|
||||||
|
@ -177,7 +186,8 @@ class CPLD:
|
||||||
|
|
||||||
self.cfg_reg = urukul_cfg(rf_sw=rf_sw, led=0, profile=0,
|
self.cfg_reg = urukul_cfg(rf_sw=rf_sw, led=0, profile=0,
|
||||||
io_update=0, mask_nu=0, clk_sel=clk_sel,
|
io_update=0, mask_nu=0, clk_sel=clk_sel,
|
||||||
sync_sel=sync_sel, rst=0, io_rst=0)
|
sync_sel=sync_sel,
|
||||||
|
rst=0, io_rst=0, clk_div=clk_div)
|
||||||
self.att_reg = int32(int64(att))
|
self.att_reg = int32(int64(att))
|
||||||
self.sync_div = sync_div
|
self.sync_div = sync_div
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue