manta/test/test_config_export.py

202 lines
5.2 KiB
Python

import tempfile
import yaml
from amaranth import *
from manta import *
def test_io_core_dump():
# Create some dummy signals to pass to the IO Core
probe0 = Signal(1)
probe1 = Signal(2)
probe2 = Signal(3)
probe3 = Signal(4, init=13)
# Create Manta instance
manta = Manta()
manta.cores.test_core = IOCore(inputs=[probe0, probe1], outputs=[probe2, probe3])
# Create Temporary File
tf = tempfile.NamedTemporaryFile(delete=False)
tf.close()
# Export Manta configuration
manta.export_config(tf.name)
# Parse the exported YAML
with open(tf.name, "r") as f:
data = yaml.safe_load(f)
# Verify that exported YAML matches configuration
expected = {
"cores": {
"test_core": {
"type": "io",
"inputs": {"probe0": 1, "probe1": 2},
"outputs": {
"probe2": {"width": 3, "initial_value": 0},
"probe3": {"width": 4, "initial_value": 13},
},
}
}
}
if data != expected:
raise ValueError("Exported YAML does not match configuration!")
def test_memory_core_dump():
# Create Manta instance
manta = Manta()
manta.cores.test_core = MemoryCore(
mode="bidirectional",
width=32,
depth=1024,
)
# Create Temporary File
tf = tempfile.NamedTemporaryFile(delete=False)
tf.close()
# Export Manta configuration
manta.export_config(tf.name)
# Parse the exported YAML
with open(tf.name, "r") as f:
data = yaml.safe_load(f)
# Verify that exported YAML matches configuration
expected = {
"cores": {
"test_core": {
"type": "memory",
"mode": "bidirectional",
"width": 32,
"depth": 1024,
}
}
}
if data != expected:
raise ValueError("Exported YAML does not match configuration!")
def test_logic_analyzer_core_dump():
# Create some dummy signals to pass to the Logic Analyzer
probe0 = Signal(1)
probe1 = Signal(2)
probe2 = Signal(3)
# Create Manta instance
manta = Manta()
manta.cores.test_core = LogicAnalyzerCore(
sample_depth=2048, probes=[probe0, probe1, probe2]
)
# Create Temporary File
tf = tempfile.NamedTemporaryFile(delete=False)
tf.close()
# Export Manta configuration
manta.export_config(tf.name)
# Parse the exported YAML
with open(tf.name, "r") as f:
data = yaml.safe_load(f)
# Verify that exported YAML matches configuration
expected = {
"cores": {
"test_core": {
"type": "logic_analyzer",
"sample_depth": 2048,
"trigger_location": 1024,
"probes": {"probe0": 1, "probe1": 2, "probe2": 3},
"triggers": [],
}
}
}
if data != expected:
raise ValueError("Exported YAML does not match configuration!")
def test_uart_interface_dump():
manta = Manta()
manta.interface = UARTInterface(
port="/dev/ttyUSB0", baudrate=115200, clock_freq=100e6
)
# Create Temporary File
tf = tempfile.NamedTemporaryFile(delete=False)
tf.close()
# Export Manta configuration
manta.export_config(tf.name)
# Parse the exported YAML
with open(tf.name, "r") as f:
data = yaml.safe_load(f)
# Verify that exported YAML matches configuration
expected = {
"uart": {
"port": "/dev/ttyUSB0",
"baudrate": 115200,
# Be careful with the float comparison here, copy-pasting from the
# exported YAML seems to have the best results. Otherwise this test
# will fail when it shouldn't.
"clock_freq": 100000000.0,
"chunk_size": 256,
}
}
if data != expected:
raise ValueError("Exported YAML does not match configuration!")
def test_ethernet_interface_dump():
manta = Manta()
manta.interface = EthernetInterface(
fpga_ip_addr="192.168.0.101",
host_ip_addr="192.168.0.100",
udp_port=2000,
phy="LiteEthPHYRMII",
clk_freq=50e6,
refclk_freq=50e6,
vendor="xilinx",
toolchain="vivado",
)
# Create Temporary File
tf = tempfile.NamedTemporaryFile(delete=False)
tf.close()
# Export Manta configuration
manta.export_config(tf.name)
# Parse the exported YAML
with open(tf.name, "r") as f:
data = yaml.safe_load(f)
# Verify that exported YAML matches configuration
expected = {
"ethernet": {
"phy": "LiteEthPHYRMII",
"vendor": "xilinx",
"toolchain": "vivado",
# Be careful with the float comparison here, copy-pasting from the
# exported YAML seems to have the best results. Otherwise this test
# will fail when it shouldn't.
"clk_freq": 50000000.0,
"refclk_freq": 50000000.0,
"fpga_ip_addr": "192.168.0.101",
"host_ip_addr": "192.168.0.100",
"udp_port": 2000,
}
}
if data != expected:
raise ValueError("Exported YAML does not match configuration!")