build.res: use ConstraintError iff a constraint invariant is violated.

In particular don't use it for type errors.
This commit is contained in:
whitequark 2019-06-04 10:23:27 +00:00
parent 51c03ca391
commit 4310254103
3 changed files with 8 additions and 7 deletions

View file

@ -1,2 +1,3 @@
from .dsl import Pins, DiffPairs, Subsignal, Resource, Connector from .dsl import Pins, DiffPairs, Subsignal, Resource, Connector
from .res import ConstraintError
from .plat import Platform, TemplatedPlatform from .plat import Platform, TemplatedPlatform

View file

@ -56,7 +56,7 @@ class ConstraintManager:
def add_clock(self, name, number, frequency): def add_clock(self, name, number, frequency):
resource = self.lookup(name, number) resource = self.lookup(name, number)
if isinstance(resource.io[0], Subsignal): if isinstance(resource.io[0], Subsignal):
raise ConstraintError("Cannot constrain frequency of resource {}#{} because it has " raise TypeError("Cannot constrain frequency of resource {}#{} because it has "
"subsignals" "subsignals"
.format(resource.name, resource.number, frequency)) .format(resource.name, resource.number, frequency))
if (resource.name, resource.number) in self.clocks: if (resource.name, resource.number) in self.clocks:
@ -68,7 +68,7 @@ class ConstraintManager:
def lookup(self, name, number=0): def lookup(self, name, number=0):
if (name, number) not in self.resources: if (name, number) not in self.resources:
raise NameError("Resource {}#{} does not exist" raise ConstraintError("Resource {}#{} does not exist"
.format(name, number)) .format(name, number))
return self.resources[name, number] return self.resources[name, number]

View file

@ -192,12 +192,12 @@ class ConstraintManagerTestCase(FHDLTestCase):
self.cm.add_connectors([Connector("pmod", 0, "1 2")]) self.cm.add_connectors([Connector("pmod", 0, "1 2")])
def test_wrong_lookup(self): def test_wrong_lookup(self):
with self.assertRaises(NameError, with self.assertRaises(ConstraintError,
msg="Resource user_led#1 does not exist"): msg="Resource user_led#1 does not exist"):
r = self.cm.lookup("user_led", 1) r = self.cm.lookup("user_led", 1)
def test_wrong_frequency_subsignals(self): def test_wrong_frequency_subsignals(self):
with self.assertRaises(ConstraintError, with self.assertRaises(TypeError,
msg="Cannot constrain frequency of resource i2c#0 because " msg="Cannot constrain frequency of resource i2c#0 because "
"it has subsignals"): "it has subsignals"):
self.cm.add_clock("i2c", 0, 10e6) self.cm.add_clock("i2c", 0, 10e6)