forked from librebmc/lpcperipheral
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.1 KiB
Python
53 lines
1.1 KiB
Python
3 years ago
|
#!/usr/bin/env python
|
||
|
|
||
|
# This is a little test program so I could work out how multiple clock
|
||
|
# domains work. Not really part of this project but a handy refrence
|
||
|
|
||
|
from nmigen import *
|
||
|
from enum import Enum, unique
|
||
|
|
||
|
class clocks(Elaboratable):
|
||
|
|
||
|
def __init__(self):
|
||
|
|
||
|
# LPC clock pin
|
||
|
self.lclk = Signal()
|
||
|
self.counter = Signal(8)
|
||
|
self.lcounter = Signal(8)
|
||
|
|
||
|
def elaborate(self, platform):
|
||
|
m = Module()
|
||
|
|
||
|
lclk = ClockDomain("lclk")
|
||
|
|
||
|
# hook up lclk port to lclk_domain
|
||
|
m.d.comb += self.lclk.eq(ClockSignal("lclk"))
|
||
|
|
||
|
m.d.sync += self.counter.eq(self.counter + 1)
|
||
|
m.d["lclk"] += self.lcounter.eq(self.lcounter + 1)
|
||
|
|
||
|
return m
|
||
|
|
||
|
# --- TEST ---
|
||
|
from nmigen.sim import Simulator
|
||
|
|
||
|
|
||
|
dut = clocks()
|
||
|
def bench():
|
||
|
for _ in range(10):
|
||
|
yield
|
||
|
|
||
|
def lbench():
|
||
|
for _ in range(10):
|
||
|
yield
|
||
|
|
||
|
sim = Simulator(dut)
|
||
|
sim.add_clock(1e-8) # 100 MHz systemclock
|
||
|
sim.add_clock(3e-8, domain="lclk") # 33 MHz LPC clock
|
||
|
sim.add_sync_process(bench, domain="sync")
|
||
|
sim.add_sync_process(lbench, domain="lclk")
|
||
|
|
||
|
with sim.write_vcd("clocks.vcd"):
|
||
|
sim.run()
|
||
|
|