Livt packages
Livt.Base
Version 1.2.1
Foundational bit, array, string, conversion, formatting, and timing helpers for Livt hardware designs.
Published files (32)
tests/PeriodicTickProviderTest.lvt
namespace Livt.Base.Tests
using Livt.Timing
/**
* Exercises PeriodicTickProvider with a shared fixture instance. Each scenario establishes
* the inputs and state it needs.
*/
@Test
@Context(ClockFrequency = 100MHz)
component PeriodicTickProviderTest
{
// Shared fixture instances, signals, and observation state.
provider: PeriodicTickProvider
oneMicrosecondProvider: PeriodicTickProvider1us
oneMillisecondProvider: PeriodicTickProvider1ms
tenMillisecondProvider: PeriodicTickProvider10ms
hundredMillisecondProvider: PeriodicTickProvider100ms
oneSecondProvider: PeriodicTickProvider1s
// One-cycle output pulse when the configured interval elapses.
tick: logic
oneMicrosecondTick: logic
oneMillisecondTick: logic
tenMillisecondTick: logic
hundredMillisecondTick: logic
oneSecondTick: logic
observedTicks: uint
previousTick: logic
backToBackPulse: bool
/**
* Creates the shared fixture instances (PeriodicTickProvider, PeriodicTickProvider1us,
* PeriodicTickProvider1ms, PeriodicTickProvider10ms, PeriodicTickProvider100ms,
* PeriodicTickProvider1s). Tests initialize the state required by their scenario.
*/
new()
{
this.provider = new PeriodicTickProvider((4 as uint), this.tick)
this.oneMicrosecondProvider = new PeriodicTickProvider1us(this.oneMicrosecondTick)
this.oneMillisecondProvider = new PeriodicTickProvider1ms(this.oneMillisecondTick)
this.tenMillisecondProvider = new PeriodicTickProvider10ms(this.tenMillisecondTick)
this.hundredMillisecondProvider = new PeriodicTickProvider100ms(this.hundredMillisecondTick)
this.oneSecondProvider = new PeriodicTickProvider1s(this.oneSecondTick)
this.observedTicks = 0
this.previousTick = 0b0
this.backToBackPulse = false
}
/**
* Counts observed tick pulses and records adjacent-cycle pulses for the timing assertions.
*/
process Observe()
{
if (this.tick == 0b1) {
this.observedTicks = this.observedTicks + 1
if (this.previousTick == 0b1) {
this.backToBackPulse = true
}
}
this.previousTick = this.tick
}
/**
* Checks that the component generates periodic one cycle pulses.
*/
@Test
fn GeneratesPeriodicOneCyclePulses()
{
assert this.provider.GetPeriodTicks() == (4 as uint)
Simulation.Wait(500)
assert this.observedTicks >= (5 as uint)
assert this.backToBackPulse == false
}
/**
* Checks that the component derives common periods at100 m hz.
*/
@Test
fn DerivesCommonPeriodsAt100MHz()
{
assert this.oneMicrosecondProvider.GetPeriodTicks() == (100 as uint)
assert this.oneMillisecondProvider.GetPeriodTicks() == (100000 as uint)
assert this.tenMillisecondProvider.GetPeriodTicks() == (1000000 as uint)
assert this.hundredMillisecondProvider.GetPeriodTicks() == (10000000 as uint)
assert this.oneSecondProvider.GetPeriodTicks() == (100000000 as uint)
}
}
/**
* Exercises PeriodicTickProvider50MHz with a shared fixture instance. Each scenario
* establishes the inputs and state it needs.
*/
@Test
@Context(ClockFrequency = 50MHz)
component PeriodicTickProvider50MHzTest
{
// Shared fixture instances, signals, and observation state.
oneMicrosecondProvider: PeriodicTickProvider1us
oneMillisecondProvider: PeriodicTickProvider1ms
oneSecondProvider: PeriodicTickProvider1s
oneMicrosecondTick: logic
oneMillisecondTick: logic
oneSecondTick: logic
/**
* Creates the shared fixture instances (PeriodicTickProvider1us, PeriodicTickProvider1ms,
* PeriodicTickProvider1s). Tests initialize the state required by their scenario.
*/
new()
{
this.oneMicrosecondProvider = new PeriodicTickProvider1us(this.oneMicrosecondTick)
this.oneMillisecondProvider = new PeriodicTickProvider1ms(this.oneMillisecondTick)
this.oneSecondProvider = new PeriodicTickProvider1s(this.oneSecondTick)
}
/**
* Checks that the component derives periods from assigned context.
*/
@Test
fn DerivesPeriodsFromAssignedContext()
{
assert this.oneMicrosecondProvider.GetPeriodTicks() == (50 as uint)
assert this.oneMillisecondProvider.GetPeriodTicks() == (50000 as uint)
assert this.oneSecondProvider.GetPeriodTicks() == (50000000 as uint)
}
}