Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/nmigen
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 278b624c66ad
Choose a base ref
...
head repository: m-labs/nmigen
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 6ee760e83fc8
Choose a head ref
  • 1 commit
  • 2 files changed
  • 1 contributor

Commits on Jul 10, 2019

  1. build.dsl: Add optional name_suffix to Resource.family.

    cr1901 authored and whitequark committed Jul 10, 2019
    Copy the full SHA
    6ee760e View commit details
Showing with 14 additions and 3 deletions.
  1. +8 −3 nmigen/build/dsl.py
  2. +6 −0 nmigen/test/test_build_dsl.py
11 changes: 8 additions & 3 deletions nmigen/build/dsl.py
Original file line number Diff line number Diff line change
@@ -182,18 +182,23 @@ def __repr__(self):

class Resource(Subsignal):
@classmethod
def family(cls, name_or_number, number=None, *, ios, default_name):
def family(cls, name_or_number, number=None, *, ios, default_name, name_suffix=""):
# This constructor accepts two different forms:
# 1. Number-only form:
# Resource.family(0, default_name="name", ios=[Pins("A0 A1")])
# 2. Name-and-number (name override) form:
# Resource.family("override", 0, default_name="name", ios=...)
# This makes it easier to build abstractions for resources, e.g. an SPIResource abstraction
# could simply delegate to `Resource.family(*args, default_name="spi", ios=ios)`.
# The name_suffix argument is meant to support creating resources with
# similar names, such as spi_flash, spi_flash_2x, etc.
if name_suffix: # Only add "_" if we actually have a suffix.
name_suffix = "_" + name_suffix

if number is None: # name_or_number is number
return cls(default_name, name_or_number, *ios)
return cls(default_name + name_suffix, name_or_number, *ios)
else: # name_or_number is name
return cls(name_or_number, number, *ios)
return cls(name_or_number + name_suffix, number, *ios)

def __init__(self, name, number, *args):
super().__init__(name, *args)
6 changes: 6 additions & 0 deletions nmigen/test/test_build_dsl.py
Original file line number Diff line number Diff line change
@@ -229,10 +229,16 @@ def test_family(self):
ios = [Subsignal("clk", Pins("A0", dir="o"))]
r1 = Resource.family(0, default_name="spi", ios=ios)
r2 = Resource.family("spi_flash", 0, default_name="spi", ios=ios)
r3 = Resource.family("spi_flash", 0, default_name="spi", ios=ios, name_suffix="4x")
r4 = Resource.family(0, default_name="spi", ios=ios, name_suffix="2x")
self.assertEqual(r1.name, "spi")
self.assertEqual(r1.ios, ios)
self.assertEqual(r2.name, "spi_flash")
self.assertEqual(r2.ios, ios)
self.assertEqual(r3.name, "spi_flash_4x")
self.assertEqual(r3.ios, ios)
self.assertEqual(r4.name, "spi_2x")
self.assertEqual(r4.ios, ios)


class ConnectorTestCase(FHDLTestCase):