Files
reflectometer_fpga_project/rtl/controller/tests/test_controller.py

62 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotbext.axi import AxiLiteBus, AxiLiteMaster
# register indexes from axi4l_reg_map_controller_pkg.sv
REG_CONTROL = 0
REG_DAC_WIDTH = 2
REG_DAC_PERIOD = 3
REG_DAC_PULSE_NUM = 4
REG_DAC_PULSE_HEIGHT = 5
REG_ADC_PERIOD = 6
REG_WINDOW_SIZE = 7
def reg_addr(reg_index: int) -> int:
# AXI-Lite usually uses byte addresses for 32-bit regs
return reg_index * 4
class TB:
def __init__(self, dut):
self.dut = dut
cocotb.start_soon(Clock(dut.ctrl_clk, 10, units="ns").start())
self.axil = AxiLiteMaster(
AxiLiteBus.from_prefix(dut, "s_axil"),
dut.ctrl_clk,
dut.rst,
)
async def reset(self):
self.dut.rst.value = 1
for _ in range(5):
await RisingEdge(self.dut.ctrl_clk)
self.dut.rst.value = 0
for _ in range(5):
await RisingEdge(self.dut.ctrl_clk)
@cocotb.test()
async def simple_axil_write(dut):
tb = TB(dut)
await tb.reset()
# Простая запись в RW-регистр REG_DAC_WIDTH.
await tb.axil.write(reg_addr(REG_DAC_WIDTH), (0x0000_0123).to_bytes(4, "little"))
# Не обязательно, но удобно проверить, что запись прошла через AXI-Lite.
resp = await tb.axil.read(reg_addr(REG_DAC_WIDTH), 4)
value = int.from_bytes(bytes(resp.data), "little")
assert value == 0x0000_0123
# Пример W1S-записи в control: bit 3 = cfg_bus_valid pulse.
# Дальше уже можно проверять твою логику контроллера.
await tb.axil.write(reg_addr(REG_CONTROL), (1 << 3).to_bytes(4, "little"))
await RisingEdge(dut.ctrl_clk)