diff --git a/lambdalib/veclib/__init__.py b/lambdalib/veclib/__init__.py index 1cf129a..73e17e7 100644 --- a/lambdalib/veclib/__init__.py +++ b/lambdalib/veclib/__init__.py @@ -3,14 +3,15 @@ from .la_vbuf.la_vbuf import Vbuf from .la_vinv.la_vinv import Vinv from .la_vmux.la_vmux import Vmux -from .la_vmux2.la_vmux2 import Vmux2 from .la_vmux2b.la_vmux2b import Vmux2b +from .la_vmux2.la_vmux2 import Vmux2 from .la_vmux3.la_vmux3 import Vmux3 from .la_vmux4.la_vmux4 import Vmux4 from .la_vmux5.la_vmux5 import Vmux5 from .la_vmux6.la_vmux6 import Vmux6 from .la_vmux7.la_vmux7 import Vmux7 from .la_vmux8.la_vmux8 import Vmux8 +from .la_vpriority.la_vpriority import Vpriority __all__ = ['Vbuf', 'Vinv', @@ -22,7 +23,9 @@ 'Vmux5', 'Vmux6', 'Vmux7', - 'Vmux8'] + 'Vmux8', + 'Vpriority' + ] class STDLib(Design): @@ -41,3 +44,4 @@ def __init__(self): self.add_depfileset(Vmux6(), depfileset="rtl") self.add_depfileset(Vmux7(), depfileset="rtl") self.add_depfileset(Vmux8(), depfileset="rtl") + self.add_depfileset(Vpriority(), depfileset="rtl") diff --git a/lambdalib/veclib/la_vpriority/la_vpriority.py b/lambdalib/veclib/la_vpriority/la_vpriority.py new file mode 100644 index 0000000..086b54f --- /dev/null +++ b/lambdalib/veclib/la_vpriority/la_vpriority.py @@ -0,0 +1,12 @@ +from lambdalib.lambdalib import Lambda + + +class Vpriority(Lambda): + def __init__(self): + name = 'la_vpriority' + super().__init__(name, __file__) + + +if __name__ == "__main__": + d = Vpriority() + d.write_fileset(f"{d.name}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vpriority/rtl/la_vpriority.v b/lambdalib/veclib/la_vpriority/rtl/la_vpriority.v new file mode 100644 index 0000000..ef57e0e --- /dev/null +++ b/lambdalib/veclib/la_vpriority/rtl/la_vpriority.v @@ -0,0 +1,27 @@ +//############################################################################# +//# Function: N-Input Priority Encoder # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################# + +module la_vpriority + #(parameter N = 4 // number of inputs + ) + (input [N-1:0] requests, // request vector ([0] is highest priority) + output [N-1:0] grants // outgoing grant vector + ); + + wire [N-1:0] mask; + genvar j; + + // priority mask + assign mask[0] = 1'b0; + for (j=N-1; j>=1; j=j-1) + begin : ipri + assign mask[j] = |requests[j-1:0]; + end + + // priority grant circuit + assign grants[N-1:0] = requests[N-1:0] & ~mask[N-1:0]; + +endmodule diff --git a/pyproject.toml b/pyproject.toml index 97d4901..e08209c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,15 +1,13 @@ [build-system] requires = [ - "setuptools >= 61.2", - "setuptools_scm[toml] >= 6.2" + "setuptools >= 64", + "setuptools_scm[toml] >= 8" ] build-backend = "setuptools.build_meta" [tool.setuptools] include-package-data = true -packages = [ - "lambdalib" -] +packages = ["lambdalib"] [project] name = "lambdalib" @@ -17,7 +15,7 @@ authors = [{name = "Zero ASIC"}] description = "Standardized ASIC design libraries" readme = "README.md" urls = {Homepage = "https://github.com/siliconcompiler/lambdalib"} -requires-python = ">= 3.8" +requires-python = ">= 3.9" license = {file = "LICENSE"} dependencies = [ "siliconcompiler >= 0.34.3",