Livt packages

Livt.Bus

Version 2.0.1

Configurable Avalon, AXI4-Lite, and Wishbone memory-mapped masters, interfaces, bridges, and test components.

Published files (67)

tests/Axi4LiteTestMasterTest.lvt

namespace Livt.Bus.Tests

using Livt.Bus.Axi4Lite
using Livt.Bus.Axi4Lite.Testing

@Test
component Axi4LiteTestMasterTest
{
	master: Axi4LiteTestMaster32
	slave: Axi4LiteTestSlave32

	new()
	{
		this.master = new Axi4LiteTestMaster32()
		this.slave = new Axi4LiteTestSlave32(this.master)
	}

	@Test
	fn TestAxi4LiteTransactions()
	{
		slave.Clear()
		var timeoutTicks = this.context.TicksFor(2us)
		master.SetTimeoutTicks(timeoutTicks)

		slave.ConfigureDelays(0, 3, 2, 1, 2)
		master.Write32(0x00000004 as uint, 0x12345678 as uint)
		assert master.Read32(0x00000004 as uint) == (0x12345678 as uint)
		master.Verify32(0x00000004 as uint, 0x12345678 as uint)

		slave.ConfigureDelays(3, 0, 1, 2, 1)
		master.Write32(0x00000008 as uint, 0xA5A55A5A as uint)
		master.VerifyMasked32(0x00000008 as uint, 0x00005A00 as uint, 0x0000FF00 as uint)

		slave.ConfigureDelays(0, 0, 0, 0, 0)
		slave.ConfigureResponses(0b00, 0b00)
		master.Write32(0x0000000C as uint, 0x11223344 as uint)
		master.WriteMasked32(0x0000000C as uint, 0xAABBCCDD as uint, 0b0101)
		assert master.Read32(0x0000000C as uint) == (0x11BB33DD as uint)
		master.Write8(0x0000000D as uint, 0xEE as byte)
		master.Verify8(0x0000000D as uint, 0xEE as byte)
		assert master.Read32(0x0000000C as uint) == (0x11BBEEDD as uint)
		master.Write16(0x0000000E as uint, 0xCAFE as Logic[16])
		master.Verify16(0x0000000E as uint, 0xCAFE as Logic[16])
		assert master.Read8(0x0000000D as uint) == (0xEE as byte)
		assert master.Read16(0x0000000E as uint) == (0xCAFE as Logic[16])
		assert master.Read32(0x0000000C as uint) == (0xCAFEEEDD as uint)

		slave.ConfigureResponses(0b10, 0b11)
		var writeCompleted = master.TryWrite32(0x00000010 as uint, 0x01020304 as uint, 0b1111)
		assert writeCompleted == true
		assert master.LastResponse() == 0b10

		var readCompleted = master.TryRead32(0x00000010 as uint)
		assert readCompleted == true
		assert master.LastReadValue() == (0x01020304 as uint)
		assert master.LastResponse() == 0b11
		assert master.awvalid == 0b0
		assert master.wvalid == 0b0
		assert master.bready == 0b0
		assert master.arvalid == 0b0
		assert master.rready == 0b0

		master.SetTimeoutTicks(2 as uint)
		slave.ConfigureResponses(0b00, 0b00)
		slave.ConfigureDelays(20, 20, 0, 0, 0)

		var completed = master.TryWrite32(0x00000014 as uint, 0x55AA55AA as uint, 0b1111)
		assert completed == false
		assert master.LastTimedOut() == true

		slave.ConfigureDelays(0, 0, 0, 0, 0)
		master.SetTimeoutTicks(10 as uint)
		assert master.TryRead32(0x00000014 as uint) == true
		assert master.LastReadValue() == (0x55AA55AA as uint)
		assert master.LastTimedOut() == false
	}
}