litex/examples/de0_nano/client/test_mila.py

99 lines
2.4 KiB
Python

from miscope import mila
from miscope.std.truthtable import *
from miscope.std.vcd import *
from miscope.com.uart2csr.host.uart2csr import *
from csr import *
#==============================================================================
# P A R A M E T E R S
#==============================================================================
uart = Uart2Csr(3, 115200)
class MiLaCtrl():
def __init__(self, bus):
self.bus = bus
def prog_term(self, trigger, mask):
mila_trigger_port0_trig_write(self.bus, trigger)
mila_trigger_port0_mask_write(self.bus, mask)
def prog_sum(self, datas):
for adr, dat in enumerate(datas):
mila_trigger_sum_prog_adr_write(self.bus, adr)
mila_trigger_sum_prog_dat_write(self.bus, dat)
mila_trigger_sum_prog_we_write(self.bus, 1)
def enable_rle(self):
mila_rle_enable_write(self.bus, 1)
def disable_rle(self):
mila_rle_enable_write(self.bus, 0)
def is_done(self):
return mila_recorder_done_read(self.bus)
def trigger(self, offset, length):
mila_recorder_offset_write(self.bus, offset)
mila_recorder_length_write(self.bus, length)
mila_recorder_trigger_write(self.bus, 1)
def read(self):
r = []
empty = mila_recorder_read_empty_read(self.bus)
while(not empty):
r.append(mila_recorder_read_dat_read(self.bus))
empty = mila_recorder_read_empty_read(self.bus)
mila_recorder_read_en_write(self.bus, 1)
return r
# Mila Param
trig_w = 16
dat_w = 16
rec_length = 512
rec_offset = 0
rle = True
#==============================================================================
# T E S T M I L A
#==============================================================================
dat_vcd = VcdDat(dat_w)
mila = MiLaCtrl(uart)
def capture():
global dat_vcd
sum_tt = gen_truth_table("term")
mila.prog_sum(sum_tt)
mila.trigger(rec_offset, rec_length)
print("-Recorder [Triggered]")
print("-Waiting Trigger...", end=' ')
while(not mila.is_done()):
time.sleep(0.1)
print("[Done]")
print("-Receiving Data...", end=' ')
sys.stdout.flush()
dat_vcd += mila.read()
print("[Done]")
print("Capturing ...")
print("----------------------")
if rle:
mila.enable_rle()
mila.prog_term(0x0000, 0xFFFF)
capture()
mila_layout = [
("freqgen", 1),
("event_rising", 1),
("event_falling", 1),
("cnt", 8),
]
if rle:
dat_vcd = dat_vcd.decode_rle()
myvcd = Vcd()
myvcd.add_from_layout(mila_layout, dat_vcd)
myvcd.write("test_mila.vcd")