Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/misoc
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: b6448ba5fc18
Choose a base ref
...
head repository: m-labs/misoc
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 7c95d253d939
Choose a head ref
  • 4 commits
  • 6 files changed
  • 1 contributor

Commits on May 30, 2013

  1. cif: move to milkymist folder

    Sebastien Bourdeauducq committed May 30, 2013
    Copy the full SHA
    6d71e09 View commit details
  2. dvisampler/clocking: remove DCM_CLKGEN

    Sebastien Bourdeauducq committed May 30, 2013
    Copy the full SHA
    084aa64 View commit details
  3. software/videomixer: remove unneeded DCM resets

    Sebastien Bourdeauducq committed May 30, 2013
    Copy the full SHA
    30f5ef8 View commit details
  4. software/videomixer: improve phase calibration

    Sebastien Bourdeauducq committed May 30, 2013
    Copy the full SHA
    7c95d25 View commit details
Showing with 38 additions and 32 deletions.
  1. +2 −1 build.py
  2. 0 { → milkymist}/cif.py
  3. +2 −15 milkymist/dvisampler/clocking.py
  4. +32 −15 software/videomixer/dvisamplerX.c
  5. +1 −0 software/videomixer/dvisamplerX.h
  6. +1 −1 top.py
3 changes: 2 additions & 1 deletion build.py
Original file line number Diff line number Diff line change
@@ -5,8 +5,9 @@
from mibuild.platforms import m1
from mibuild.tools import write_to_file

from milkymist import cif

import top
import cif

def main():
platform = m1.Platform()
File renamed without changes.
17 changes: 2 additions & 15 deletions milkymist/dvisampler/clocking.py
Original file line number Diff line number Diff line change
@@ -16,19 +16,6 @@ def __init__(self, pads):

###

clk_dejitter = Signal()
dcm_locked = Signal()
self.specials += Instance("DCM_CLKGEN",
Instance.Parameter("CLKIN_PERIOD", 26.7),
Instance.Parameter("CLKFX_DIVIDE", 2),
Instance.Parameter("CLKFX_MULTIPLY", 2),
Instance.Parameter("CLKFX_MD_MAX", 1.0),
Instance.Input("CLKIN", pads.clk),
Instance.Input("RST", self._r_pll_reset.storage),
Instance.Output("CLKFX", clk_dejitter),
Instance.Output("LOCKED", dcm_locked)
)

clkfbout = Signal()
pll_locked = Signal()
pll_clk0 = Signal()
@@ -52,8 +39,8 @@ def __init__(self, pads):
Instance.Output("CLKOUT3", pll_clk3),
Instance.Output("LOCKED", pll_locked),
Instance.Input("CLKFBIN", clkfbout),
Instance.Input("CLKIN", clk_dejitter),
Instance.Input("RST", ~dcm_locked)
Instance.Input("CLKIN", pads.clk),
Instance.Input("RST", self._r_pll_reset.storage)
)

locked_async = Signal()
47 changes: 32 additions & 15 deletions software/videomixer/dvisamplerX.c
Original file line number Diff line number Diff line change
@@ -106,35 +106,41 @@ void dvisamplerX_adjust_phase(void)
switch(dvisamplerX_data0_cap_phase_read()) {
case DVISAMPLER_TOO_LATE:
dvisamplerX_data0_cap_dly_ctl_write(DVISAMPLER_DELAY_DEC);
while(dvisamplerX_data0_cap_dly_busy_read());
dvisamplerX_d0--;
dvisamplerX_data0_cap_phase_reset_write(1);
break;
case DVISAMPLER_TOO_EARLY:
dvisamplerX_data0_cap_dly_ctl_write(DVISAMPLER_DELAY_INC);
while(dvisamplerX_data0_cap_dly_busy_read());
dvisamplerX_d0++;
dvisamplerX_data0_cap_phase_reset_write(1);
break;
}
switch(dvisamplerX_data1_cap_phase_read()) {
case DVISAMPLER_TOO_LATE:
dvisamplerX_data1_cap_dly_ctl_write(DVISAMPLER_DELAY_DEC);
while(dvisamplerX_data1_cap_dly_busy_read());
dvisamplerX_d1--;
dvisamplerX_data1_cap_phase_reset_write(1);
break;
case DVISAMPLER_TOO_EARLY:
dvisamplerX_data1_cap_dly_ctl_write(DVISAMPLER_DELAY_INC);
while(dvisamplerX_data1_cap_dly_busy_read());
dvisamplerX_d1++;
dvisamplerX_data1_cap_phase_reset_write(1);
break;
}
switch(dvisamplerX_data2_cap_phase_read()) {
case DVISAMPLER_TOO_LATE:
dvisamplerX_data2_cap_dly_ctl_write(DVISAMPLER_DELAY_DEC);
while(dvisamplerX_data2_cap_dly_busy_read());
dvisamplerX_d2--;
dvisamplerX_data2_cap_phase_reset_write(1);
break;
case DVISAMPLER_TOO_EARLY:
dvisamplerX_data2_cap_dly_ctl_write(DVISAMPLER_DELAY_INC);
while(dvisamplerX_data2_cap_dly_busy_read());
dvisamplerX_d2++;
dvisamplerX_data2_cap_phase_reset_write(1);
break;
@@ -158,13 +164,36 @@ int dvisamplerX_init_phase(void)
return 0;
}

int dvisamplerX_phase_startup(void)
{
int ret;
int attempts;

attempts = 0;
while(1) {
attempts++;
dvisamplerX_calibrate_delays();
printf("dvisamplerX: delays calibrated\n");
ret = dvisamplerX_init_phase();
if(ret) {
printf("dvisamplerX: phase init OK\n");
return 1;
} else {
printf("dvisamplerX: phase did not settle\n");
if(attempts > 3) {
printf("dvisamplerX: giving up\n");
dvisamplerX_calibrate_delays();
return 0;
}
}
}
}

static int dvisamplerX_locked;
static int dvisamplerX_last_event;

void dvisamplerX_service(void)
{
int ret;

if(dvisamplerX_locked) {
if(dvisamplerX_clocking_locked_read()) {
if(elapsed(&dvisamplerX_last_event, identifier_frequency_read()/2)) {
@@ -178,21 +207,9 @@ void dvisamplerX_service(void)
} else {
if(dvisamplerX_clocking_locked_read()) {
printf("dvisamplerX: PLL locked\n");
dvisamplerX_calibrate_delays();
printf("dvisamplerX: delays calibrated\n");
ret = dvisamplerX_init_phase();
if(ret)
printf("dvisamplerX: phase init OK\n");
else
printf("dvisamplerX: phase did not settle\n");
dvisamplerX_phase_startup();
dvisamplerX_print_status();
dvisamplerX_locked = 1;
} else {
if(elapsed(&dvisamplerX_last_event, identifier_frequency_read()/4)) {
dvisamplerX_clocking_pll_reset_write(1);
while(!elapsed(&dvisamplerX_last_event, identifier_frequency_read()/16));
dvisamplerX_clocking_pll_reset_write(0);
}
}
}
}
1 change: 1 addition & 0 deletions software/videomixer/dvisamplerX.h
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ void dvisamplerX_print_status(void);
void dvisamplerX_calibrate_delays(void);
void dvisamplerX_adjust_phase(void);
int dvisamplerX_init_phase(void);
int dvisamplerX_phase_startup(void);
void dvisamplerX_service(void);

#endif
2 changes: 1 addition & 1 deletion top.py
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
from milkymist import m1crg, lm32, norflash, uart, s6ddrphy, dfii, asmicon, \
identifier, timer, minimac3, framebuffer, asmiprobe, dvisampler, \
counteradc, gpio
from cif import get_macros
from milkymist.cif import get_macros

version = get_macros("common/version.h")["VERSION"][1:-1]