44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
|
# SPDX-License-Identifier: AGPL-3.0-Only
|
||
|
# Copyright (C) 2023 Sean Anderson <seanga2@gmail.com>
|
||
|
|
||
|
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
|