# SPDX-License-Identifier: AGPL-3.0-Only # Copyright (C) 2023 Sean Anderson import cocotb from cocotb.binary import BinaryValue from cocotb.clock import Clock from cocotb.triggers import ClockCycles, FallingEdge, Timer from .util import BIT @cocotb.test(timeout_time=1, timeout_unit='us') async def test_elastic(led): led.clk.value = BinaryValue('Z') led.triggers.value = 0 led.test_mode.value = 1 await Timer(1) await cocotb.start(Clock(led.clk, 2, units='ns').start()) await FallingEdge(led.clk) assert not led.out.value led.triggers.value = 1 await FallingEdge(led.clk) assert not led.out.value led.triggers.value = 0 while not led.out.value: await FallingEdge(led.clk) assert led.out.value == 1 led.triggers.value = 1 await FallingEdge(led.clk) led.triggers.value = 0 await ClockCycles(led.clk, 16, False) led.triggers.value = 2 await FallingEdge(led.clk) assert not led.out.value while not led.out.value: await FallingEdge(led.clk) assert led.out.value == 2