212 lines
5.5 KiB
Python
212 lines
5.5 KiB
Python
import warnings
|
|
|
|
from amaranth.hdl import *
|
|
from amaranth.sim import *
|
|
from amaranth.lib.io import *
|
|
from amaranth.lib.wiring import *
|
|
|
|
from .utils import *
|
|
|
|
|
|
class PinSignatureTestCase(FHDLTestCase):
|
|
def assertSignatureEqual(self, signature, expected):
|
|
self.assertEqual(signature.members, Signature(expected).members)
|
|
|
|
|
|
class PinSignatureCombTestCase(PinSignatureTestCase):
|
|
def test_signature_i(self):
|
|
sig_1 = Pin.Signature(1, dir="i")
|
|
self.assertSignatureEqual(sig_1, {
|
|
"i": In(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="i")
|
|
self.assertSignatureEqual(sig_2, {
|
|
"i": In(2),
|
|
})
|
|
|
|
def test_signature_o(self):
|
|
sig_1 = Pin.Signature(1, dir="o")
|
|
self.assertSignatureEqual(sig_1, {
|
|
"o": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="o")
|
|
self.assertSignatureEqual(sig_2, {
|
|
"o": Out(2),
|
|
})
|
|
|
|
def test_signature_oe(self):
|
|
sig_1 = Pin.Signature(1, dir="oe")
|
|
self.assertSignatureEqual(sig_1, {
|
|
"o": Out(1),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="oe")
|
|
self.assertSignatureEqual(sig_2, {
|
|
"o": Out(2),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
def test_signature_io(self):
|
|
sig_1 = Pin.Signature(1, dir="io")
|
|
self.assertSignatureEqual(sig_1, {
|
|
"i": In(1),
|
|
"o": Out(1),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="io")
|
|
self.assertSignatureEqual(sig_2, {
|
|
"i": In(2),
|
|
"o": Out(2),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
|
|
class PinSignatureSDRTestCase(PinSignatureTestCase):
|
|
def test_signature_i(self):
|
|
sig_1 = Pin.Signature(1, dir="i", xdr=1)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"i_clk": Out(1),
|
|
"i": In(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="i", xdr=1)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"i_clk": Out(1),
|
|
"i": In(2),
|
|
})
|
|
|
|
def test_signature_o(self):
|
|
sig_1 = Pin.Signature(1, dir="o", xdr=1)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"o_clk": Out(1),
|
|
"o": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="o", xdr=1)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"o_clk": Out(1),
|
|
"o": Out(2),
|
|
})
|
|
|
|
def test_signature_oe(self):
|
|
sig_1 = Pin.Signature(1, dir="oe", xdr=1)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"o_clk": Out(1),
|
|
"o": Out(1),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="oe", xdr=1)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"o_clk": Out(1),
|
|
"o": Out(2),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
def test_signature_io(self):
|
|
sig_1 = Pin.Signature(1, dir="io", xdr=1)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"i_clk": Out(1),
|
|
"i": In(1),
|
|
"o_clk": Out(1),
|
|
"o": Out(1),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="io", xdr=1)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"i_clk": Out(1),
|
|
"i": In(2),
|
|
"o_clk": Out(1),
|
|
"o": Out(2),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
|
|
class PinSignatureDDRTestCase(PinSignatureTestCase):
|
|
def test_signature_i(self):
|
|
sig_1 = Pin.Signature(1, dir="i", xdr=2)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"i_clk": Out(1),
|
|
"i0": In(1),
|
|
"i1": In(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="i", xdr=2)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"i_clk": Out(1),
|
|
"i0": In(2),
|
|
"i1": In(2),
|
|
})
|
|
|
|
def test_signature_o(self):
|
|
sig_1 = Pin.Signature(1, dir="o", xdr=2)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"o_clk": Out(1),
|
|
"o0": Out(1),
|
|
"o1": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="o", xdr=2)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"o_clk": Out(1),
|
|
"o0": Out(2),
|
|
"o1": Out(2),
|
|
})
|
|
|
|
def test_signature_oe(self):
|
|
sig_1 = Pin.Signature(1, dir="oe", xdr=2)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"o_clk": Out(1),
|
|
"o0": Out(1),
|
|
"o1": Out(1),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="oe", xdr=2)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"o_clk": Out(1),
|
|
"o0": Out(2),
|
|
"o1": Out(2),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
def test_signature_io(self):
|
|
sig_1 = Pin.Signature(1, dir="io", xdr=2)
|
|
self.assertSignatureEqual(sig_1, {
|
|
"i_clk": Out(1),
|
|
"i0": In(1),
|
|
"i1": In(1),
|
|
"o_clk": Out(1),
|
|
"o0": Out(1),
|
|
"o1": Out(1),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
sig_2 = Pin.Signature(2, dir="io", xdr=2)
|
|
self.assertSignatureEqual(sig_2, {
|
|
"i_clk": Out(1),
|
|
"i0": In(2),
|
|
"i1": In(2),
|
|
"o_clk": Out(1),
|
|
"o0": Out(2),
|
|
"o1": Out(2),
|
|
"oe": Out(1),
|
|
})
|
|
|
|
|
|
class PinTestCase(FHDLTestCase):
|
|
def test_attributes(self):
|
|
pin = Pin(2, dir="io", xdr=2)
|
|
self.assertEqual(pin.width, 2)
|
|
self.assertEqual(pin.dir, "io")
|
|
self.assertEqual(pin.xdr, 2)
|
|
self.assertEqual(pin.signature.width, 2)
|
|
self.assertEqual(pin.signature.dir, "io")
|
|
self.assertEqual(pin.signature.xdr, 2)
|
|
|