diff --git a/.flake8 b/.flake8 index bfc6982..78fe9f6 100644 --- a/.flake8 +++ b/.flake8 @@ -1,4 +1,6 @@ [flake8] max-line-length = 100 extend-exclude = build,.venv -extend-ignore = +extend-ignore = +per-file-ignores = + lambdalib/__init__.py:F401 diff --git a/.gitignore b/.gitignore index 9dc288d..1980d3d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,19 @@ - #Editor files *~ -*~ + +.vscod + +#Env +venv/ +.venv + + +# Sim *.log -tmp* -a.out *.vcd -.venv/ +a.out +*.vvp +*.f # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/README.md b/README.md index 9985e42..4bb674a 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,66 @@ # Lambdalib Introduction -Lambdalib is a modular hardware abstraction library which decouples design from the underlying manufacturing target. Lambdalib defines a set of generic functions that get resolved during the target technology mapping stage. +Lambdalib is a modular hardware abstraction library which decouples design from the manufacturing target. The project was inspired by the `Lambda` concept invented during the [1978 VLSI revolution by Mead and Conway](https://en.wikipedia.org/wiki/Mead%E2%80%93Conway_VLSI_chip_design_revolution). -Lambdalib includes the following hardware categories: +The original single value Lambda approach no longer applies to modern CMOS manufacturing, so Lambdalib has raised the abstraction level to the cell/block level to enable automated porting between compilation targets. + +Lambdalib abstracts away technology specific design modules that cannot be cleanly expressed in technology agnostic RTL Verilog code (eg. synchronizers, analog circuits, io cells, etc.) + +The table below summarizes the categories of cells available. | Category | Description | |-------------------------------------|---------------------------------------| |[stdlib](lambdalib/stdlib/rtl) | Standard cells (inv, nand, ff, ...) -|[auxlib](lambdalib/auxlib/rtl) | Aux cells can consist of multiple standard cells or physical only cells +|[auxlib](lambdalib/auxlib/rtl) | Special cells (antenna, decap, clkmux,...) |[ramlib](lambdalib/ramlib/rtl) | Memory (single port, dual port, fifo, ...) |[iolib](lambdalib/iolib) | IO cells (bidir, vdd, clamp,...) |[padring](lambdalib/padring) | Padring generator -|[vectorlib](lambdalib/vectorlib/rtl) | Vectorized library (mux, isolation) +|[veclib](lambdalib/veclib/rtl) | Vectorized datapath cells (mux, buf,..) |[fpgalib](lambdalib/fpgalib/rtl) | FPGA cells (lut4, ble, clb) The [Lambdapdk](https://github.com/siliconcompiler/lambdapdk) repository demonstrates implementation of the Lambdalib interfaces across a number of open source process technologies. Lambdalib has been successfully used in multiple tapeouts using [SiliconCompiler](https://github.com/siliconcompiler/siliconcompiler). +# Installation + +```bash +git clone https://github.com/zeroasiccorp/lambdalib +cd lambdalib +pip install --upgrade pip +pip install -e . +``` + +# Examples + +## Instantiating a Lambdalib module + +This example shows how to instantiate the Padring module in a top level chip design. +We could have chosen any module to instantiate (inverter, flip flop, dual port ram...). + + +```python +``` + +To convert the design into a gate level netlist using yosys, just run python script +in the examples folder. A file `chip.vg` will be written to disk in the run directory. + +```bash +$ python examples/padring/make.py +``` + +## Using SiliconCompiler to target a technology + +```python +``` + + +# Project Methodology + +- One verilog module per RTL file +- One Python module per reusable module +- Class names are RTL module names with "la_" removed and capitalized + # License [MIT](LICENSE) diff --git a/examples/chip/chip.py b/examples/chip/chip.py new file mode 100644 index 0000000..240569d --- /dev/null +++ b/examples/chip/chip.py @@ -0,0 +1,34 @@ +import lambdalib as ll +from siliconcompiler import DesignSchema + +class Chip(DesignSchema): + def __init__(self): + + name = 'chip' + super().__init__(name) + + fileset = 'rtl' + dataroot = f'{name}' + topmodule = name + + sources = [f'rtl/{name}.v'] + + self.set_dataroot(dataroot, __file__) + self.set_topmodule(topmodule, fileset) + + for item in sources: + self.add_file(item, fileset, dataroot=dataroot) + + self.add_idir('rtl', fileset, dataroot=dataroot) + + # dependencies + for dep in [ll.padring.Padring]: + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + +if __name__ == "__main__": + d = Chip() + d.write_fileset(f"{d.name()}.f", fileset="rtl") + cmd = ['yosys', '-f', script] + return subprocess.run(cmd, + stderr=subprocess.STDOUT, + check=True) diff --git a/examples/chip/rtl/chip.v b/examples/chip/rtl/chip.v new file mode 100644 index 0000000..a3de631 --- /dev/null +++ b/examples/chip/rtl/chip.v @@ -0,0 +1,115 @@ +module chip #(parameter NO_NPINS = 16, + parameter EA_NPINS = 16, + parameter WE_NPINS = 16, + parameter SO_NPINS = 16) + ( + input VSS, + input VDD, + input NVCC, + input EVCC, + input WVCC, + input SVCC, + inout [NO_NPINS-1:0] NIO, + inout [EA_NPINS-1:0] EIO, + inout [WE_NPINS-1:0] WIO, + inout [SO_NPINS-1:0] SIO + ); + +`include "chip_iomap.vh" + + wire [NO_NSECTIONS*RINGW-1:0] no_ioring; + wire [EA_NSECTIONS*RINGW-1:0] ea_ioring; + wire [WE_NSECTIONS*RINGW-1:0] we_ioring; + wire [SO_NSECTIONS*RINGW-1:0] so_ioring; + + wire [NO_NPINS-1:0] no_rxd; + wire [EA_NPINS-1:0] ea_rxd; + wire [WE_NPINS-1:0] we_rxd; + wire [SO_NPINS-1:0] so_rxd; + + la_padring #(// padring ctrl widths + .RINGW(RINGW), + .CFGW(CFGW), + //north + .NO_NPINS(NO_NPINS), + .NO_NCELLS(NO_NCELLS), + .NO_NSECTIONS(NO_NSECTIONS), + .NO_CELLMAP(NO_CELLMAP), + //east + .EA_NPINS(EA_NPINS), + .EA_NCELLS(EA_NCELLS), + .EA_NSECTIONS(EA_NSECTIONS), + .EA_CELLMAP(EA_CELLMAP), + //south + .SO_NPINS(SO_NPINS), + .SO_NCELLS(SO_NCELLS), + .SO_NSECTIONS(SO_NSECTIONS), + .SO_CELLMAP(SO_CELLMAP), + //west + .WE_NPINS(WE_NPINS), + .WE_NCELLS(WE_NCELLS), + .WE_NSECTIONS(WE_NSECTIONS), + .WE_CELLMAP(WE_CELLMAP)) + la_padring(// Outputs + .no_zp (no_rxd[NO_NPINS-1:0]), + .no_zn (), + .ea_zp (ea_rxd[EA_NPINS-1:0]), + .ea_zn (), + .so_zp (so_rxd[SO_NPINS-1:0]), + .so_zn (), + .we_zp (we_rxd[WE_NPINS-1:0]), + .we_zn (), + // Inouts + .vss (VSS), + .no_pad (NIO), + .no_aio (), + .no_vdd (VDD), + .no_vddio (NVCC), + .no_vssio (VSS), + .no_ioring (no_ioring[NO_NSECTIONS*RINGW-1:0]), + .ea_pad (EIO), + .ea_aio (), + .ea_vdd (VDD), + .ea_vddio (EVCC), + .ea_vssio (VSS), + .ea_ioring (ea_ioring[EA_NSECTIONS*RINGW-1:0]), + .so_pad (SIO), + .so_aio (), + .so_vdd (VDD), + .so_vddio (SVCC), + .so_vssio (VSS), + .so_ioring (so_ioring[SO_NSECTIONS*RINGW-1:0]), + .we_pad (WIO), + .we_aio (), + .we_vdd (VDD), + .we_vddio (WVCC), + .we_vssio (VSS), + .we_ioring (we_ioring[WE_NSECTIONS*RINGW-1:0]), + // Inputs + .no_a ({NO_NPINS{1'b0}}), + .no_ie ({NO_NPINS{1'b1}}), + .no_oe ({NO_NPINS{1'b0}}), + .no_pe ({NO_NPINS{1'b0}}), + .no_ps ({NO_NPINS{1'b0}}), + .no_cfg ({(NO_NPINS*CFGW){1'b0}}), + .ea_a ({EA_NPINS{1'b0}}), + .ea_ie ({EA_NPINS{1'b1}}), + .ea_oe ({EA_NPINS{1'b0}}), + .ea_pe ({EA_NPINS{1'b0}}), + .ea_ps ({EA_NPINS{1'b0}}), + .ea_cfg ({(EA_NPINS*CFGW){1'b0}}), + .we_a ({WE_NPINS{1'b0}}), + .we_ie ({WE_NPINS{1'b1}}), + .we_oe ({WE_NPINS{1'b0}}), + .we_pe ({WE_NPINS{1'b0}}), + .we_ps ({WE_NPINS{1'b0}}), + .we_cfg ({(WE_NPINS*CFGW){1'b0}}), + .so_a ({SO_NPINS{1'b0}}), + .so_ie ({SO_NPINS{1'b1}}), + .so_oe ({SO_NPINS{1'b0}}), + .so_pe ({SO_NPINS{1'b0}}), + .so_ps ({SO_NPINS{1'b0}}), + .so_cfg ({(SO_NPINS*CFGW){1'b0}}) + ); + +endmodule diff --git a/examples/chip/rtl/chip_iomap.vh b/examples/chip/rtl/chip_iomap.vh new file mode 100644 index 0000000..afb3b23 --- /dev/null +++ b/examples/chip/rtl/chip_iomap.vh @@ -0,0 +1,108 @@ +//######################################################################## +// Common Padring Definitions +//######################################################################## + +`include "la_padring.vh" + +//######################################################################## +// Total number of IO cells in one padring side (including power) +//######################################################################## + +// 16 bidirs +// 12 power ground +// 2 cut cells +// 1 poc + +localparam NCELLS = 31; + +//######################################################################## +// Power sections per side +//######################################################################## + +localparam NSECTIONS = 1; + +//######################################################################## +// Tech specific iolib parameters +//######################################################################## + +// total width of config bus (drive strength, schmitt, ...) +localparam CFGW = 6; + +// width of bus that goes around ioring +localparam RINGW = 6; + +//######################################################################## +// CELLMAP[NCELLS*40-1:0] = {PROP, SECTION, CELL, CPIN#, PIN#} +//######################################################################## + +/* The CELLMAP vector specifies the type, order, power rail, and pin + * connection for each cell placed in a side of the io padring. + * + * CELLMAP is used by la_padside which iterates from 0 to NCELLS-1 to + * instantiate padring cells. The index for that for loop is used + * to find the power section, pin number, and cell type in the + * static definition below. The indices of the cells are specified from + * left to right or top to bottom. The CELLMAP[0] is the first cell + * placed. + * + * All enumerationsa arer defined in the la_iopadring.vh + * + * [7:0] PIN# = pin# (order 0-255) + * [15:8] COMPLEMENT PIN# = pin# (order 0-255) + * [23:16] CELL = cell type from lambdalib (0-255) + * [31:24] SECTION = power rail selector (when NSECTIONS>1) + * [39:32] PROP = cell property (optional) + * + */ + +localparam [NCELLS*40-1:0] CELLMAP = + {{NULL, NULL, LA_CUT, NULL, NULL}, + {NULL, NULL, LA_BIDIR, NULL, PIN15}, + {NULL, NULL, LA_BIDIR, NULL, PIN14}, + {NULL, NULL, LA_BIDIR, NULL, PIN13}, + {NULL, NULL, LA_BIDIR, NULL, PIN12}, + {NULL, NULL, LA_VSS, NULL, NULL}, + {NULL, NULL, LA_VDD, NULL, NULL}, + {NULL, NULL, LA_VDDIO, NULL, NULL}, + {NULL, NULL, LA_VSSIO, NULL, NULL}, + {NULL, NULL, LA_BIDIR, NULL, PIN11}, + {NULL, NULL, LA_BIDIR, NULL, PIN10}, + {NULL, NULL, LA_BIDIR, NULL, PIN9}, + {NULL, NULL, LA_BIDIR, NULL, PIN8}, + {NULL, NULL, LA_VSS, NULL, NULL}, + {NULL, NULL, LA_VDD, NULL, NULL}, + {NULL, NULL, LA_POC, NULL, NULL}, + {NULL, NULL, LA_VDDIO, NULL, NULL}, + {NULL, NULL, LA_VSSIO, NULL, NULL}, + {NULL, NULL, LA_BIDIR, NULL, PIN7}, + {NULL, NULL, LA_BIDIR, NULL, PIN6}, + {NULL, NULL, LA_BIDIR, NULL, PIN5}, + {NULL, NULL, LA_BIDIR, NULL, PIN4}, + {NULL, NULL, LA_VSS, NULL, NULL}, + {NULL, NULL, LA_VDD, NULL, NULL}, + {NULL, NULL, LA_VDDIO, NULL, NULL}, + {NULL, NULL, LA_VSSIO, NULL, NULL}, + {NULL, NULL, LA_BIDIR, NULL, PIN3}, + {NULL, NULL, LA_BIDIR, NULL, PIN2}, + {NULL, NULL, LA_BIDIR, NULL, PIN1}, + {NULL, NULL, LA_BIDIR, NULL, PIN0}, + {NULL, NULL, LA_CUT, NULL, NULL}}; + +//######################################################################## +// Symmetrical padring for simplicity (not a restriction) +//######################################################################## + +localparam NO_NCELLS = NCELLS; +localparam EA_NCELLS = NCELLS; +localparam WE_NCELLS = NCELLS; +localparam SO_NCELLS = NCELLS; + +localparam NO_NSECTIONS = NSECTIONS; +localparam EA_NSECTIONS = NSECTIONS; +localparam WE_NSECTIONS = NSECTIONS; +localparam SO_NSECTIONS = NSECTIONS; + +localparam NO_CELLMAP = CELLMAP; +localparam EA_CELLMAP = CELLMAP; +localparam WE_CELLMAP = CELLMAP; +localparam SO_CELLMAP = CELLMAP; diff --git a/examples/sram/rtl/sram.v b/examples/sram/rtl/sram.v new file mode 100644 index 0000000..f2dd810 --- /dev/null +++ b/examples/sram/rtl/sram.v @@ -0,0 +1,5 @@ +module sram(); + + // TODO: put in la_spram + +endmodule diff --git a/lambdalib/__init__.py b/lambdalib/__init__.py index 87ef3d1..d159d8c 100644 --- a/lambdalib/__init__.py +++ b/lambdalib/__init__.py @@ -1,159 +1,13 @@ -from siliconcompiler import Chip -import siliconcompiler.package as sc_package -import glob -import os -import shutil - -from lambdalib import _common -from lambdalib import \ - auxlib, \ - fpgalib, \ - iolib, \ - padring, \ - ramlib, \ - stdlib, \ - vectorlib - - -__version__ = _common._version - - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib library setup script - ''' - - return [ - auxlib.setup(), - fpgalib.setup(), - iolib.setup(), - padring.setup(), - ramlib.setup(), - stdlib.setup(), - vectorlib.setup() - ] - - -def __get_lambdalib_dir(la_lib): - path_assert = Chip('lambdalib') - _common.register_data_source(path_assert) - lambdalib_path = sc_package.path(path_assert, 'lambdalib') - return f'{lambdalib_path}/{la_lib}/rtl' - - -def check(outputpath, la_lib='stdlib'): - cells_dir = __get_lambdalib_dir(la_lib) - - lambda_cells = set() - for cell in glob.glob(f'{cells_dir}/la_*.v'): - lambda_cells.add(os.path.basename(cell)) - - lib_cells = set() - for cell in glob.glob(f'{outputpath}/la_*.v'): - lib_cells.add(os.path.basename(cell)) - - if lambda_cells == lib_cells: - return True - - missing_cells = lambda_cells - lib_cells - extra_cells = lib_cells - lambda_cells - - if missing_cells: - for cell in missing_cells: - print(f'Missing: {cell}') - if extra_cells: - for cell in extra_cells: - print(f'Excess cell: {cell}') - - if la_lib == 'auxlib' and not extra_cells: - # allow auxlib to have missing cells - return True - - return False - - -def copy(outputpath, la_lib='stdlib', exclude=None): - cells_dir = __get_lambdalib_dir(la_lib) - - if not exclude: - exclude = [] - - os.makedirs(outputpath, exist_ok=True) - - # Generate list of cells to produce - for cell in glob.glob(f'{cells_dir}/la_*.v'): - cell_file = os.path.basename(cell) - cell_name, _ = os.path.splitext(cell_file) - - if cell_name in exclude: - continue - - shutil.copy(cell, os.path.join(outputpath, cell_file)) - - -def generate(target, logiclib, outputpath, la_lib='stdlib', exclude=None): - full_exclude = [] - if exclude: - full_exclude.extend(exclude) - - # Ensure files are loaded - cells_dir = __get_lambdalib_dir(la_lib) - - # Generate list of cells to produce - org_cells = set() - cells = [] - for cell in glob.glob(f'{cells_dir}/la_*.v'): - cell_name, _ = os.path.splitext(os.path.basename(cell)) - - if cell_name in full_exclude: - continue - - cells.append(cell) - org_cells.add(cell_name) - - # Remove old implementations - for cell in cells: - new_path = os.path.join(outputpath, os.path.basename(cell)) - try: - os.remove(new_path) - except FileNotFoundError: - pass - - copy(outputpath, la_lib, exclude) - - if isinstance(target, str): - target = Chip("module")._load_module(target) - - target_name = target.__name__ - - for cell in sorted(cells): - cell_file = os.path.basename(cell) - cell_name, _ = os.path.splitext(cell_file) - - chip = Chip(cell_name) - chip.input(cell) - chip.use(target) - chip.set('asic', 'logiclib', logiclib) - chip.set('option', 'flow', 'asicflow') - chip.set('option', 'to', 'syn') - chip.set('option', 'quiet', True) - chip.set('option', 'jobname', f"{target_name}-{logiclib}") - - chip.set('tool', 'yosys', 'task', 'syn_asic', 'var', 'autoname', 'false') - chip.set('tool', 'yosys', 'task', 'syn_asic', 'var', 'add_buffers', 'false') - - chip.add('option', 'ydir', outputpath) - chip.run() - - result = chip.find_result("vg", step="syn", index=0) - - with open(os.path.join(outputpath, cell_file), 'w') as out: - with open(cell, 'r') as org: - for line in org: - out.write(f'// {line}') - out.write(os.linesep) - with open(result, 'r') as res: - out.writelines(res.readlines()) +# main setup class to inherit +from .lambdalib import Lambda + +# individual modules +from lambdalib import auxlib +from lambdalib import fpgalib +from lambdalib import iolib +from lambdalib import padring +from lambdalib import stdlib +from lambdalib import ramlib +from lambdalib import veclib + +__version__ = "0.3.4" diff --git a/lambdalib/_common.py b/lambdalib/_common.py index e9f97aa..60624ae 100644 --- a/lambdalib/_common.py +++ b/lambdalib/_common.py @@ -1,5 +1,153 @@ -_version = "0.3.4" +import os +import glob +import shutil +from siliconcompiler import Chip +import siliconcompiler.package as sc_package def register_data_source(chip): chip.register_source("lambdalib", "python://lambdalib") + + +# TODO: remove +def basic_setup(design, path, name): + topmodule = name + datadir_name = f'{name}_data' + source = [f'rtl/{name}.v'] + + # set data home directory + design.register_dataref(datadir_name, path) + + # rtl files + fileset = 'rtl' + for item in source: + design.add_file(item, fileset, dataref=datadir_name) + + # top module + design.set_topmodule(topmodule, fileset) + +######################## +# SiliconCompiler Setup +######################## + + +def __get_lambdalib_dir(la_lib): + path_assert = Chip('lambdalib') + register_data_source(path_assert) + lambdalib_path = sc_package.path(path_assert, 'lambdalib') + return f'{lambdalib_path}/{la_lib}/rtl' + + +def check(outputpath, la_lib='stdlib'): + cells_dir = __get_lambdalib_dir(la_lib) + + lambda_cells = set() + for cell in glob.glob(f'{cells_dir}/la_*.v'): + lambda_cells.add(os.path.basename(cell)) + + lib_cells = set() + for cell in glob.glob(f'{outputpath}/la_*.v'): + lib_cells.add(os.path.basename(cell)) + + if lambda_cells == lib_cells: + return True + + missing_cells = lambda_cells - lib_cells + extra_cells = lib_cells - lambda_cells + + if missing_cells: + for cell in missing_cells: + print(f'Missing: {cell}') + if extra_cells: + for cell in extra_cells: + print(f'Excess cell: {cell}') + + if la_lib == 'auxlib' and not extra_cells: + # allow auxlib to have missing cells + return True + + return False + + +def copy(outputpath, la_lib='stdlib', exclude=None): + cells_dir = __get_lambdalib_dir(la_lib) + + if not exclude: + exclude = [] + + os.makedirs(outputpath, exist_ok=True) + + # Generate list of cells to produce + for cell in glob.glob(f'{cells_dir}/la_*.v'): + cell_file = os.path.basename(cell) + cell_name, _ = os.path.splitext(cell_file) + + if cell_name in exclude: + continue + + shutil.copy(cell, os.path.join(outputpath, cell_file)) + + +def generate(target, logiclib, outputpath, la_lib='stdlib', exclude=None): + full_exclude = [] + if exclude: + full_exclude.extend(exclude) + + # Ensure files are loaded + cells_dir = __get_lambdalib_dir(la_lib) + + # Generate list of cells to produce + org_cells = set() + cells = [] + for cell in glob.glob(f'{cells_dir}/la_*.v'): + cell_name, _ = os.path.splitext(os.path.basename(cell)) + + if cell_name in full_exclude: + continue + + cells.append(cell) + org_cells.add(cell_name) + + # Remove old implementations + for cell in cells: + new_path = os.path.join(outputpath, os.path.basename(cell)) + try: + os.remove(new_path) + except FileNotFoundError: + pass + + copy(outputpath, la_lib, exclude) + + if isinstance(target, str): + target = Chip("module")._load_module(target) + + target_name = target.__name__ + + for cell in sorted(cells): + cell_file = os.path.basename(cell) + cell_name, _ = os.path.splitext(cell_file) + + chip = Chip(cell_name) + chip.input(cell) + chip.use(target) + chip.set('asic', 'logiclib', logiclib) + chip.set('option', 'flow', 'asicflow') + chip.set('option', 'to', 'syn') + chip.set('option', 'quiet', True) + chip.set('option', 'jobname', f"{target_name}-{logiclib}") + + chip.set('tool', 'yosys', 'task', 'syn_asic', 'var', 'autoname', 'false') + chip.set('tool', 'yosys', 'task', 'syn_asic', 'var', 'add_buffers', 'false') + + chip.add('option', 'ydir', outputpath) + chip.run() + + result = chip.find_result("vg", step="syn", index=0) + + with open(os.path.join(outputpath, cell_file), 'w') as out: + with open(cell, 'r') as org: + for line in org: + out.write(f'// {line}') + out.write(os.linesep) + with open(result, 'r') as res: + out.writelines(res.readlines()) diff --git a/lambdalib/auxlib/__init__.py b/lambdalib/auxlib/__init__.py index b593c1d..3968bdd 100644 --- a/lambdalib/auxlib/__init__.py +++ b/lambdalib/auxlib/__init__.py @@ -1,21 +1,45 @@ -from siliconcompiler import Library -from lambdalib._common import register_data_source -from lambdalib import stdlib +from .la_antenna.la_antenna import Antenna +from .la_clkicgand.la_clkicgand import Clkicgand +from .la_clkicgor.la_clkicgor import Clkicgor +from .la_clkmux2.la_clkmux2 import Clkmux2 +from .la_clkmux4.la_clkmux4 import Clkmux4 +from .la_decap.la_decap import Decap +from .la_drsync.la_drsync import Drsync +from .la_dsync.la_dsync import Dsync +from .la_footer.la_footer import Footer +from .la_header.la_header import Header +from .la_ibuf.la_ibuf import Ibuf +from .la_iddr.la_iddr import Iddr +from .la_idiff.la_idiff import Idiff +from .la_isohi.la_isohi import Isohi +from .la_isolo.la_isolo import Isolo +from .la_keeper.la_keeper import Keeper +from .la_obuf.la_obuf import Obuf +from .la_oddr.la_oddr import Oddr +from .la_odiff.la_odiff import Odiff +from .la_pwrbuf.la_pwrbuf import Pwrbuf +from .la_rsync.la_rsync import Rsync +from .la_tbuf.la_tbuf import Tbuf - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib auxlib - ''' - - lib = Library('lambdalib_auxlib', package='lambdalib', auto_enable=True) - register_data_source(lib) - - lib.add('option', 'ydir', "auxlib/rtl") - - lib.use(stdlib) - - return lib +__all__ = ['Antenna', + 'Clkicgand', + 'Clkicgor', + 'Clkmux2', + 'Clkmux4', + 'Decap', + 'Drsync', + 'Dsync', + 'Footer', + 'Header', + 'Ibuf', + 'Iddr', + 'Idiff', + 'Isohi', + 'Isolo', + 'Keeper', + 'Obuf', + 'Oddr', + 'Odiff', + 'Pwrbuf', + 'Rsync', + 'Tbuf'] diff --git a/lambdalib/auxlib/la_antenna/la_antenna.py b/lambdalib/auxlib/la_antenna/la_antenna.py new file mode 100644 index 0000000..01dcd51 --- /dev/null +++ b/lambdalib/auxlib/la_antenna/la_antenna.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Antenna(Lambda): + def __init__(self): + name = 'la_antenna' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Antenna() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_antenna.v b/lambdalib/auxlib/la_antenna/rtl/la_antenna.v similarity index 100% rename from lambdalib/auxlib/rtl/la_antenna.v rename to lambdalib/auxlib/la_antenna/rtl/la_antenna.v diff --git a/lambdalib/auxlib/la_clkicgand/la_clkicgand.py b/lambdalib/auxlib/la_clkicgand/la_clkicgand.py new file mode 100644 index 0000000..66e8a50 --- /dev/null +++ b/lambdalib/auxlib/la_clkicgand/la_clkicgand.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkicgand(Lambda): + def __init__(self): + name = 'la_clkicgand' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkicgand() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_clkicgand.v b/lambdalib/auxlib/la_clkicgand/rtl/la_clkicgand.v similarity index 100% rename from lambdalib/auxlib/rtl/la_clkicgand.v rename to lambdalib/auxlib/la_clkicgand/rtl/la_clkicgand.v diff --git a/lambdalib/auxlib/la_clkicgor/la_clkicgor.py b/lambdalib/auxlib/la_clkicgor/la_clkicgor.py new file mode 100644 index 0000000..6831ae0 --- /dev/null +++ b/lambdalib/auxlib/la_clkicgor/la_clkicgor.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkicgor(Lambda): + def __init__(self): + name = 'la_clkicgor' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkicgor() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_clkicgor.v b/lambdalib/auxlib/la_clkicgor/rtl/la_clkicgor.v similarity index 100% rename from lambdalib/auxlib/rtl/la_clkicgor.v rename to lambdalib/auxlib/la_clkicgor/rtl/la_clkicgor.v diff --git a/lambdalib/auxlib/la_clkmux2/la_clkmux2.py b/lambdalib/auxlib/la_clkmux2/la_clkmux2.py new file mode 100644 index 0000000..10111d6 --- /dev/null +++ b/lambdalib/auxlib/la_clkmux2/la_clkmux2.py @@ -0,0 +1,20 @@ +import lambdalib as ll + + +class Clkmux2(ll.Lambda): + def __init__(self): + name = 'la_clkmux2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + # dependencies + for dep in [ll.stdlib.Inv, + ll.stdlib.And2, + ll.stdlib.Clkor2, + ll.auxlib.Drsync, + ll.auxlib.Clkicgand]: + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + + +if __name__ == "__main__": + d = Clkmux2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_clkmux2.v b/lambdalib/auxlib/la_clkmux2/rtl/la_clkmux2.v similarity index 100% rename from lambdalib/auxlib/rtl/la_clkmux2.v rename to lambdalib/auxlib/la_clkmux2/rtl/la_clkmux2.v diff --git a/lambdalib/auxlib/la_clkmux4/la_clkmux4.py b/lambdalib/auxlib/la_clkmux4/la_clkmux4.py new file mode 100644 index 0000000..28172a6 --- /dev/null +++ b/lambdalib/auxlib/la_clkmux4/la_clkmux4.py @@ -0,0 +1,21 @@ +import lambdalib as ll + + +class Clkmux4(ll.Lambda): + def __init__(self): + name = 'la_clkmux4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + # dependencies + for dep in [ll.stdlib.Inv, + ll.stdlib.And2, + ll.stdlib.Or3, + ll.stdlib.Clkor4, + ll.auxlib.Drsync, + ll.auxlib.Clkicgand]: + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + + +if __name__ == "__main__": + d = Clkmux4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_clkmux4.v b/lambdalib/auxlib/la_clkmux4/rtl/la_clkmux4.v similarity index 100% rename from lambdalib/auxlib/rtl/la_clkmux4.v rename to lambdalib/auxlib/la_clkmux4/rtl/la_clkmux4.v diff --git a/lambdalib/auxlib/la_decap/la_decap.py b/lambdalib/auxlib/la_decap/la_decap.py new file mode 100644 index 0000000..f820658 --- /dev/null +++ b/lambdalib/auxlib/la_decap/la_decap.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Decap(Lambda): + def __init__(self): + name = 'la_decap' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Decap() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_decap.v b/lambdalib/auxlib/la_decap/rtl/la_decap.v similarity index 100% rename from lambdalib/auxlib/rtl/la_decap.v rename to lambdalib/auxlib/la_decap/rtl/la_decap.v diff --git a/lambdalib/auxlib/la_drsync/la_drsync.py b/lambdalib/auxlib/la_drsync/la_drsync.py new file mode 100644 index 0000000..07ed493 --- /dev/null +++ b/lambdalib/auxlib/la_drsync/la_drsync.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Drsync(Lambda): + def __init__(self): + name = 'la_drsync' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Drsync() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_drsync.v b/lambdalib/auxlib/la_drsync/rtl/la_drsync.v similarity index 100% rename from lambdalib/auxlib/rtl/la_drsync.v rename to lambdalib/auxlib/la_drsync/rtl/la_drsync.v diff --git a/lambdalib/auxlib/la_dsync/la_dsync.py b/lambdalib/auxlib/la_dsync/la_dsync.py new file mode 100644 index 0000000..7a75cda --- /dev/null +++ b/lambdalib/auxlib/la_dsync/la_dsync.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dsync(Lambda): + def __init__(self): + name = 'la_dsync' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dsync() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_dsync.v b/lambdalib/auxlib/la_dsync/rtl/la_dsync.v similarity index 100% rename from lambdalib/auxlib/rtl/la_dsync.v rename to lambdalib/auxlib/la_dsync/rtl/la_dsync.v diff --git a/lambdalib/auxlib/la_footer/la_footer.py b/lambdalib/auxlib/la_footer/la_footer.py new file mode 100644 index 0000000..6b4dfdc --- /dev/null +++ b/lambdalib/auxlib/la_footer/la_footer.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Footer(Lambda): + def __init__(self): + name = 'la_footer' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Footer() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_footer.v b/lambdalib/auxlib/la_footer/rtl/la_footer.v similarity index 100% rename from lambdalib/auxlib/rtl/la_footer.v rename to lambdalib/auxlib/la_footer/rtl/la_footer.v diff --git a/lambdalib/auxlib/la_header/la_header.py b/lambdalib/auxlib/la_header/la_header.py new file mode 100644 index 0000000..fa393a6 --- /dev/null +++ b/lambdalib/auxlib/la_header/la_header.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Header(Lambda): + def __init__(self): + name = 'la_header' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Header() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_header.v b/lambdalib/auxlib/la_header/rtl/la_header.v similarity index 100% rename from lambdalib/auxlib/rtl/la_header.v rename to lambdalib/auxlib/la_header/rtl/la_header.v diff --git a/lambdalib/auxlib/la_ibuf/la_ibuf.py b/lambdalib/auxlib/la_ibuf/la_ibuf.py new file mode 100644 index 0000000..4fd7335 --- /dev/null +++ b/lambdalib/auxlib/la_ibuf/la_ibuf.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ibuf(Lambda): + def __init__(self): + name = 'la_ibuf' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ibuf() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_ibuf.v b/lambdalib/auxlib/la_ibuf/rtl/la_ibuf.v similarity index 100% rename from lambdalib/auxlib/rtl/la_ibuf.v rename to lambdalib/auxlib/la_ibuf/rtl/la_ibuf.v diff --git a/lambdalib/auxlib/la_iddr/la_iddr.py b/lambdalib/auxlib/la_iddr/la_iddr.py new file mode 100644 index 0000000..d749c7d --- /dev/null +++ b/lambdalib/auxlib/la_iddr/la_iddr.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iddr(Lambda): + def __init__(self): + name = 'la_iddr' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iddr() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_iddr.v b/lambdalib/auxlib/la_iddr/rtl/la_iddr.v similarity index 100% rename from lambdalib/auxlib/rtl/la_iddr.v rename to lambdalib/auxlib/la_iddr/rtl/la_iddr.v diff --git a/lambdalib/auxlib/la_idiff/la_idiff.py b/lambdalib/auxlib/la_idiff/la_idiff.py new file mode 100644 index 0000000..8791ee7 --- /dev/null +++ b/lambdalib/auxlib/la_idiff/la_idiff.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Idiff(Lambda): + def __init__(self): + name = 'la_idiff' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Idiff() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_idiff.v b/lambdalib/auxlib/la_idiff/rtl/la_idiff.v similarity index 100% rename from lambdalib/auxlib/rtl/la_idiff.v rename to lambdalib/auxlib/la_idiff/rtl/la_idiff.v diff --git a/lambdalib/auxlib/la_isohi/la_isohi.py b/lambdalib/auxlib/la_isohi/la_isohi.py new file mode 100644 index 0000000..da5773a --- /dev/null +++ b/lambdalib/auxlib/la_isohi/la_isohi.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Isohi(Lambda): + def __init__(self): + name = 'la_isohi' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Isohi() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_isohi.v b/lambdalib/auxlib/la_isohi/rtl/la_isohi.v similarity index 100% rename from lambdalib/auxlib/rtl/la_isohi.v rename to lambdalib/auxlib/la_isohi/rtl/la_isohi.v diff --git a/lambdalib/auxlib/la_isolo/la_isolo.py b/lambdalib/auxlib/la_isolo/la_isolo.py new file mode 100644 index 0000000..9785f4c --- /dev/null +++ b/lambdalib/auxlib/la_isolo/la_isolo.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Isolo(Lambda): + def __init__(self): + name = 'la_isolo' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Isolo() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_isolo.v b/lambdalib/auxlib/la_isolo/rtl/la_isolo.v similarity index 100% rename from lambdalib/auxlib/rtl/la_isolo.v rename to lambdalib/auxlib/la_isolo/rtl/la_isolo.v diff --git a/lambdalib/auxlib/la_keeper/la_keeper.py b/lambdalib/auxlib/la_keeper/la_keeper.py new file mode 100644 index 0000000..06810b8 --- /dev/null +++ b/lambdalib/auxlib/la_keeper/la_keeper.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Keeper(Lambda): + def __init__(self): + name = 'la_keeper' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Keeper() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_keeper.v b/lambdalib/auxlib/la_keeper/rtl/la_keeper.v similarity index 100% rename from lambdalib/auxlib/rtl/la_keeper.v rename to lambdalib/auxlib/la_keeper/rtl/la_keeper.v diff --git a/lambdalib/auxlib/la_obuf/la_obuf.py b/lambdalib/auxlib/la_obuf/la_obuf.py new file mode 100644 index 0000000..7e9d4be --- /dev/null +++ b/lambdalib/auxlib/la_obuf/la_obuf.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Obuf(Lambda): + def __init__(self): + name = 'la_obuf' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Obuf() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_obuf.v b/lambdalib/auxlib/la_obuf/rtl/la_obuf.v similarity index 100% rename from lambdalib/auxlib/rtl/la_obuf.v rename to lambdalib/auxlib/la_obuf/rtl/la_obuf.v diff --git a/lambdalib/auxlib/la_oddr/la_oddr.py b/lambdalib/auxlib/la_oddr/la_oddr.py new file mode 100644 index 0000000..10885d1 --- /dev/null +++ b/lambdalib/auxlib/la_oddr/la_oddr.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oddr(Lambda): + def __init__(self): + name = 'la_oddr' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oddr() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_oddr.v b/lambdalib/auxlib/la_oddr/rtl/la_oddr.v similarity index 100% rename from lambdalib/auxlib/rtl/la_oddr.v rename to lambdalib/auxlib/la_oddr/rtl/la_oddr.v diff --git a/lambdalib/auxlib/la_odiff/la_odiff.py b/lambdalib/auxlib/la_odiff/la_odiff.py new file mode 100644 index 0000000..9850fd8 --- /dev/null +++ b/lambdalib/auxlib/la_odiff/la_odiff.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Odiff(Lambda): + def __init__(self): + name = 'la_odiff' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Odiff() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_odiff.v b/lambdalib/auxlib/la_odiff/rtl/la_odiff.v similarity index 100% rename from lambdalib/auxlib/rtl/la_odiff.v rename to lambdalib/auxlib/la_odiff/rtl/la_odiff.v diff --git a/lambdalib/auxlib/la_pwrbuf/la_pwrbuf.py b/lambdalib/auxlib/la_pwrbuf/la_pwrbuf.py new file mode 100644 index 0000000..94ab264 --- /dev/null +++ b/lambdalib/auxlib/la_pwrbuf/la_pwrbuf.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Pwrbuf(Lambda): + def __init__(self): + name = 'la_pwrbuf' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Pwrbuf() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_pwrbuf.v b/lambdalib/auxlib/la_pwrbuf/rtl/la_pwrbuf.v similarity index 100% rename from lambdalib/auxlib/rtl/la_pwrbuf.v rename to lambdalib/auxlib/la_pwrbuf/rtl/la_pwrbuf.v diff --git a/lambdalib/auxlib/la_rsync/la_rsync.py b/lambdalib/auxlib/la_rsync/la_rsync.py new file mode 100644 index 0000000..cdcf06e --- /dev/null +++ b/lambdalib/auxlib/la_rsync/la_rsync.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Rsync(Lambda): + def __init__(self): + name = 'la_rsync' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Rsync() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_rsync.v b/lambdalib/auxlib/la_rsync/rtl/la_rsync.v similarity index 100% rename from lambdalib/auxlib/rtl/la_rsync.v rename to lambdalib/auxlib/la_rsync/rtl/la_rsync.v diff --git a/lambdalib/auxlib/la_tbuf/la_tbuf.py b/lambdalib/auxlib/la_tbuf/la_tbuf.py new file mode 100644 index 0000000..58649c6 --- /dev/null +++ b/lambdalib/auxlib/la_tbuf/la_tbuf.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Tbuf(Lambda): + def __init__(self): + name = 'la_tbuf' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Tbuf() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/auxlib/rtl/la_tbuf.v b/lambdalib/auxlib/la_tbuf/rtl/la_tbuf.v similarity index 100% rename from lambdalib/auxlib/rtl/la_tbuf.v rename to lambdalib/auxlib/la_tbuf/rtl/la_tbuf.v diff --git a/lambdalib/fpgalib/__init__.py b/lambdalib/fpgalib/__init__.py index b87977b..fbd08b9 100644 --- a/lambdalib/fpgalib/__init__.py +++ b/lambdalib/fpgalib/__init__.py @@ -1,18 +1,7 @@ -from siliconcompiler import Library -from lambdalib._common import register_data_source +from .la_ble4p0.la_ble4p0 import Ble4p0 +from .la_clb4p0.la_clb4p0 import Clb4p0 +from .la_lut4.la_lut4 import Lut4 - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib fpgalib - ''' - - lib = Library('lambdalib_fpgalib', package='lambdalib', auto_enable=True) - register_data_source(lib) - - lib.add('option', 'ydir', "fpgalib/rtl") - - return lib +__all__ = ['Ble4p0', + 'Clb4p0', + 'Lut4'] diff --git a/lambdalib/fpgalib/la_ble4p0/la_ble4p0.py b/lambdalib/fpgalib/la_ble4p0/la_ble4p0.py new file mode 100644 index 0000000..96f3159 --- /dev/null +++ b/lambdalib/fpgalib/la_ble4p0/la_ble4p0.py @@ -0,0 +1,18 @@ +import lambdalib as ll + + +class Ble4p0(ll.Lambda): + def __init__(self): + name = 'la_ble4p0' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + for dep in (ll.fpgalib.Lut4, + ll.stdlib.Dffrq, + ll.stdlib.Mux2): + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + + +if __name__ == "__main__": + d = Ble4p0() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/fpgalib/rtl/la_ble4p0.v b/lambdalib/fpgalib/la_ble4p0/rtl/la_ble4p0.v similarity index 100% rename from lambdalib/fpgalib/rtl/la_ble4p0.v rename to lambdalib/fpgalib/la_ble4p0/rtl/la_ble4p0.v diff --git a/lambdalib/fpgalib/la_clb4p0/la_clb4p0.py b/lambdalib/fpgalib/la_clb4p0/la_clb4p0.py new file mode 100644 index 0000000..4fcc31a --- /dev/null +++ b/lambdalib/fpgalib/la_clb4p0/la_clb4p0.py @@ -0,0 +1,15 @@ +import lambdalib as ll + + +class Clb4p0(ll.Lambda): + def __init__(self): + name = 'la_clb4p0' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + for dep in [ll.fpgalib.Ble4p0]: + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + + +if __name__ == "__main__": + d = Clb4p0() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/fpgalib/rtl/la_clb4p0.v b/lambdalib/fpgalib/la_clb4p0/rtl/la_clb4p0.v similarity index 99% rename from lambdalib/fpgalib/rtl/la_clb4p0.v rename to lambdalib/fpgalib/la_clb4p0/rtl/la_clb4p0.v index e4641ac..b997f3a 100644 --- a/lambdalib/fpgalib/rtl/la_clb4p0.v +++ b/lambdalib/fpgalib/la_clb4p0/rtl/la_clb4p0.v @@ -81,7 +81,7 @@ module la_clb4p0 if (N>1) assign fbmux[i][j] = fb[i][cfgfb[(i*K+j)*$clog2(N)+:$clog2(N)]]; else - assign fbmux[i][j] = fb[i][j]; + assign fbmux[i][j] = fb[i][0]; //TODO: suport N=1 end // select between feedback and primary inputs diff --git a/lambdalib/fpgalib/la_lut4/la_lut4.py b/lambdalib/fpgalib/la_lut4/la_lut4.py new file mode 100644 index 0000000..23c6377 --- /dev/null +++ b/lambdalib/fpgalib/la_lut4/la_lut4.py @@ -0,0 +1,16 @@ +from lambdalib import Lambda +from lambdalib.stdlib import Mux2 + + +class Lut4(Lambda): + def __init__(self): + name = 'la_lut4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + for dep in [Mux2]: + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + + +if __name__ == "__main__": + d = Lut4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/fpgalib/rtl/la_lut4.v b/lambdalib/fpgalib/la_lut4/rtl/la_lut4.v similarity index 100% rename from lambdalib/fpgalib/rtl/la_lut4.v rename to lambdalib/fpgalib/la_lut4/rtl/la_lut4.v diff --git a/lambdalib/iolib/__init__.py b/lambdalib/iolib/__init__.py index 7c996e6..babb1d0 100644 --- a/lambdalib/iolib/__init__.py +++ b/lambdalib/iolib/__init__.py @@ -1,18 +1,33 @@ -from siliconcompiler import Library -from lambdalib._common import register_data_source +from .la_ioanalog.la_ioanalog import Ioanalog +from .la_iobidir.la_iobidir import Iobidir +from .la_ioclamp.la_ioclamp import Ioclamp +from .la_iocorner.la_iocorner import Iocorner +from .la_iocut.la_iocut import Iocut +from .la_ioinput.la_ioinput import Ioinput +from .la_iopoc.la_iopoc import Iopoc +from .la_iorxdiff.la_iorxdiff import Iorxdiff +from .la_iotxdiff.la_iotxdiff import Iotxdiff +from .la_iovdda.la_iovdda import Iovdda +from .la_iovddio.la_iovddio import Iovddio +from .la_iovdd.la_iovdd import Iovdd +from .la_iovssa.la_iovssa import Iovssa +from .la_iovssio.la_iovssio import Iovssio +from .la_iovss.la_iovss import Iovss +from .la_ioxtal.la_ioxtal import Ioxtal - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib iolib - ''' - - lib = Library('lambdalib_iolib', package='lambdalib', auto_enable=True) - register_data_source(lib) - - lib.add('option', 'ydir', "iolib/rtl") - - return lib +__all__ = ['Ioanalog', + 'Iobidir', + 'Ioclamp', + 'Iocorner', + 'Iocut', + 'Ioinput', + 'Iopoc', + 'Iorxdiff', + 'Iotxdiff', + 'Iovdda', + 'Iovddio', + 'Iovdd', + 'Iovssa', + 'Iovssio', + 'Iovss', + 'Ioxtal'] diff --git a/lambdalib/iolib/la_ioanalog/la_ioanalog.py b/lambdalib/iolib/la_ioanalog/la_ioanalog.py new file mode 100644 index 0000000..5944a3c --- /dev/null +++ b/lambdalib/iolib/la_ioanalog/la_ioanalog.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ioanalog(Lambda): + def __init__(self): + name = 'la_ioanalog' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ioanalog() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_ioanalog.v b/lambdalib/iolib/la_ioanalog/rtl/la_ioanalog.v similarity index 100% rename from lambdalib/iolib/rtl/la_ioanalog.v rename to lambdalib/iolib/la_ioanalog/rtl/la_ioanalog.v diff --git a/lambdalib/iolib/la_iobidir/la_iobidir.py b/lambdalib/iolib/la_iobidir/la_iobidir.py new file mode 100644 index 0000000..e938fda --- /dev/null +++ b/lambdalib/iolib/la_iobidir/la_iobidir.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iobidir(Lambda): + def __init__(self): + name = 'la_iobidir' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iobidir() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iobidir.v b/lambdalib/iolib/la_iobidir/rtl/la_iobidir.v similarity index 100% rename from lambdalib/iolib/rtl/la_iobidir.v rename to lambdalib/iolib/la_iobidir/rtl/la_iobidir.v diff --git a/lambdalib/iolib/la_ioclamp/la_ioclamp.py b/lambdalib/iolib/la_ioclamp/la_ioclamp.py new file mode 100644 index 0000000..806c0a2 --- /dev/null +++ b/lambdalib/iolib/la_ioclamp/la_ioclamp.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ioclamp(Lambda): + def __init__(self): + name = 'la_ioclamp' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ioclamp() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_ioclamp.v b/lambdalib/iolib/la_ioclamp/rtl/la_ioclamp.v similarity index 100% rename from lambdalib/iolib/rtl/la_ioclamp.v rename to lambdalib/iolib/la_ioclamp/rtl/la_ioclamp.v diff --git a/lambdalib/iolib/la_iocorner/la_iocorner.py b/lambdalib/iolib/la_iocorner/la_iocorner.py new file mode 100644 index 0000000..fc5e3d6 --- /dev/null +++ b/lambdalib/iolib/la_iocorner/la_iocorner.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iocorner(Lambda): + def __init__(self): + name = 'la_iocorner' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iocorner() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iocorner.v b/lambdalib/iolib/la_iocorner/rtl/la_iocorner.v similarity index 100% rename from lambdalib/iolib/rtl/la_iocorner.v rename to lambdalib/iolib/la_iocorner/rtl/la_iocorner.v diff --git a/lambdalib/iolib/la_iocut/la_iocut.py b/lambdalib/iolib/la_iocut/la_iocut.py new file mode 100644 index 0000000..e941189 --- /dev/null +++ b/lambdalib/iolib/la_iocut/la_iocut.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iocut(Lambda): + def __init__(self): + name = 'la_iocut' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iocut() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iocut.v b/lambdalib/iolib/la_iocut/rtl/la_iocut.v similarity index 100% rename from lambdalib/iolib/rtl/la_iocut.v rename to lambdalib/iolib/la_iocut/rtl/la_iocut.v diff --git a/lambdalib/iolib/la_ioinput/la_ioinput.py b/lambdalib/iolib/la_ioinput/la_ioinput.py new file mode 100644 index 0000000..c173778 --- /dev/null +++ b/lambdalib/iolib/la_ioinput/la_ioinput.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ioinput(Lambda): + def __init__(self): + name = 'la_ioinput' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ioinput() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_ioinput.v b/lambdalib/iolib/la_ioinput/rtl/la_ioinput.v similarity index 100% rename from lambdalib/iolib/rtl/la_ioinput.v rename to lambdalib/iolib/la_ioinput/rtl/la_ioinput.v diff --git a/lambdalib/iolib/la_iopoc/la_iopoc.py b/lambdalib/iolib/la_iopoc/la_iopoc.py new file mode 100644 index 0000000..df2abfb --- /dev/null +++ b/lambdalib/iolib/la_iopoc/la_iopoc.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iopoc(Lambda): + def __init__(self): + name = 'la_iopoc' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iopoc() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iopoc.v b/lambdalib/iolib/la_iopoc/rtl/la_iopoc.v similarity index 100% rename from lambdalib/iolib/rtl/la_iopoc.v rename to lambdalib/iolib/la_iopoc/rtl/la_iopoc.v diff --git a/lambdalib/iolib/la_iorxdiff/la_iorxdiff.py b/lambdalib/iolib/la_iorxdiff/la_iorxdiff.py new file mode 100644 index 0000000..febfa6e --- /dev/null +++ b/lambdalib/iolib/la_iorxdiff/la_iorxdiff.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iorxdiff(Lambda): + def __init__(self): + name = 'la_iorxdiff' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iorxdiff() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iorxdiff.v b/lambdalib/iolib/la_iorxdiff/rtl/la_iorxdiff.v similarity index 100% rename from lambdalib/iolib/rtl/la_iorxdiff.v rename to lambdalib/iolib/la_iorxdiff/rtl/la_iorxdiff.v diff --git a/lambdalib/iolib/la_iotxdiff/la_iotxdiff.py b/lambdalib/iolib/la_iotxdiff/la_iotxdiff.py new file mode 100644 index 0000000..70a6bce --- /dev/null +++ b/lambdalib/iolib/la_iotxdiff/la_iotxdiff.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iotxdiff(Lambda): + def __init__(self): + name = 'la_iotxdiff' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iotxdiff() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iotxdiff.v b/lambdalib/iolib/la_iotxdiff/rtl/la_iotxdiff.v similarity index 100% rename from lambdalib/iolib/rtl/la_iotxdiff.v rename to lambdalib/iolib/la_iotxdiff/rtl/la_iotxdiff.v diff --git a/lambdalib/iolib/la_iovdd/la_iovdd.py b/lambdalib/iolib/la_iovdd/la_iovdd.py new file mode 100644 index 0000000..270d606 --- /dev/null +++ b/lambdalib/iolib/la_iovdd/la_iovdd.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iovdd(Lambda): + def __init__(self): + name = 'la_iovdd' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iovdd() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iovdd.v b/lambdalib/iolib/la_iovdd/rtl/la_iovdd.v similarity index 100% rename from lambdalib/iolib/rtl/la_iovdd.v rename to lambdalib/iolib/la_iovdd/rtl/la_iovdd.v diff --git a/lambdalib/iolib/la_iovdda/la_iovdda.py b/lambdalib/iolib/la_iovdda/la_iovdda.py new file mode 100644 index 0000000..fd217ee --- /dev/null +++ b/lambdalib/iolib/la_iovdda/la_iovdda.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iovdda(Lambda): + def __init__(self): + name = 'la_iovdda' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iovdda() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iovdda.v b/lambdalib/iolib/la_iovdda/rtl/la_iovdda.v similarity index 100% rename from lambdalib/iolib/rtl/la_iovdda.v rename to lambdalib/iolib/la_iovdda/rtl/la_iovdda.v diff --git a/lambdalib/iolib/la_iovddio/la_iovddio.py b/lambdalib/iolib/la_iovddio/la_iovddio.py new file mode 100644 index 0000000..558a384 --- /dev/null +++ b/lambdalib/iolib/la_iovddio/la_iovddio.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iovddio(Lambda): + def __init__(self): + name = 'la_iovddio' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iovddio() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iovddio.v b/lambdalib/iolib/la_iovddio/rtl/la_iovddio.v similarity index 100% rename from lambdalib/iolib/rtl/la_iovddio.v rename to lambdalib/iolib/la_iovddio/rtl/la_iovddio.v diff --git a/lambdalib/iolib/la_iovss/la_iovss.py b/lambdalib/iolib/la_iovss/la_iovss.py new file mode 100644 index 0000000..794d081 --- /dev/null +++ b/lambdalib/iolib/la_iovss/la_iovss.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iovss(Lambda): + def __init__(self): + name = 'la_iovss' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iovss() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iovss.v b/lambdalib/iolib/la_iovss/rtl/la_iovss.v similarity index 100% rename from lambdalib/iolib/rtl/la_iovss.v rename to lambdalib/iolib/la_iovss/rtl/la_iovss.v diff --git a/lambdalib/iolib/la_iovssa/la_iovssa.py b/lambdalib/iolib/la_iovssa/la_iovssa.py new file mode 100644 index 0000000..a1004d9 --- /dev/null +++ b/lambdalib/iolib/la_iovssa/la_iovssa.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iovssa(Lambda): + def __init__(self): + name = 'la_iovssa' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iovssa() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iovssa.v b/lambdalib/iolib/la_iovssa/rtl/la_iovssa.v similarity index 100% rename from lambdalib/iolib/rtl/la_iovssa.v rename to lambdalib/iolib/la_iovssa/rtl/la_iovssa.v diff --git a/lambdalib/iolib/la_iovssio/la_iovssio.py b/lambdalib/iolib/la_iovssio/la_iovssio.py new file mode 100644 index 0000000..91d9735 --- /dev/null +++ b/lambdalib/iolib/la_iovssio/la_iovssio.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Iovssio(Lambda): + def __init__(self): + name = 'la_iovssio' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Iovssio() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_iovssio.v b/lambdalib/iolib/la_iovssio/rtl/la_iovssio.v similarity index 100% rename from lambdalib/iolib/rtl/la_iovssio.v rename to lambdalib/iolib/la_iovssio/rtl/la_iovssio.v diff --git a/lambdalib/iolib/la_ioxtal/la_ioxtal.py b/lambdalib/iolib/la_ioxtal/la_ioxtal.py new file mode 100644 index 0000000..794c5cb --- /dev/null +++ b/lambdalib/iolib/la_ioxtal/la_ioxtal.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ioxtal(Lambda): + def __init__(self): + name = 'la_ioxtal' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ioxtal() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/iolib/rtl/la_ioxtal.v b/lambdalib/iolib/la_ioxtal/rtl/la_ioxtal.v similarity index 100% rename from lambdalib/iolib/rtl/la_ioxtal.v rename to lambdalib/iolib/la_ioxtal/rtl/la_ioxtal.v diff --git a/lambdalib/lambdalib.py b/lambdalib/lambdalib.py new file mode 100644 index 0000000..393c810 --- /dev/null +++ b/lambdalib/lambdalib.py @@ -0,0 +1,23 @@ +from typing import List, Union +from pathlib import Path +from siliconcompiler import DesignSchema + + +class Lambda(DesignSchema): + + def __init__(self, + name: str, + sources: List[str], + path: Union[str, Path]): + + super().__init__(name) + + fileset = 'rtl' + dataroot = f'{name}' + topmodule = f'la_{name}' + + self.set_dataroot(dataroot, path) + self.set_topmodule(topmodule, fileset) + + for item in sources: + self.add_file(item, fileset, dataroot=dataroot) diff --git a/lambdalib/padring/__init__.py b/lambdalib/padring/__init__.py index c614f49..dd0687e 100644 --- a/lambdalib/padring/__init__.py +++ b/lambdalib/padring/__init__.py @@ -1,22 +1,3 @@ -from siliconcompiler import Library -from lambdalib._common import register_data_source -from lambdalib import iolib +from .la_padring.la_padring import Padring - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib padring - ''' - - lib = Library('lambdalib_padring', package='lambdalib', auto_enable=True) - register_data_source(lib) - - lib.add('option', 'idir', "padring/rtl") - lib.add('option', 'ydir', "padring/rtl") - - lib.use(iolib) - - return lib +__all__ = ['Padring'] diff --git a/lambdalib/padring/la_ioalias/la_ioalias.py b/lambdalib/padring/la_ioalias/la_ioalias.py new file mode 100644 index 0000000..f897f3d --- /dev/null +++ b/lambdalib/padring/la_ioalias/la_ioalias.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ioalias(Lambda): + def __init__(self): + name = 'la_ioalias' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ioalias() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/padring/rtl/la_ioalias.v b/lambdalib/padring/la_ioalias/rtl/la_ioalias.v similarity index 100% rename from lambdalib/padring/rtl/la_ioalias.v rename to lambdalib/padring/la_ioalias/rtl/la_ioalias.v diff --git a/lambdalib/padring/la_ioshort/la_ioshort.py b/lambdalib/padring/la_ioshort/la_ioshort.py new file mode 100644 index 0000000..49e3de3 --- /dev/null +++ b/lambdalib/padring/la_ioshort/la_ioshort.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ioshort(Lambda): + def __init__(self): + name = 'la_ioshort' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ioshort() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/padring/rtl/la_ioshort.v b/lambdalib/padring/la_ioshort/rtl/la_ioshort.v similarity index 100% rename from lambdalib/padring/rtl/la_ioshort.v rename to lambdalib/padring/la_ioshort/rtl/la_ioshort.v diff --git a/lambdalib/padring/la_padring/la_padring.py b/lambdalib/padring/la_padring/la_padring.py new file mode 100644 index 0000000..344c5a5 --- /dev/null +++ b/lambdalib/padring/la_padring/la_padring.py @@ -0,0 +1,35 @@ +import lambdalib as ll + + +class Padring(ll.Lambda): + def __init__(self): + name = 'la_padring' + sources = [f'rtl/{name}.v', + 'rtl/la_padside.v'] + super().__init__(name, sources, __file__) + + # extra settings, #TODO: not great, hard-coded names inside Lambda + self.add_idir('rtl', fileset='rtl', dataroot=name) + + # dependencies + for dep in [ll.iolib.Iobidir, + ll.iolib.Ioinput, + ll.iolib.Ioanalog, + ll.iolib.Ioxtal, + ll.iolib.Iorxdiff, + ll.iolib.Iotxdiff, + ll.iolib.Iopoc, + ll.iolib.Iocut, + ll.iolib.Iovddio, + ll.iolib.Iovssio, + ll.iolib.Iovdd, + ll.iolib.Iovss, + ll.iolib.Iovdda, + ll.iolib.Iovssa, + ll.iolib.Ioclamp]: + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + + +if __name__ == "__main__": + d = Padring() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/padring/rtl/la_iopadring.v b/lambdalib/padring/la_padring/rtl/la_padring.v similarity index 93% rename from lambdalib/padring/rtl/la_iopadring.v rename to lambdalib/padring/la_padring/rtl/la_padring.v index 7636827..4280e02 100644 --- a/lambdalib/padring/rtl/la_iopadring.v +++ b/lambdalib/padring/la_padring/rtl/la_padring.v @@ -31,7 +31,7 @@ * ****************************************************************************/ -module la_iopadring +module la_padring #( parameter CFGW = 8, // config width parameter RINGW = 8, // ioring width @@ -116,16 +116,16 @@ module la_iopadring inout [WE_NSECTIONS*RINGW-1:0] we_ioring ); -`include "la_iopadring.vh" +`include "la_padring.vh" // NORTH - la_ioside #(.SIDE("NO"), - .NPINS(NO_NPINS), - .NCELLS(NO_NCELLS), - .NSECTIONS(NO_NSECTIONS), - .CELLMAP(NO_CELLMAP), - .RINGW(RINGW), - .CFGW(CFGW)) + la_padside #(.SIDE("NO"), + .NPINS(NO_NPINS), + .NCELLS(NO_NCELLS), + .NSECTIONS(NO_NSECTIONS), + .CELLMAP(NO_CELLMAP), + .RINGW(RINGW), + .CFGW(CFGW)) inorth (// Outputs .zp (no_zp), .zn (no_zn), @@ -146,13 +146,13 @@ module la_iopadring .cfg (no_cfg)); // EAST - la_ioside #(.SIDE("EA"), - .NPINS(EA_NPINS), - .NCELLS(EA_NCELLS), - .NSECTIONS(EA_NSECTIONS), - .CELLMAP(EA_CELLMAP), - .RINGW(RINGW), - .CFGW(CFGW)) + la_padside #(.SIDE("EA"), + .NPINS(EA_NPINS), + .NCELLS(EA_NCELLS), + .NSECTIONS(EA_NSECTIONS), + .CELLMAP(EA_CELLMAP), + .RINGW(RINGW), + .CFGW(CFGW)) ieast (// Outputs .zp (ea_zp), .zn (ea_zn), @@ -173,13 +173,13 @@ module la_iopadring .cfg (ea_cfg)); // WEST - la_ioside #(.SIDE("WE"), - .NPINS(WE_NPINS), - .NCELLS(WE_NCELLS), - .NSECTIONS(WE_NSECTIONS), - .CELLMAP(WE_CELLMAP), - .RINGW(RINGW), - .CFGW(CFGW)) + la_padside #(.SIDE("WE"), + .NPINS(WE_NPINS), + .NCELLS(WE_NCELLS), + .NSECTIONS(WE_NSECTIONS), + .CELLMAP(WE_CELLMAP), + .RINGW(RINGW), + .CFGW(CFGW)) iwest (// Outputs .zp (we_zp), .zn (we_zn), @@ -200,13 +200,13 @@ module la_iopadring .cfg (we_cfg)); // SOUTH - la_ioside #(.SIDE("SO"), - .NPINS(SO_NPINS), - .NCELLS(SO_NCELLS), - .NSECTIONS(SO_NSECTIONS), - .CELLMAP(SO_CELLMAP), - .RINGW(RINGW), - .CFGW(CFGW)) + la_padside #(.SIDE("SO"), + .NPINS(SO_NPINS), + .NCELLS(SO_NCELLS), + .NSECTIONS(SO_NSECTIONS), + .CELLMAP(SO_CELLMAP), + .RINGW(RINGW), + .CFGW(CFGW)) isouth (// Outputs .zp (so_zp), .zn (so_zn), @@ -328,7 +328,7 @@ module tb(); */ // dut - la_iopadring #(.CFGW(CFGW), + la_padring #(.CFGW(CFGW), .RINGW(RINGW), .NO_NPINS(NPINS), .EA_NPINS(NPINS), @@ -342,7 +342,7 @@ module tb(); .EA_CELLMAP(CELLMAP), .WE_CELLMAP(CELLMAP), .SO_CELLMAP(CELLMAP)) - la_iopadring (/*AUTOINST*/ + la_padring (/*AUTOINST*/ // Outputs .no_zp (), // Templated .no_zn (), // Templated diff --git a/lambdalib/padring/la_padring/rtl/la_padring.vh b/lambdalib/padring/la_padring/rtl/la_padring.vh new file mode 100644 index 0000000..25491b1 --- /dev/null +++ b/lambdalib/padring/la_padring/rtl/la_padring.vh @@ -0,0 +1,97 @@ +/***************************************************************************** + * Function: Padring Generator Enumeration + * Copyright: Lambda Project Authors. All rights Reserved. + * License: MIT (see LICENSE file in Lambda repository) + ****************************************************************************/ + +// NULL (place holder) +localparam [7:0] NULL = 8'h00; + +// io cells +localparam [7:0] LA_BIDIR = 8'h01; +localparam [7:0] LA_INPUT = 8'h02; +localparam [7:0] LA_OUTPUT = 8'h03; +localparam [7:0] LA_ANALOG = 8'h04; +localparam [7:0] LA_XTAL = 8'h05; +localparam [7:0] LA_RXDIFF = 8'h06; +localparam [7:0] LA_TXDIFF = 8'h07; + +// supply cells +localparam [7:0] LA_VDDIO = 8'h10; +localparam [7:0] LA_VSSIO = 8'h11; +localparam [7:0] LA_VDD = 8'h12; +localparam [7:0] LA_VSS = 8'h13; +localparam [7:0] LA_VDDA = 8'h14; +localparam [7:0] LA_VSSA = 8'h15; +localparam [7:0] LA_POC = 8'h16; +localparam [7:0] LA_CUT = 8'h17; +localparam [7:0] LA_CLAMP = 8'h18; + +// simple pin enumeration +localparam [7:0] PIN0 = 8'd00; +localparam [7:0] PIN1 = 8'd01; +localparam [7:0] PIN2 = 8'd02; +localparam [7:0] PIN3 = 8'd03; +localparam [7:0] PIN4 = 8'd04; +localparam [7:0] PIN5 = 8'd05; +localparam [7:0] PIN6 = 8'd06; +localparam [7:0] PIN7 = 8'd07; +localparam [7:0] PIN8 = 8'd08; +localparam [7:0] PIN9 = 8'd09; +localparam [7:0] PIN10 = 8'd10; +localparam [7:0] PIN11 = 8'd11; +localparam [7:0] PIN12 = 8'd12; +localparam [7:0] PIN13 = 8'd13; +localparam [7:0] PIN14 = 8'd14; +localparam [7:0] PIN15 = 8'd15; + +localparam [7:0] PIN16 = 8'd16; +localparam [7:0] PIN17 = 8'd17; +localparam [7:0] PIN18 = 8'd18; +localparam [7:0] PIN19 = 8'd19; +localparam [7:0] PIN20 = 8'd20; +localparam [7:0] PIN21 = 8'd21; +localparam [7:0] PIN22 = 8'd22; +localparam [7:0] PIN23 = 8'd23; +localparam [7:0] PIN24 = 8'd24; +localparam [7:0] PIN25 = 8'd25; +localparam [7:0] PIN26 = 8'd26; +localparam [7:0] PIN27 = 8'd27; +localparam [7:0] PIN28 = 8'd28; +localparam [7:0] PIN29 = 8'd29; +localparam [7:0] PIN30 = 8'd30; +localparam [7:0] PIN31 = 8'd31; + +localparam [7:0] PIN32 = 8'd32; +localparam [7:0] PIN33 = 8'd33; +localparam [7:0] PIN34 = 8'd34; +localparam [7:0] PIN35 = 8'd35; +localparam [7:0] PIN36 = 8'd36; +localparam [7:0] PIN37 = 8'd37; +localparam [7:0] PIN38 = 8'd38; +localparam [7:0] PIN39 = 8'd39; +localparam [7:0] PIN40 = 8'd40; +localparam [7:0] PIN41 = 8'd41; +localparam [7:0] PIN42 = 8'd42; +localparam [7:0] PIN43 = 8'd43; +localparam [7:0] PIN44 = 8'd44; +localparam [7:0] PIN45 = 8'd45; +localparam [7:0] PIN46 = 8'd46; +localparam [7:0] PIN47 = 8'd47; + +localparam [7:0] PIN48 = 8'd48; +localparam [7:0] PIN49 = 8'd49; +localparam [7:0] PIN50 = 8'd50; +localparam [7:0] PIN51 = 8'd51; +localparam [7:0] PIN52 = 8'd52; +localparam [7:0] PIN53 = 8'd53; +localparam [7:0] PIN54 = 8'd54; +localparam [7:0] PIN55 = 8'd55; +localparam [7:0] PIN56 = 8'd56; +localparam [7:0] PIN57 = 8'd57; +localparam [7:0] PIN58 = 8'd58; +localparam [7:0] PIN59 = 8'd59; +localparam [7:0] PIN60 = 8'd60; +localparam [7:0] PIN61 = 8'd61; +localparam [7:0] PIN62 = 8'd62; +localparam [7:0] PIN63 = 8'd63; diff --git a/lambdalib/padring/rtl/la_ioside.v b/lambdalib/padring/la_padring/rtl/la_padside.v similarity index 99% rename from lambdalib/padring/rtl/la_ioside.v rename to lambdalib/padring/la_padring/rtl/la_padside.v index a850118..8b2b897 100644 --- a/lambdalib/padring/rtl/la_ioside.v +++ b/lambdalib/padring/la_padring/rtl/la_padside.v @@ -29,7 +29,7 @@ * *************************************************************************/ -module la_ioside +module la_padside #(// per side parameters parameter [15:0] SIDE = "NO", // "NO", "SO", "EA", "WE" parameter [7:0] NPINS = 1, // total pins per side (<256) @@ -59,7 +59,7 @@ module la_ioside inout [NSECTIONS*RINGW-1:0] ioring // generic io-ring ); -`include "la_iopadring.vh" +`include "la_padring.vh" genvar i; diff --git a/lambdalib/padring/rtl/la_iopadring.vh b/lambdalib/padring/rtl/la_iopadring.vh deleted file mode 100644 index 90335a3..0000000 --- a/lambdalib/padring/rtl/la_iopadring.vh +++ /dev/null @@ -1,28 +0,0 @@ -/***************************************************************************** - * Function: Padring Generator Enumeration - * Copyright: Lambda Project Authors. All rights Reserved. - * License: MIT (see LICENSE file in Lambda repository) - ****************************************************************************/ - -// NULL (unused, catchall) -localparam [7:0] NULL = 8'h00; - -// signals -localparam [7:0] LA_BIDIR = 8'h01; -localparam [7:0] LA_INPUT = 8'h02; -localparam [7:0] LA_OUTPUT = 8'h03; -localparam [7:0] LA_ANALOG = 8'h04; -localparam [7:0] LA_XTAL = 8'h05; -localparam [7:0] LA_RXDIFF = 8'h06; -localparam [7:0] LA_TXDIFF = 8'h07; - -// supplies -localparam [7:0] LA_VDDIO = 8'h10; -localparam [7:0] LA_VSSIO = 8'h11; -localparam [7:0] LA_VDD = 8'h12; -localparam [7:0] LA_VSS = 8'h13; -localparam [7:0] LA_VDDA = 8'h14; -localparam [7:0] LA_VSSA = 8'h15; -localparam [7:0] LA_POC = 8'h16; -localparam [7:0] LA_CUT = 8'h17; -localparam [7:0] LA_CLAMP = 8'h18; diff --git a/lambdalib/ramlib/__init__.py b/lambdalib/ramlib/__init__.py index 2bcccfd..15f63d0 100644 --- a/lambdalib/ramlib/__init__.py +++ b/lambdalib/ramlib/__init__.py @@ -1,21 +1,9 @@ -from siliconcompiler import Library -from lambdalib._common import register_data_source -from lambdalib import auxlib - - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib ramlib - ''' - - lib = Library('lambdalib_ramlib', package='lambdalib', auto_enable=True) - register_data_source(lib) - - lib.add('option', 'ydir', "ramlib/rtl") - - lib.use(auxlib) - - return lib +from .la_asyncfifo.la_asyncfifo import Asyncfifo +from .la_syncfifo.la_syncfifo import Syncfifo +from .la_dpram.la_dpram import Dpram +from .la_spram.la_spram import Spram + +__all__ = ['Asyncfifo', + 'Syncfifo', + 'Dpram', + 'Spram'] diff --git a/lambdalib/ramlib/la_asyncfifo/la_asyncfifo.py b/lambdalib/ramlib/la_asyncfifo/la_asyncfifo.py new file mode 100644 index 0000000..ea8cc7b --- /dev/null +++ b/lambdalib/ramlib/la_asyncfifo/la_asyncfifo.py @@ -0,0 +1,16 @@ +import lambdalib as ll + + +class Asyncfifo(ll.Lambda): + def __init__(self): + name = 'la_asyncfifo' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + for dep in [ll.auxlib.Drsync]: + self.add_depfileset(dep(), depfileset='rtl', fileset='rtl') + + +if __name__ == "__main__": + d = Asyncfifo() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/ramlib/rtl/la_asyncfifo.v b/lambdalib/ramlib/la_asyncfifo/rtl/la_asyncfifo.v similarity index 100% rename from lambdalib/ramlib/rtl/la_asyncfifo.v rename to lambdalib/ramlib/la_asyncfifo/rtl/la_asyncfifo.v diff --git a/lambdalib/ramlib/tests/la_asyncfifo.py b/lambdalib/ramlib/la_asyncfifo/testbench/la_asyncfifo.py similarity index 100% rename from lambdalib/ramlib/tests/la_asyncfifo.py rename to lambdalib/ramlib/la_asyncfifo/testbench/la_asyncfifo.py diff --git a/lambdalib/ramlib/tests/tb_la_asyncfifo.py b/lambdalib/ramlib/la_asyncfifo/testbench/tb_la_asyncfifo.py similarity index 96% rename from lambdalib/ramlib/tests/tb_la_asyncfifo.py rename to lambdalib/ramlib/la_asyncfifo/testbench/tb_la_asyncfifo.py index b1ac300..c704ee9 100644 --- a/lambdalib/ramlib/tests/tb_la_asyncfifo.py +++ b/lambdalib/ramlib/la_asyncfifo/testbench/tb_la_asyncfifo.py @@ -15,7 +15,7 @@ drive_reset, random_bool_generator ) -from lambdalib.ramlib.tests.la_asyncfifo import ( +from lambdalib.ramlib.la_asyncfifo.testbench.la_asyncfifo import ( LaAsyncFifoWrBus, LaAsyncFifoRdBus, LaAsyncFifoSource, @@ -163,7 +163,8 @@ async def fifo_rd_wr_test( def test_la_asyncfifo(): chip = siliconcompiler.Chip("la_asyncfifo") - chip.input("ramlib/rtl/la_asyncfifo.v", package='lambdalib') + # TODO: should not be needed? + chip.input("ramlib/la_asyncfifo/rtl/la_asyncfifo.v", package='lambdalib') chip.use(ramlib) for depth in [2, 4, 8]: diff --git a/lambdalib/ramlib/la_dpram/la_dpram.py b/lambdalib/ramlib/la_dpram/la_dpram.py new file mode 100644 index 0000000..fbad317 --- /dev/null +++ b/lambdalib/ramlib/la_dpram/la_dpram.py @@ -0,0 +1,14 @@ +from lambdalib import Lambda + + +class Dpram(Lambda): + def __init__(self): + name = 'la_dpram' + sources = [f'rtl/{name}.v', + 'rtl/la_dpram_impl.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dpram() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/ramlib/rtl/la_dpram.v b/lambdalib/ramlib/la_dpram/rtl/la_dpram.v similarity index 100% rename from lambdalib/ramlib/rtl/la_dpram.v rename to lambdalib/ramlib/la_dpram/rtl/la_dpram.v diff --git a/lambdalib/ramlib/rtl/la_dpram_impl.v b/lambdalib/ramlib/la_dpram/rtl/la_dpram_impl.v similarity index 100% rename from lambdalib/ramlib/rtl/la_dpram_impl.v rename to lambdalib/ramlib/la_dpram/rtl/la_dpram_impl.v diff --git a/lambdalib/ramlib/la_spram/la_spram.py b/lambdalib/ramlib/la_spram/la_spram.py new file mode 100644 index 0000000..acf5ebc --- /dev/null +++ b/lambdalib/ramlib/la_spram/la_spram.py @@ -0,0 +1,14 @@ +from lambdalib import Lambda + + +class Spram(Lambda): + def __init__(self): + name = 'la_spram' + sources = [f'rtl/{name}.v', + 'rtl/la_spram_impl.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Spram() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/ramlib/rtl/la_spram.v b/lambdalib/ramlib/la_spram/rtl/la_spram.v similarity index 100% rename from lambdalib/ramlib/rtl/la_spram.v rename to lambdalib/ramlib/la_spram/rtl/la_spram.v diff --git a/lambdalib/ramlib/rtl/la_spram_impl.v b/lambdalib/ramlib/la_spram/rtl/la_spram_impl.v similarity index 100% rename from lambdalib/ramlib/rtl/la_spram_impl.v rename to lambdalib/ramlib/la_spram/rtl/la_spram_impl.v diff --git a/lambdalib/ramlib/la_syncfifo/la_syncfifo.py b/lambdalib/ramlib/la_syncfifo/la_syncfifo.py new file mode 100644 index 0000000..1f60ad7 --- /dev/null +++ b/lambdalib/ramlib/la_syncfifo/la_syncfifo.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Syncfifo(Lambda): + def __init__(self): + name = 'la_syncfifo' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Syncfifo() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/ramlib/rtl/la_syncfifo.v b/lambdalib/ramlib/la_syncfifo/rtl/la_syncfifo.v similarity index 100% rename from lambdalib/ramlib/rtl/la_syncfifo.v rename to lambdalib/ramlib/la_syncfifo/rtl/la_syncfifo.v diff --git a/lambdalib/ramlib/rtl/la_spregfile.v b/lambdalib/ramlib/rtl/la_spregfile.v deleted file mode 100644 index 3bf5084..0000000 --- a/lambdalib/ramlib/rtl/la_spregfile.v +++ /dev/null @@ -1,67 +0,0 @@ -/***************************************************************************** - * Function: Single Port Register File - * Copyright: Lambda Project Authors. All rights Reserved. - * License: MIT (see LICENSE file in Lambda repository) - * - * Docs: - * - * This is a wrapper for selecting from a set of hardened register file macros. - * - * A synthesizable reference model is used when the PROP is DEFAULT. The - * synthesizable model does not implement the cfg and test interface and should - * only be used for basic testing and for synthesizing for FPGA devices. - * Advanced ASIC development should rely on complete functional models - * supplied on a per macro basis. - * - * Technologoy specific implementations of "la_spregfile" would generally - * include one or more hardcoded instantiations of RF modules with a generate - * statement relying on the "PROP" to select between the list of modules - * at build time. - * - ****************************************************************************/ - -module la_spregfile #( - parameter DW = 32, // Memory width - parameter AW = 10, // Address width (derived) - parameter PROP = "DEFAULT", // Pass through variable for hard macro - parameter CTRLW = 128, // Width of asic ctrl interface - parameter TESTW = 128 // Width of asic test interface -) ( // Memory interface - input clk, // write clock - input ce, // chip enable - input we, // write enable - input [ DW-1:0] wmask, //per bit write mask - input [ AW-1:0] addr, //write address - input [ DW-1:0] din, //write data - output [ DW-1:0] dout, //read output data - // Power signals - input vss, // ground signal - input vdd, // memory core array power - input vddio, // periphery/io power - // Generic interfaces - input [CTRLW-1:0] ctrl, // pass through ASIC control interface - input [TESTW-1:0] test // pass through ASIC test interface -); - - la_spram #( - .DW(DW), - .AW(AW), - .PROP(PROP), - .CTRLW(CTRLW), - .TESTW(TESTW) - ) memory ( - .clk(clk), - .ce(ce), - .we(we), - .wmask(wmask), - .addr(addr), - .din(din), - .dout(dout), - .vss(vss), - .vdd(vdd), - .vddio(vddio), - .ctrl(ctrl), - .test(test) - ); - -endmodule diff --git a/lambdalib/ramlib/tests/__init__.py b/lambdalib/ramlib/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/lambdalib/stdlib/__init__.py b/lambdalib/stdlib/__init__.py index 7e62a8f..340fe17 100644 --- a/lambdalib/stdlib/__init__.py +++ b/lambdalib/stdlib/__init__.py @@ -1,18 +1,193 @@ -from siliconcompiler import Library -from lambdalib._common import register_data_source +from .la_and2.la_and2 import And2 +from .la_and3.la_and3 import And3 +from .la_and4.la_and4 import And4 +from .la_ao21.la_ao21 import Ao21 +from .la_ao211.la_ao211 import Ao211 +from .la_ao22.la_ao22 import Ao22 +from .la_ao221.la_ao221 import Ao221 +from .la_ao222.la_ao222 import Ao222 +from .la_ao31.la_ao31 import Ao31 +from .la_ao311.la_ao311 import Ao311 +from .la_ao32.la_ao32 import Ao32 +from .la_ao33.la_ao33 import Ao33 +from .la_aoi21.la_aoi21 import Aoi21 +from .la_aoi211.la_aoi211 import Aoi211 +from .la_aoi22.la_aoi22 import Aoi22 +from .la_aoi221.la_aoi221 import Aoi221 +from .la_aoi222.la_aoi222 import Aoi222 +from .la_aoi31.la_aoi31 import Aoi31 +from .la_aoi311.la_aoi311 import Aoi311 +from .la_aoi32.la_aoi32 import Aoi32 +from .la_aoi33.la_aoi33 import Aoi33 +from .la_buf.la_buf import Buf +from .la_clkand2.la_clkand2 import Clkand2 +from .la_clkbuf.la_clkbuf import Clkbuf +from .la_clkinv.la_clkinv import Clkinv +from .la_clknand2.la_clknand2 import Clknand2 +from .la_clknor2.la_clknor2 import Clknor2 +from .la_clkor2.la_clkor2 import Clkor2 +from .la_clkor4.la_clkor4 import Clkor4 +from .la_clkxor2.la_clkxor2 import Clkxor2 +from .la_csa32.la_csa32 import Csa32 +from .la_csa42.la_csa42 import Csa42 +from .la_delay.la_delay import Delay +from .la_dffnq.la_dffnq import Dffnq +from .la_dffq.la_dffq import Dffq +from .la_dffqn.la_dffqn import Dffqn +from .la_dffrq.la_dffrq import Dffrq +from .la_dffrqn.la_dffrqn import Dffrqn +from .la_dffsq.la_dffsq import Dffsq +from .la_dffsqn.la_dffsqn import Dffsqn +from .la_dmux2.la_dmux2 import Dmux2 +from .la_dmux3.la_dmux3 import Dmux3 +from .la_dmux4.la_dmux4 import Dmux4 +from .la_dmux5.la_dmux5 import Dmux5 +from .la_dmux6.la_dmux6 import Dmux6 +from .la_dmux7.la_dmux7 import Dmux7 +from .la_dmux8.la_dmux8 import Dmux8 +from .la_inv.la_inv import Inv +from .la_latnq.la_latnq import Latnq +from .la_latq.la_latq import Latq +from .la_mux2.la_mux2 import Mux2 +from .la_mux3.la_mux3 import Mux3 +from .la_mux4.la_mux4 import Mux4 +from .la_muxi2.la_muxi2 import Muxi2 +from .la_muxi3.la_muxi3 import Muxi3 +from .la_muxi4.la_muxi4 import Muxi4 +from .la_nand2.la_nand2 import Nand2 +from .la_nand3.la_nand3 import Nand3 +from .la_nand4.la_nand4 import Nand4 +from .la_nor2.la_nor2 import Nor2 +from .la_nor3.la_nor3 import Nor3 +from .la_nor4.la_nor4 import Nor4 +from .la_oa21.la_oa21 import Oa21 +from .la_oa211.la_oa211 import Oa211 +from .la_oa22.la_oa22 import Oa22 +from .la_oa221.la_oa221 import Oa221 +from .la_oa222.la_oa222 import Oa222 +from .la_oa31.la_oa31 import Oa31 +from .la_oa311.la_oa311 import Oa311 +from .la_oa32.la_oa32 import Oa32 +from .la_oa33.la_oa33 import Oa33 +from .la_oai21.la_oai21 import Oai21 +from .la_oai22.la_oai22 import Oai22 +from .la_oai221.la_oai221 import Oai221 +from .la_oai222.la_oai222 import Oai222 +from .la_oai31.la_oai31 import Oai31 +from .la_oai311.la_oai311 import Oai311 +from .la_oai32.la_oai32 import Oai32 +from .la_oai33.la_oai33 import Oai33 +from .la_or2.la_or2 import Or2 +from .la_or3.la_or3 import Or3 +from .la_or4.la_or4 import Or4 +from .la_sdffq.la_sdffq import Sdffq +from .la_sdffqn.la_sdffqn import Sdffqn +from .la_sdffrq.la_sdffrq import Sdffrq +from .la_sdffrqn.la_sdffrqn import Sdffrqn +from .la_sdffsq.la_sdffsq import Sdffsq +from .la_sdffsqn.la_sdffsqn import Sdffsqn +from .la_tiehi.la_tiehi import Tiehi +from .la_tielo.la_tielo import Tielo +from .la_xnor2.la_xnor2 import Xnor2 +from .la_xnor3.la_xnor3 import Xnor3 +from .la_xnor4.la_xnor4 import Xnor4 +from .la_xor2.la_xor2 import Xor2 +from .la_xor3.la_xor3 import Xor3 +from .la_xor4.la_xor4 import Xor4 - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib stdlib - ''' - - lib = Library('lambdalib_stdlib', package='lambdalib', auto_enable=True) - register_data_source(lib) - - lib.add('option', 'ydir', "stdlib/rtl") - - return lib +__all__ = ['And2', + 'And3', + 'And4', + 'Ao21', + 'Ao211', + 'Ao22', + 'Ao221', + 'Ao222', + 'Ao31', + 'Ao311', + 'Ao32', + 'Ao33', + 'Aoi21', + 'Aoi211', + 'Aoi22', + 'Aoi221', + 'Aoi222', + 'Aoi31', + 'Aoi311', + 'Aoi32', + 'Aoi33', + 'Buf', + 'Clkand2', + 'Clkbuf', + 'Clkinv', + 'Clknand2', + 'Clknor2', + 'Clkor2', + 'Clkor4', + 'Clkxor2', + 'Csa32', + 'Csa42', + 'Delay', + 'Dffnq', + 'Dffq', + 'Dffqn', + 'Dffrq', + 'Dffrqn', + 'Dffsq', + 'Dffsqn', + 'Dmux2', + 'Dmux3', + 'Dmux4', + 'Dmux5', + 'Dmux6', + 'Dmux7', + 'Dmux8', + 'Inv', + 'Latnq', + 'Latq', + 'Mux2', + 'Mux3', + 'Mux4', + 'Muxi2', + 'Muxi3', + 'Muxi4', + 'Nand2', + 'Nand3', + 'Nand4', + 'Nor2', + 'Nor3', + 'Nor4', + 'Oa21', + 'Oa211', + 'Oa22', + 'Oa221', + 'Oa222', + 'Oa31', + 'Oa311', + 'Oa32', + 'Oa33', + 'Oai21', + 'Oai22', + 'Oai221', + 'Oai222', + 'Oai31', + 'Oai311', + 'Oai32', + 'Oai33', + 'Or2', + 'Or3', + 'Or4', + 'Sdffq', + 'Sdffqn', + 'Sdffrq', + 'Sdffrqn', + 'Sdffsq', + 'Sdffsqn', + 'Tiehi', + 'Tielo', + 'Xnor2', + 'Xnor3', + 'Xnor4', + 'Xor2', + 'Xor3', + 'Xor4'] diff --git a/lambdalib/stdlib/la_and2/la_and2.py b/lambdalib/stdlib/la_and2/la_and2.py new file mode 100644 index 0000000..b1b7532 --- /dev/null +++ b/lambdalib/stdlib/la_and2/la_and2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class And2(Lambda): + def __init__(self): + name = 'la_and2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = And2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_and2.v b/lambdalib/stdlib/la_and2/rtl/la_and2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_and2.v rename to lambdalib/stdlib/la_and2/rtl/la_and2.v diff --git a/lambdalib/stdlib/la_and3/la_and3.py b/lambdalib/stdlib/la_and3/la_and3.py new file mode 100644 index 0000000..10ac173 --- /dev/null +++ b/lambdalib/stdlib/la_and3/la_and3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class And3(Lambda): + def __init__(self): + name = 'la_and3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = And3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_and3.v b/lambdalib/stdlib/la_and3/rtl/la_and3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_and3.v rename to lambdalib/stdlib/la_and3/rtl/la_and3.v diff --git a/lambdalib/stdlib/la_and4/la_and4.py b/lambdalib/stdlib/la_and4/la_and4.py new file mode 100644 index 0000000..2a65cb4 --- /dev/null +++ b/lambdalib/stdlib/la_and4/la_and4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class And4(Lambda): + def __init__(self): + name = 'la_and4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = And4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_and4.v b/lambdalib/stdlib/la_and4/rtl/la_and4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_and4.v rename to lambdalib/stdlib/la_and4/rtl/la_and4.v diff --git a/lambdalib/stdlib/la_ao21/la_ao21.py b/lambdalib/stdlib/la_ao21/la_ao21.py new file mode 100644 index 0000000..7f987a0 --- /dev/null +++ b/lambdalib/stdlib/la_ao21/la_ao21.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao21(Lambda): + def __init__(self): + name = 'la_ao21' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao21() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao21.v b/lambdalib/stdlib/la_ao21/rtl/la_ao21.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao21.v rename to lambdalib/stdlib/la_ao21/rtl/la_ao21.v diff --git a/lambdalib/stdlib/la_ao211/la_ao211.py b/lambdalib/stdlib/la_ao211/la_ao211.py new file mode 100644 index 0000000..31e0150 --- /dev/null +++ b/lambdalib/stdlib/la_ao211/la_ao211.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao211(Lambda): + def __init__(self): + name = 'la_ao211' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao211() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao211.v b/lambdalib/stdlib/la_ao211/rtl/la_ao211.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao211.v rename to lambdalib/stdlib/la_ao211/rtl/la_ao211.v diff --git a/lambdalib/stdlib/la_ao22/la_ao22.py b/lambdalib/stdlib/la_ao22/la_ao22.py new file mode 100644 index 0000000..692cbe1 --- /dev/null +++ b/lambdalib/stdlib/la_ao22/la_ao22.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao22(Lambda): + def __init__(self): + name = 'la_ao22' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao22() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao22.v b/lambdalib/stdlib/la_ao22/rtl/la_ao22.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao22.v rename to lambdalib/stdlib/la_ao22/rtl/la_ao22.v diff --git a/lambdalib/stdlib/la_ao221/la_ao221.py b/lambdalib/stdlib/la_ao221/la_ao221.py new file mode 100644 index 0000000..d127d29 --- /dev/null +++ b/lambdalib/stdlib/la_ao221/la_ao221.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao221(Lambda): + def __init__(self): + name = 'la_ao221' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao221() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao221.v b/lambdalib/stdlib/la_ao221/rtl/la_ao221.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao221.v rename to lambdalib/stdlib/la_ao221/rtl/la_ao221.v diff --git a/lambdalib/stdlib/la_ao222/la_ao222.py b/lambdalib/stdlib/la_ao222/la_ao222.py new file mode 100644 index 0000000..d09ece1 --- /dev/null +++ b/lambdalib/stdlib/la_ao222/la_ao222.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao222(Lambda): + def __init__(self): + name = 'la_ao222' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao222() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao222.v b/lambdalib/stdlib/la_ao222/rtl/la_ao222.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao222.v rename to lambdalib/stdlib/la_ao222/rtl/la_ao222.v diff --git a/lambdalib/stdlib/la_ao31/la_ao31.py b/lambdalib/stdlib/la_ao31/la_ao31.py new file mode 100644 index 0000000..3664078 --- /dev/null +++ b/lambdalib/stdlib/la_ao31/la_ao31.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao31(Lambda): + def __init__(self): + name = 'la_ao31' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao31() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao31.v b/lambdalib/stdlib/la_ao31/rtl/la_ao31.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao31.v rename to lambdalib/stdlib/la_ao31/rtl/la_ao31.v diff --git a/lambdalib/stdlib/la_ao311/la_ao311.py b/lambdalib/stdlib/la_ao311/la_ao311.py new file mode 100644 index 0000000..2d7f844 --- /dev/null +++ b/lambdalib/stdlib/la_ao311/la_ao311.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao311(Lambda): + def __init__(self): + name = 'la_ao311' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao311() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao311.v b/lambdalib/stdlib/la_ao311/rtl/la_ao311.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao311.v rename to lambdalib/stdlib/la_ao311/rtl/la_ao311.v diff --git a/lambdalib/stdlib/la_ao32/la_ao32.py b/lambdalib/stdlib/la_ao32/la_ao32.py new file mode 100644 index 0000000..bee2f1d --- /dev/null +++ b/lambdalib/stdlib/la_ao32/la_ao32.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao32(Lambda): + def __init__(self): + name = 'la_ao32' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao32() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao32.v b/lambdalib/stdlib/la_ao32/rtl/la_ao32.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao32.v rename to lambdalib/stdlib/la_ao32/rtl/la_ao32.v diff --git a/lambdalib/stdlib/la_ao33/la_ao33.py b/lambdalib/stdlib/la_ao33/la_ao33.py new file mode 100644 index 0000000..cacffcf --- /dev/null +++ b/lambdalib/stdlib/la_ao33/la_ao33.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Ao33(Lambda): + def __init__(self): + name = 'la_ao33' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Ao33() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_ao33.v b/lambdalib/stdlib/la_ao33/rtl/la_ao33.v similarity index 100% rename from lambdalib/stdlib/rtl/la_ao33.v rename to lambdalib/stdlib/la_ao33/rtl/la_ao33.v diff --git a/lambdalib/stdlib/la_aoi21/la_aoi21.py b/lambdalib/stdlib/la_aoi21/la_aoi21.py new file mode 100644 index 0000000..416d448 --- /dev/null +++ b/lambdalib/stdlib/la_aoi21/la_aoi21.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi21(Lambda): + def __init__(self): + name = 'la_aoi21' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi21() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi21.v b/lambdalib/stdlib/la_aoi21/rtl/la_aoi21.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi21.v rename to lambdalib/stdlib/la_aoi21/rtl/la_aoi21.v diff --git a/lambdalib/stdlib/la_aoi211/la_aoi211.py b/lambdalib/stdlib/la_aoi211/la_aoi211.py new file mode 100644 index 0000000..6613be8 --- /dev/null +++ b/lambdalib/stdlib/la_aoi211/la_aoi211.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi211(Lambda): + def __init__(self): + name = 'la_aoi211' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi211() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi211.v b/lambdalib/stdlib/la_aoi211/rtl/la_aoi211.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi211.v rename to lambdalib/stdlib/la_aoi211/rtl/la_aoi211.v diff --git a/lambdalib/stdlib/la_aoi22/la_aoi22.py b/lambdalib/stdlib/la_aoi22/la_aoi22.py new file mode 100644 index 0000000..39a7de5 --- /dev/null +++ b/lambdalib/stdlib/la_aoi22/la_aoi22.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi22(Lambda): + def __init__(self): + name = 'la_aoi22' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi22() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi22.v b/lambdalib/stdlib/la_aoi22/rtl/la_aoi22.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi22.v rename to lambdalib/stdlib/la_aoi22/rtl/la_aoi22.v diff --git a/lambdalib/stdlib/la_aoi221/la_aoi221.py b/lambdalib/stdlib/la_aoi221/la_aoi221.py new file mode 100644 index 0000000..038c3f6 --- /dev/null +++ b/lambdalib/stdlib/la_aoi221/la_aoi221.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi221(Lambda): + def __init__(self): + name = 'la_aoi221' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi221() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi221.v b/lambdalib/stdlib/la_aoi221/rtl/la_aoi221.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi221.v rename to lambdalib/stdlib/la_aoi221/rtl/la_aoi221.v diff --git a/lambdalib/stdlib/la_aoi222/la_aoi222.py b/lambdalib/stdlib/la_aoi222/la_aoi222.py new file mode 100644 index 0000000..0d2572b --- /dev/null +++ b/lambdalib/stdlib/la_aoi222/la_aoi222.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi222(Lambda): + def __init__(self): + name = 'la_aoi222' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi222() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi222.v b/lambdalib/stdlib/la_aoi222/rtl/la_aoi222.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi222.v rename to lambdalib/stdlib/la_aoi222/rtl/la_aoi222.v diff --git a/lambdalib/stdlib/la_aoi31/la_aoi31.py b/lambdalib/stdlib/la_aoi31/la_aoi31.py new file mode 100644 index 0000000..e5e13e2 --- /dev/null +++ b/lambdalib/stdlib/la_aoi31/la_aoi31.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi31(Lambda): + def __init__(self): + name = 'la_aoi31' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi31() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi31.v b/lambdalib/stdlib/la_aoi31/rtl/la_aoi31.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi31.v rename to lambdalib/stdlib/la_aoi31/rtl/la_aoi31.v diff --git a/lambdalib/stdlib/la_aoi311/la_aoi311.py b/lambdalib/stdlib/la_aoi311/la_aoi311.py new file mode 100644 index 0000000..e8a4815 --- /dev/null +++ b/lambdalib/stdlib/la_aoi311/la_aoi311.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi311(Lambda): + def __init__(self): + name = 'la_aoi311' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi311() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi311.v b/lambdalib/stdlib/la_aoi311/rtl/la_aoi311.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi311.v rename to lambdalib/stdlib/la_aoi311/rtl/la_aoi311.v diff --git a/lambdalib/stdlib/la_aoi32/la_aoi32.py b/lambdalib/stdlib/la_aoi32/la_aoi32.py new file mode 100644 index 0000000..ac582ec --- /dev/null +++ b/lambdalib/stdlib/la_aoi32/la_aoi32.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi32(Lambda): + def __init__(self): + name = 'la_aoi32' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi32() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi32.v b/lambdalib/stdlib/la_aoi32/rtl/la_aoi32.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi32.v rename to lambdalib/stdlib/la_aoi32/rtl/la_aoi32.v diff --git a/lambdalib/stdlib/la_aoi33/la_aoi33.py b/lambdalib/stdlib/la_aoi33/la_aoi33.py new file mode 100644 index 0000000..24e99ee --- /dev/null +++ b/lambdalib/stdlib/la_aoi33/la_aoi33.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Aoi33(Lambda): + def __init__(self): + name = 'la_aoi33' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Aoi33() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_aoi33.v b/lambdalib/stdlib/la_aoi33/rtl/la_aoi33.v similarity index 100% rename from lambdalib/stdlib/rtl/la_aoi33.v rename to lambdalib/stdlib/la_aoi33/rtl/la_aoi33.v diff --git a/lambdalib/stdlib/la_buf/la_buf.py b/lambdalib/stdlib/la_buf/la_buf.py new file mode 100644 index 0000000..d6960ad --- /dev/null +++ b/lambdalib/stdlib/la_buf/la_buf.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Buf(Lambda): + def __init__(self): + name = 'la_buf' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Buf() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_buf.v b/lambdalib/stdlib/la_buf/rtl/la_buf.v similarity index 100% rename from lambdalib/stdlib/rtl/la_buf.v rename to lambdalib/stdlib/la_buf/rtl/la_buf.v diff --git a/lambdalib/stdlib/la_clkand2/la_clkand2.py b/lambdalib/stdlib/la_clkand2/la_clkand2.py new file mode 100644 index 0000000..0ab7e8b --- /dev/null +++ b/lambdalib/stdlib/la_clkand2/la_clkand2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkand2(Lambda): + def __init__(self): + name = 'la_clkand2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkand2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clkand2.v b/lambdalib/stdlib/la_clkand2/rtl/la_clkand2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clkand2.v rename to lambdalib/stdlib/la_clkand2/rtl/la_clkand2.v diff --git a/lambdalib/stdlib/la_clkbuf/la_clkbuf.py b/lambdalib/stdlib/la_clkbuf/la_clkbuf.py new file mode 100644 index 0000000..da3fbc4 --- /dev/null +++ b/lambdalib/stdlib/la_clkbuf/la_clkbuf.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkbuf(Lambda): + def __init__(self): + name = 'la_clkbuf' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkbuf() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clkbuf.v b/lambdalib/stdlib/la_clkbuf/rtl/la_clkbuf.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clkbuf.v rename to lambdalib/stdlib/la_clkbuf/rtl/la_clkbuf.v diff --git a/lambdalib/stdlib/la_clkinv/la_clkinv.py b/lambdalib/stdlib/la_clkinv/la_clkinv.py new file mode 100644 index 0000000..b05b5f0 --- /dev/null +++ b/lambdalib/stdlib/la_clkinv/la_clkinv.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkinv(Lambda): + def __init__(self): + name = 'la_clkinv' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkinv() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clkinv.v b/lambdalib/stdlib/la_clkinv/rtl/la_clkinv.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clkinv.v rename to lambdalib/stdlib/la_clkinv/rtl/la_clkinv.v diff --git a/lambdalib/stdlib/la_clknand2/la_clknand2.py b/lambdalib/stdlib/la_clknand2/la_clknand2.py new file mode 100644 index 0000000..3458808 --- /dev/null +++ b/lambdalib/stdlib/la_clknand2/la_clknand2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clknand2(Lambda): + def __init__(self): + name = 'la_clknand2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clknand2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clknand2.v b/lambdalib/stdlib/la_clknand2/rtl/la_clknand2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clknand2.v rename to lambdalib/stdlib/la_clknand2/rtl/la_clknand2.v diff --git a/lambdalib/stdlib/la_clknor2/la_clknor2.py b/lambdalib/stdlib/la_clknor2/la_clknor2.py new file mode 100644 index 0000000..43aeb65 --- /dev/null +++ b/lambdalib/stdlib/la_clknor2/la_clknor2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clknor2(Lambda): + def __init__(self): + name = 'la_clknor2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clknor2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clknor2.v b/lambdalib/stdlib/la_clknor2/rtl/la_clknor2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clknor2.v rename to lambdalib/stdlib/la_clknor2/rtl/la_clknor2.v diff --git a/lambdalib/stdlib/la_clkor2/la_clkor2.py b/lambdalib/stdlib/la_clkor2/la_clkor2.py new file mode 100644 index 0000000..f2bfeea --- /dev/null +++ b/lambdalib/stdlib/la_clkor2/la_clkor2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkor2(Lambda): + def __init__(self): + name = 'la_clkor2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkor2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clkor2.v b/lambdalib/stdlib/la_clkor2/rtl/la_clkor2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clkor2.v rename to lambdalib/stdlib/la_clkor2/rtl/la_clkor2.v diff --git a/lambdalib/stdlib/la_clkor4/la_clkor4.py b/lambdalib/stdlib/la_clkor4/la_clkor4.py new file mode 100644 index 0000000..cbba5e0 --- /dev/null +++ b/lambdalib/stdlib/la_clkor4/la_clkor4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkor4(Lambda): + def __init__(self): + name = 'la_clkor4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkor4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clkor4.v b/lambdalib/stdlib/la_clkor4/rtl/la_clkor4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clkor4.v rename to lambdalib/stdlib/la_clkor4/rtl/la_clkor4.v diff --git a/lambdalib/stdlib/la_clkxor2/la_clkxor2.py b/lambdalib/stdlib/la_clkxor2/la_clkxor2.py new file mode 100644 index 0000000..597a43b --- /dev/null +++ b/lambdalib/stdlib/la_clkxor2/la_clkxor2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Clkxor2(Lambda): + def __init__(self): + name = 'la_clkxor2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Clkxor2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_clkxor2.v b/lambdalib/stdlib/la_clkxor2/rtl/la_clkxor2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_clkxor2.v rename to lambdalib/stdlib/la_clkxor2/rtl/la_clkxor2.v diff --git a/lambdalib/stdlib/la_csa32/la_csa32.py b/lambdalib/stdlib/la_csa32/la_csa32.py new file mode 100644 index 0000000..7fe3bbb --- /dev/null +++ b/lambdalib/stdlib/la_csa32/la_csa32.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Csa32(Lambda): + def __init__(self): + name = 'la_csa32' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Csa32() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_csa32.v b/lambdalib/stdlib/la_csa32/rtl/la_csa32.v similarity index 100% rename from lambdalib/stdlib/rtl/la_csa32.v rename to lambdalib/stdlib/la_csa32/rtl/la_csa32.v diff --git a/lambdalib/stdlib/la_csa42/la_csa42.py b/lambdalib/stdlib/la_csa42/la_csa42.py new file mode 100644 index 0000000..0404ed9 --- /dev/null +++ b/lambdalib/stdlib/la_csa42/la_csa42.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Csa42(Lambda): + def __init__(self): + name = 'la_csa42' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Csa42() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_csa42.v b/lambdalib/stdlib/la_csa42/rtl/la_csa42.v similarity index 100% rename from lambdalib/stdlib/rtl/la_csa42.v rename to lambdalib/stdlib/la_csa42/rtl/la_csa42.v diff --git a/lambdalib/stdlib/la_delay/la_delay.py b/lambdalib/stdlib/la_delay/la_delay.py new file mode 100644 index 0000000..9feb1fb --- /dev/null +++ b/lambdalib/stdlib/la_delay/la_delay.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Delay(Lambda): + def __init__(self): + name = 'la_delay' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Delay() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_delay.v b/lambdalib/stdlib/la_delay/rtl/la_delay.v similarity index 100% rename from lambdalib/stdlib/rtl/la_delay.v rename to lambdalib/stdlib/la_delay/rtl/la_delay.v diff --git a/lambdalib/stdlib/la_dffnq/la_dffnq.py b/lambdalib/stdlib/la_dffnq/la_dffnq.py new file mode 100644 index 0000000..e7d27d2 --- /dev/null +++ b/lambdalib/stdlib/la_dffnq/la_dffnq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dffnq(Lambda): + def __init__(self): + name = 'la_dffnq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dffnq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dffnq.v b/lambdalib/stdlib/la_dffnq/rtl/la_dffnq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dffnq.v rename to lambdalib/stdlib/la_dffnq/rtl/la_dffnq.v diff --git a/lambdalib/stdlib/la_dffq/la_dffq.py b/lambdalib/stdlib/la_dffq/la_dffq.py new file mode 100644 index 0000000..b0443f5 --- /dev/null +++ b/lambdalib/stdlib/la_dffq/la_dffq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dffq(Lambda): + def __init__(self): + name = 'la_dffq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dffq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dffq.v b/lambdalib/stdlib/la_dffq/rtl/la_dffq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dffq.v rename to lambdalib/stdlib/la_dffq/rtl/la_dffq.v diff --git a/lambdalib/stdlib/la_dffqn/la_dffqn.py b/lambdalib/stdlib/la_dffqn/la_dffqn.py new file mode 100644 index 0000000..3aef5b2 --- /dev/null +++ b/lambdalib/stdlib/la_dffqn/la_dffqn.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dffqn(Lambda): + def __init__(self): + name = 'la_dffqn' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dffqn() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dffqn.v b/lambdalib/stdlib/la_dffqn/rtl/la_dffqn.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dffqn.v rename to lambdalib/stdlib/la_dffqn/rtl/la_dffqn.v diff --git a/lambdalib/stdlib/la_dffrq/la_dffrq.py b/lambdalib/stdlib/la_dffrq/la_dffrq.py new file mode 100644 index 0000000..7d4fb70 --- /dev/null +++ b/lambdalib/stdlib/la_dffrq/la_dffrq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dffrq(Lambda): + def __init__(self): + name = 'la_dffrq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dffrq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dffrq.v b/lambdalib/stdlib/la_dffrq/rtl/la_dffrq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dffrq.v rename to lambdalib/stdlib/la_dffrq/rtl/la_dffrq.v diff --git a/lambdalib/stdlib/la_dffrqn/la_dffrqn.py b/lambdalib/stdlib/la_dffrqn/la_dffrqn.py new file mode 100644 index 0000000..8defda1 --- /dev/null +++ b/lambdalib/stdlib/la_dffrqn/la_dffrqn.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dffrqn(Lambda): + def __init__(self): + name = 'la_dffrqn' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dffrqn() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dffrqn.v b/lambdalib/stdlib/la_dffrqn/rtl/la_dffrqn.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dffrqn.v rename to lambdalib/stdlib/la_dffrqn/rtl/la_dffrqn.v diff --git a/lambdalib/stdlib/la_dffsq/la_dffsq.py b/lambdalib/stdlib/la_dffsq/la_dffsq.py new file mode 100644 index 0000000..ca8ccd2 --- /dev/null +++ b/lambdalib/stdlib/la_dffsq/la_dffsq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dffsq(Lambda): + def __init__(self): + name = 'la_dffsq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dffsq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dffsq.v b/lambdalib/stdlib/la_dffsq/rtl/la_dffsq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dffsq.v rename to lambdalib/stdlib/la_dffsq/rtl/la_dffsq.v diff --git a/lambdalib/stdlib/la_dffsqn/la_dffsqn.py b/lambdalib/stdlib/la_dffsqn/la_dffsqn.py new file mode 100644 index 0000000..34888e2 --- /dev/null +++ b/lambdalib/stdlib/la_dffsqn/la_dffsqn.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dffsqn(Lambda): + def __init__(self): + name = 'la_dffsqn' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dffsqn() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dffsqn.v b/lambdalib/stdlib/la_dffsqn/rtl/la_dffsqn.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dffsqn.v rename to lambdalib/stdlib/la_dffsqn/rtl/la_dffsqn.v diff --git a/lambdalib/stdlib/la_dmux2/la_dmux2.py b/lambdalib/stdlib/la_dmux2/la_dmux2.py new file mode 100644 index 0000000..df592d5 --- /dev/null +++ b/lambdalib/stdlib/la_dmux2/la_dmux2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dmux2(Lambda): + def __init__(self): + name = 'la_dmux2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dmux2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dmux2.v b/lambdalib/stdlib/la_dmux2/rtl/la_dmux2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dmux2.v rename to lambdalib/stdlib/la_dmux2/rtl/la_dmux2.v diff --git a/lambdalib/stdlib/la_dmux3/la_dmux3.py b/lambdalib/stdlib/la_dmux3/la_dmux3.py new file mode 100644 index 0000000..989b3aa --- /dev/null +++ b/lambdalib/stdlib/la_dmux3/la_dmux3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dmux3(Lambda): + def __init__(self): + name = 'la_dmux3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dmux3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dmux3.v b/lambdalib/stdlib/la_dmux3/rtl/la_dmux3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dmux3.v rename to lambdalib/stdlib/la_dmux3/rtl/la_dmux3.v diff --git a/lambdalib/stdlib/la_dmux4/la_dmux4.py b/lambdalib/stdlib/la_dmux4/la_dmux4.py new file mode 100644 index 0000000..07ba63a --- /dev/null +++ b/lambdalib/stdlib/la_dmux4/la_dmux4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dmux4(Lambda): + def __init__(self): + name = 'la_dmux4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dmux4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dmux4.v b/lambdalib/stdlib/la_dmux4/rtl/la_dmux4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dmux4.v rename to lambdalib/stdlib/la_dmux4/rtl/la_dmux4.v diff --git a/lambdalib/stdlib/la_dmux5/la_dmux5.py b/lambdalib/stdlib/la_dmux5/la_dmux5.py new file mode 100644 index 0000000..024594d --- /dev/null +++ b/lambdalib/stdlib/la_dmux5/la_dmux5.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dmux5(Lambda): + def __init__(self): + name = 'la_dmux5' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dmux5() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dmux5.v b/lambdalib/stdlib/la_dmux5/rtl/la_dmux5.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dmux5.v rename to lambdalib/stdlib/la_dmux5/rtl/la_dmux5.v diff --git a/lambdalib/stdlib/la_dmux6/la_dmux6.py b/lambdalib/stdlib/la_dmux6/la_dmux6.py new file mode 100644 index 0000000..0b1d978 --- /dev/null +++ b/lambdalib/stdlib/la_dmux6/la_dmux6.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dmux6(Lambda): + def __init__(self): + name = 'la_dmux6' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dmux6() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dmux6.v b/lambdalib/stdlib/la_dmux6/rtl/la_dmux6.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dmux6.v rename to lambdalib/stdlib/la_dmux6/rtl/la_dmux6.v diff --git a/lambdalib/stdlib/la_dmux7/la_dmux7.py b/lambdalib/stdlib/la_dmux7/la_dmux7.py new file mode 100644 index 0000000..e1ff70b --- /dev/null +++ b/lambdalib/stdlib/la_dmux7/la_dmux7.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dmux7(Lambda): + def __init__(self): + name = 'la_dmux7' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dmux7() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dmux7.v b/lambdalib/stdlib/la_dmux7/rtl/la_dmux7.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dmux7.v rename to lambdalib/stdlib/la_dmux7/rtl/la_dmux7.v diff --git a/lambdalib/stdlib/la_dmux8/la_dmux8.py b/lambdalib/stdlib/la_dmux8/la_dmux8.py new file mode 100644 index 0000000..e6abc12 --- /dev/null +++ b/lambdalib/stdlib/la_dmux8/la_dmux8.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Dmux8(Lambda): + def __init__(self): + name = 'la_dmux8' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Dmux8() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_dmux8.v b/lambdalib/stdlib/la_dmux8/rtl/la_dmux8.v similarity index 100% rename from lambdalib/stdlib/rtl/la_dmux8.v rename to lambdalib/stdlib/la_dmux8/rtl/la_dmux8.v diff --git a/lambdalib/stdlib/la_inv/la_inv.py b/lambdalib/stdlib/la_inv/la_inv.py new file mode 100644 index 0000000..fb9d420 --- /dev/null +++ b/lambdalib/stdlib/la_inv/la_inv.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Inv(Lambda): + def __init__(self): + name = 'la_inv' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Inv() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_inv.v b/lambdalib/stdlib/la_inv/rtl/la_inv.v similarity index 100% rename from lambdalib/stdlib/rtl/la_inv.v rename to lambdalib/stdlib/la_inv/rtl/la_inv.v diff --git a/lambdalib/stdlib/la_latnq/la_latnq.py b/lambdalib/stdlib/la_latnq/la_latnq.py new file mode 100644 index 0000000..11d7e3e --- /dev/null +++ b/lambdalib/stdlib/la_latnq/la_latnq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Latnq(Lambda): + def __init__(self): + name = 'la_latnq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Latnq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_latnq.v b/lambdalib/stdlib/la_latnq/rtl/la_latnq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_latnq.v rename to lambdalib/stdlib/la_latnq/rtl/la_latnq.v diff --git a/lambdalib/stdlib/la_latq/la_latq.py b/lambdalib/stdlib/la_latq/la_latq.py new file mode 100644 index 0000000..3c21ccc --- /dev/null +++ b/lambdalib/stdlib/la_latq/la_latq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Latq(Lambda): + def __init__(self): + name = 'la_latq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Latq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_latq.v b/lambdalib/stdlib/la_latq/rtl/la_latq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_latq.v rename to lambdalib/stdlib/la_latq/rtl/la_latq.v diff --git a/lambdalib/stdlib/la_mux2/la_mux2.py b/lambdalib/stdlib/la_mux2/la_mux2.py new file mode 100644 index 0000000..d64067d --- /dev/null +++ b/lambdalib/stdlib/la_mux2/la_mux2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Mux2(Lambda): + def __init__(self): + name = 'la_mux2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Mux2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_mux2.v b/lambdalib/stdlib/la_mux2/rtl/la_mux2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_mux2.v rename to lambdalib/stdlib/la_mux2/rtl/la_mux2.v diff --git a/lambdalib/stdlib/la_mux3/la_mux3.py b/lambdalib/stdlib/la_mux3/la_mux3.py new file mode 100644 index 0000000..f384a99 --- /dev/null +++ b/lambdalib/stdlib/la_mux3/la_mux3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Mux3(Lambda): + def __init__(self): + name = 'la_mux3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Mux3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_mux3.v b/lambdalib/stdlib/la_mux3/rtl/la_mux3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_mux3.v rename to lambdalib/stdlib/la_mux3/rtl/la_mux3.v diff --git a/lambdalib/stdlib/la_mux4/la_mux4.py b/lambdalib/stdlib/la_mux4/la_mux4.py new file mode 100644 index 0000000..5e3dfc8 --- /dev/null +++ b/lambdalib/stdlib/la_mux4/la_mux4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Mux4(Lambda): + def __init__(self): + name = 'la_mux4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Mux4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_mux4.v b/lambdalib/stdlib/la_mux4/rtl/la_mux4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_mux4.v rename to lambdalib/stdlib/la_mux4/rtl/la_mux4.v diff --git a/lambdalib/stdlib/la_muxi2/la_muxi2.py b/lambdalib/stdlib/la_muxi2/la_muxi2.py new file mode 100644 index 0000000..18e3bba --- /dev/null +++ b/lambdalib/stdlib/la_muxi2/la_muxi2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Muxi2(Lambda): + def __init__(self): + name = 'la_muxi2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Muxi2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_muxi2.v b/lambdalib/stdlib/la_muxi2/rtl/la_muxi2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_muxi2.v rename to lambdalib/stdlib/la_muxi2/rtl/la_muxi2.v diff --git a/lambdalib/stdlib/la_muxi3/la_muxi3.py b/lambdalib/stdlib/la_muxi3/la_muxi3.py new file mode 100644 index 0000000..1ab617c --- /dev/null +++ b/lambdalib/stdlib/la_muxi3/la_muxi3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Muxi3(Lambda): + def __init__(self): + name = 'la_muxi3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Muxi3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_muxi3.v b/lambdalib/stdlib/la_muxi3/rtl/la_muxi3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_muxi3.v rename to lambdalib/stdlib/la_muxi3/rtl/la_muxi3.v diff --git a/lambdalib/stdlib/la_muxi4/la_muxi4.py b/lambdalib/stdlib/la_muxi4/la_muxi4.py new file mode 100644 index 0000000..56f4c53 --- /dev/null +++ b/lambdalib/stdlib/la_muxi4/la_muxi4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Muxi4(Lambda): + def __init__(self): + name = 'la_muxi4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Muxi4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_muxi4.v b/lambdalib/stdlib/la_muxi4/rtl/la_muxi4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_muxi4.v rename to lambdalib/stdlib/la_muxi4/rtl/la_muxi4.v diff --git a/lambdalib/stdlib/la_nand2/la_nand2.py b/lambdalib/stdlib/la_nand2/la_nand2.py new file mode 100644 index 0000000..2fc669f --- /dev/null +++ b/lambdalib/stdlib/la_nand2/la_nand2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Nand2(Lambda): + def __init__(self): + name = 'la_nand2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Nand2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_nand2.v b/lambdalib/stdlib/la_nand2/rtl/la_nand2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_nand2.v rename to lambdalib/stdlib/la_nand2/rtl/la_nand2.v diff --git a/lambdalib/stdlib/la_nand3/la_nand3.py b/lambdalib/stdlib/la_nand3/la_nand3.py new file mode 100644 index 0000000..e38bc63 --- /dev/null +++ b/lambdalib/stdlib/la_nand3/la_nand3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Nand3(Lambda): + def __init__(self): + name = 'la_nand3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Nand3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_nand3.v b/lambdalib/stdlib/la_nand3/rtl/la_nand3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_nand3.v rename to lambdalib/stdlib/la_nand3/rtl/la_nand3.v diff --git a/lambdalib/stdlib/la_nand4/la_nand4.py b/lambdalib/stdlib/la_nand4/la_nand4.py new file mode 100644 index 0000000..0a94f55 --- /dev/null +++ b/lambdalib/stdlib/la_nand4/la_nand4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Nand4(Lambda): + def __init__(self): + name = 'la_nand4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Nand4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_nand4.v b/lambdalib/stdlib/la_nand4/rtl/la_nand4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_nand4.v rename to lambdalib/stdlib/la_nand4/rtl/la_nand4.v diff --git a/lambdalib/stdlib/la_nor2/la_nor2.py b/lambdalib/stdlib/la_nor2/la_nor2.py new file mode 100644 index 0000000..be97302 --- /dev/null +++ b/lambdalib/stdlib/la_nor2/la_nor2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Nor2(Lambda): + def __init__(self): + name = 'la_nor2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Nor2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_nor2.v b/lambdalib/stdlib/la_nor2/rtl/la_nor2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_nor2.v rename to lambdalib/stdlib/la_nor2/rtl/la_nor2.v diff --git a/lambdalib/stdlib/la_nor3/la_nor3.py b/lambdalib/stdlib/la_nor3/la_nor3.py new file mode 100644 index 0000000..509be19 --- /dev/null +++ b/lambdalib/stdlib/la_nor3/la_nor3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Nor3(Lambda): + def __init__(self): + name = 'la_nor3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Nor3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_nor3.v b/lambdalib/stdlib/la_nor3/rtl/la_nor3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_nor3.v rename to lambdalib/stdlib/la_nor3/rtl/la_nor3.v diff --git a/lambdalib/stdlib/la_nor4/la_nor4.py b/lambdalib/stdlib/la_nor4/la_nor4.py new file mode 100644 index 0000000..5af024e --- /dev/null +++ b/lambdalib/stdlib/la_nor4/la_nor4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Nor4(Lambda): + def __init__(self): + name = 'la_nor4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Nor4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_nor4.v b/lambdalib/stdlib/la_nor4/rtl/la_nor4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_nor4.v rename to lambdalib/stdlib/la_nor4/rtl/la_nor4.v diff --git a/lambdalib/stdlib/la_oa21/la_oa21.py b/lambdalib/stdlib/la_oa21/la_oa21.py new file mode 100644 index 0000000..a2ecfe4 --- /dev/null +++ b/lambdalib/stdlib/la_oa21/la_oa21.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa21(Lambda): + def __init__(self): + name = 'la_oa21' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa21() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa21.v b/lambdalib/stdlib/la_oa21/rtl/la_oa21.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa21.v rename to lambdalib/stdlib/la_oa21/rtl/la_oa21.v diff --git a/lambdalib/stdlib/la_oa211/la_oa211.py b/lambdalib/stdlib/la_oa211/la_oa211.py new file mode 100644 index 0000000..f546a9a --- /dev/null +++ b/lambdalib/stdlib/la_oa211/la_oa211.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa211(Lambda): + def __init__(self): + name = 'la_oa211' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa211() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa211.v b/lambdalib/stdlib/la_oa211/rtl/la_oa211.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa211.v rename to lambdalib/stdlib/la_oa211/rtl/la_oa211.v diff --git a/lambdalib/stdlib/la_oa22/la_oa22.py b/lambdalib/stdlib/la_oa22/la_oa22.py new file mode 100644 index 0000000..125ca78 --- /dev/null +++ b/lambdalib/stdlib/la_oa22/la_oa22.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa22(Lambda): + def __init__(self): + name = 'la_oa22' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa22() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa22.v b/lambdalib/stdlib/la_oa22/rtl/la_oa22.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa22.v rename to lambdalib/stdlib/la_oa22/rtl/la_oa22.v diff --git a/lambdalib/stdlib/la_oa221/la_oa221.py b/lambdalib/stdlib/la_oa221/la_oa221.py new file mode 100644 index 0000000..0caac0f --- /dev/null +++ b/lambdalib/stdlib/la_oa221/la_oa221.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa221(Lambda): + def __init__(self): + name = 'la_oa221' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa221() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa221.v b/lambdalib/stdlib/la_oa221/rtl/la_oa221.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa221.v rename to lambdalib/stdlib/la_oa221/rtl/la_oa221.v diff --git a/lambdalib/stdlib/la_oa222/la_oa222.py b/lambdalib/stdlib/la_oa222/la_oa222.py new file mode 100644 index 0000000..17eb254 --- /dev/null +++ b/lambdalib/stdlib/la_oa222/la_oa222.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa222(Lambda): + def __init__(self): + name = 'la_oa222' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa222() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa222.v b/lambdalib/stdlib/la_oa222/rtl/la_oa222.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa222.v rename to lambdalib/stdlib/la_oa222/rtl/la_oa222.v diff --git a/lambdalib/stdlib/la_oa31/la_oa31.py b/lambdalib/stdlib/la_oa31/la_oa31.py new file mode 100644 index 0000000..e5f137c --- /dev/null +++ b/lambdalib/stdlib/la_oa31/la_oa31.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa31(Lambda): + def __init__(self): + name = 'la_oa31' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa31() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa31.v b/lambdalib/stdlib/la_oa31/rtl/la_oa31.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa31.v rename to lambdalib/stdlib/la_oa31/rtl/la_oa31.v diff --git a/lambdalib/stdlib/la_oa311/la_oa311.py b/lambdalib/stdlib/la_oa311/la_oa311.py new file mode 100644 index 0000000..57656c1 --- /dev/null +++ b/lambdalib/stdlib/la_oa311/la_oa311.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa311(Lambda): + def __init__(self): + name = 'la_oa311' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa311() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa311.v b/lambdalib/stdlib/la_oa311/rtl/la_oa311.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa311.v rename to lambdalib/stdlib/la_oa311/rtl/la_oa311.v diff --git a/lambdalib/stdlib/la_oa32/la_oa32.py b/lambdalib/stdlib/la_oa32/la_oa32.py new file mode 100644 index 0000000..846e7bb --- /dev/null +++ b/lambdalib/stdlib/la_oa32/la_oa32.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa32(Lambda): + def __init__(self): + name = 'la_oa32' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa32() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa32.v b/lambdalib/stdlib/la_oa32/rtl/la_oa32.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa32.v rename to lambdalib/stdlib/la_oa32/rtl/la_oa32.v diff --git a/lambdalib/stdlib/la_oa33/la_oa33.py b/lambdalib/stdlib/la_oa33/la_oa33.py new file mode 100644 index 0000000..668cb97 --- /dev/null +++ b/lambdalib/stdlib/la_oa33/la_oa33.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oa33(Lambda): + def __init__(self): + name = 'la_oa33' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oa33() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oa33.v b/lambdalib/stdlib/la_oa33/rtl/la_oa33.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oa33.v rename to lambdalib/stdlib/la_oa33/rtl/la_oa33.v diff --git a/lambdalib/stdlib/la_oai21/la_oai21.py b/lambdalib/stdlib/la_oai21/la_oai21.py new file mode 100644 index 0000000..4a2a9b3 --- /dev/null +++ b/lambdalib/stdlib/la_oai21/la_oai21.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai21(Lambda): + def __init__(self): + name = 'la_oai21' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai21() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai21.v b/lambdalib/stdlib/la_oai21/rtl/la_oai21.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai21.v rename to lambdalib/stdlib/la_oai21/rtl/la_oai21.v diff --git a/lambdalib/stdlib/la_oai22/la_oai22.py b/lambdalib/stdlib/la_oai22/la_oai22.py new file mode 100644 index 0000000..3cd5a6c --- /dev/null +++ b/lambdalib/stdlib/la_oai22/la_oai22.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai22(Lambda): + def __init__(self): + name = 'la_oai22' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai22() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai22.v b/lambdalib/stdlib/la_oai22/rtl/la_oai22.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai22.v rename to lambdalib/stdlib/la_oai22/rtl/la_oai22.v diff --git a/lambdalib/stdlib/la_oai221/la_oai221.py b/lambdalib/stdlib/la_oai221/la_oai221.py new file mode 100644 index 0000000..aa0d42d --- /dev/null +++ b/lambdalib/stdlib/la_oai221/la_oai221.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai221(Lambda): + def __init__(self): + name = 'la_oai221' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai221() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai221.v b/lambdalib/stdlib/la_oai221/rtl/la_oai221.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai221.v rename to lambdalib/stdlib/la_oai221/rtl/la_oai221.v diff --git a/lambdalib/stdlib/la_oai222/la_oai222.py b/lambdalib/stdlib/la_oai222/la_oai222.py new file mode 100644 index 0000000..8c96c18 --- /dev/null +++ b/lambdalib/stdlib/la_oai222/la_oai222.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai222(Lambda): + def __init__(self): + name = 'la_oai222' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai222() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai222.v b/lambdalib/stdlib/la_oai222/rtl/la_oai222.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai222.v rename to lambdalib/stdlib/la_oai222/rtl/la_oai222.v diff --git a/lambdalib/stdlib/la_oai31/la_oai31.py b/lambdalib/stdlib/la_oai31/la_oai31.py new file mode 100644 index 0000000..1bb8600 --- /dev/null +++ b/lambdalib/stdlib/la_oai31/la_oai31.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai31(Lambda): + def __init__(self): + name = 'la_oai31' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai31() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai31.v b/lambdalib/stdlib/la_oai31/rtl/la_oai31.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai31.v rename to lambdalib/stdlib/la_oai31/rtl/la_oai31.v diff --git a/lambdalib/stdlib/la_oai311/la_oai311.py b/lambdalib/stdlib/la_oai311/la_oai311.py new file mode 100644 index 0000000..c58c6ec --- /dev/null +++ b/lambdalib/stdlib/la_oai311/la_oai311.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai311(Lambda): + def __init__(self): + name = 'la_oai311' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai311() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai311.v b/lambdalib/stdlib/la_oai311/rtl/la_oai311.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai311.v rename to lambdalib/stdlib/la_oai311/rtl/la_oai311.v diff --git a/lambdalib/stdlib/la_oai32/la_oai32.py b/lambdalib/stdlib/la_oai32/la_oai32.py new file mode 100644 index 0000000..82f8667 --- /dev/null +++ b/lambdalib/stdlib/la_oai32/la_oai32.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai32(Lambda): + def __init__(self): + name = 'la_oai32' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai32() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai32.v b/lambdalib/stdlib/la_oai32/rtl/la_oai32.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai32.v rename to lambdalib/stdlib/la_oai32/rtl/la_oai32.v diff --git a/lambdalib/stdlib/la_oai33/la_oai33.py b/lambdalib/stdlib/la_oai33/la_oai33.py new file mode 100644 index 0000000..78ec2dd --- /dev/null +++ b/lambdalib/stdlib/la_oai33/la_oai33.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Oai33(Lambda): + def __init__(self): + name = 'la_oai33' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Oai33() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_oai33.v b/lambdalib/stdlib/la_oai33/rtl/la_oai33.v similarity index 100% rename from lambdalib/stdlib/rtl/la_oai33.v rename to lambdalib/stdlib/la_oai33/rtl/la_oai33.v diff --git a/lambdalib/stdlib/la_or2/la_or2.py b/lambdalib/stdlib/la_or2/la_or2.py new file mode 100644 index 0000000..a8c7c6b --- /dev/null +++ b/lambdalib/stdlib/la_or2/la_or2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Or2(Lambda): + def __init__(self): + name = 'la_or2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Or2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_or2.v b/lambdalib/stdlib/la_or2/rtl/la_or2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_or2.v rename to lambdalib/stdlib/la_or2/rtl/la_or2.v diff --git a/lambdalib/stdlib/la_or3/la_or3.py b/lambdalib/stdlib/la_or3/la_or3.py new file mode 100644 index 0000000..a0dbb14 --- /dev/null +++ b/lambdalib/stdlib/la_or3/la_or3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Or3(Lambda): + def __init__(self): + name = 'la_or3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Or3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_or3.v b/lambdalib/stdlib/la_or3/rtl/la_or3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_or3.v rename to lambdalib/stdlib/la_or3/rtl/la_or3.v diff --git a/lambdalib/stdlib/la_or4/la_or4.py b/lambdalib/stdlib/la_or4/la_or4.py new file mode 100644 index 0000000..9404ab7 --- /dev/null +++ b/lambdalib/stdlib/la_or4/la_or4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Or4(Lambda): + def __init__(self): + name = 'la_or4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Or4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_or4.v b/lambdalib/stdlib/la_or4/rtl/la_or4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_or4.v rename to lambdalib/stdlib/la_or4/rtl/la_or4.v diff --git a/lambdalib/stdlib/la_sdffq/la_sdffq.py b/lambdalib/stdlib/la_sdffq/la_sdffq.py new file mode 100644 index 0000000..6b13c4e --- /dev/null +++ b/lambdalib/stdlib/la_sdffq/la_sdffq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Sdffq(Lambda): + def __init__(self): + name = 'la_sdffq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Sdffq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_sdffq.v b/lambdalib/stdlib/la_sdffq/rtl/la_sdffq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_sdffq.v rename to lambdalib/stdlib/la_sdffq/rtl/la_sdffq.v diff --git a/lambdalib/stdlib/la_sdffqn/la_sdffqn.py b/lambdalib/stdlib/la_sdffqn/la_sdffqn.py new file mode 100644 index 0000000..4c3d260 --- /dev/null +++ b/lambdalib/stdlib/la_sdffqn/la_sdffqn.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Sdffqn(Lambda): + def __init__(self): + name = 'la_sdffqn' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Sdffqn() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_sdffqn.v b/lambdalib/stdlib/la_sdffqn/rtl/la_sdffqn.v similarity index 100% rename from lambdalib/stdlib/rtl/la_sdffqn.v rename to lambdalib/stdlib/la_sdffqn/rtl/la_sdffqn.v diff --git a/lambdalib/stdlib/la_sdffrq/la_sdffrq.py b/lambdalib/stdlib/la_sdffrq/la_sdffrq.py new file mode 100644 index 0000000..b481827 --- /dev/null +++ b/lambdalib/stdlib/la_sdffrq/la_sdffrq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Sdffrq(Lambda): + def __init__(self): + name = 'la_sdffrq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Sdffrq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_sdffrq.v b/lambdalib/stdlib/la_sdffrq/rtl/la_sdffrq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_sdffrq.v rename to lambdalib/stdlib/la_sdffrq/rtl/la_sdffrq.v diff --git a/lambdalib/stdlib/la_sdffrqn/la_sdffrqn.py b/lambdalib/stdlib/la_sdffrqn/la_sdffrqn.py new file mode 100644 index 0000000..6c247f1 --- /dev/null +++ b/lambdalib/stdlib/la_sdffrqn/la_sdffrqn.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Sdffrqn(Lambda): + def __init__(self): + name = 'la_sdffrqn' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Sdffrqn() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_sdffrqn.v b/lambdalib/stdlib/la_sdffrqn/rtl/la_sdffrqn.v similarity index 100% rename from lambdalib/stdlib/rtl/la_sdffrqn.v rename to lambdalib/stdlib/la_sdffrqn/rtl/la_sdffrqn.v diff --git a/lambdalib/stdlib/la_sdffsq/la_sdffsq.py b/lambdalib/stdlib/la_sdffsq/la_sdffsq.py new file mode 100644 index 0000000..30078c2 --- /dev/null +++ b/lambdalib/stdlib/la_sdffsq/la_sdffsq.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Sdffsq(Lambda): + def __init__(self): + name = 'la_sdffsq' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Sdffsq() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_sdffsq.v b/lambdalib/stdlib/la_sdffsq/rtl/la_sdffsq.v similarity index 100% rename from lambdalib/stdlib/rtl/la_sdffsq.v rename to lambdalib/stdlib/la_sdffsq/rtl/la_sdffsq.v diff --git a/lambdalib/stdlib/la_sdffsqn/la_sdffsqn.py b/lambdalib/stdlib/la_sdffsqn/la_sdffsqn.py new file mode 100644 index 0000000..dc747f3 --- /dev/null +++ b/lambdalib/stdlib/la_sdffsqn/la_sdffsqn.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Sdffsqn(Lambda): + def __init__(self): + name = 'la_sdffsqn' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Sdffsqn() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_sdffsqn.v b/lambdalib/stdlib/la_sdffsqn/rtl/la_sdffsqn.v similarity index 100% rename from lambdalib/stdlib/rtl/la_sdffsqn.v rename to lambdalib/stdlib/la_sdffsqn/rtl/la_sdffsqn.v diff --git a/lambdalib/stdlib/la_tiehi/la_tiehi.py b/lambdalib/stdlib/la_tiehi/la_tiehi.py new file mode 100644 index 0000000..2ffdeaa --- /dev/null +++ b/lambdalib/stdlib/la_tiehi/la_tiehi.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Tiehi(Lambda): + def __init__(self): + name = 'la_tiehi' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Tiehi() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_tiehi.v b/lambdalib/stdlib/la_tiehi/rtl/la_tiehi.v similarity index 100% rename from lambdalib/stdlib/rtl/la_tiehi.v rename to lambdalib/stdlib/la_tiehi/rtl/la_tiehi.v diff --git a/lambdalib/stdlib/la_tielo/la_tielo.py b/lambdalib/stdlib/la_tielo/la_tielo.py new file mode 100644 index 0000000..dfc0298 --- /dev/null +++ b/lambdalib/stdlib/la_tielo/la_tielo.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Tielo(Lambda): + def __init__(self): + name = 'la_tielo' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Tielo() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_tielo.v b/lambdalib/stdlib/la_tielo/rtl/la_tielo.v similarity index 100% rename from lambdalib/stdlib/rtl/la_tielo.v rename to lambdalib/stdlib/la_tielo/rtl/la_tielo.v diff --git a/lambdalib/stdlib/la_xnor2/la_xnor2.py b/lambdalib/stdlib/la_xnor2/la_xnor2.py new file mode 100644 index 0000000..8422870 --- /dev/null +++ b/lambdalib/stdlib/la_xnor2/la_xnor2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Xnor2(Lambda): + def __init__(self): + name = 'la_xnor2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Xnor2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_xnor2.v b/lambdalib/stdlib/la_xnor2/rtl/la_xnor2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_xnor2.v rename to lambdalib/stdlib/la_xnor2/rtl/la_xnor2.v diff --git a/lambdalib/stdlib/la_xnor3/la_xnor3.py b/lambdalib/stdlib/la_xnor3/la_xnor3.py new file mode 100644 index 0000000..0ca8652 --- /dev/null +++ b/lambdalib/stdlib/la_xnor3/la_xnor3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Xnor3(Lambda): + def __init__(self): + name = 'la_xnor3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Xnor3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_xnor3.v b/lambdalib/stdlib/la_xnor3/rtl/la_xnor3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_xnor3.v rename to lambdalib/stdlib/la_xnor3/rtl/la_xnor3.v diff --git a/lambdalib/stdlib/la_xnor4/la_xnor4.py b/lambdalib/stdlib/la_xnor4/la_xnor4.py new file mode 100644 index 0000000..8f839ef --- /dev/null +++ b/lambdalib/stdlib/la_xnor4/la_xnor4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Xnor4(Lambda): + def __init__(self): + name = 'la_xnor4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Xnor4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_xnor4.v b/lambdalib/stdlib/la_xnor4/rtl/la_xnor4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_xnor4.v rename to lambdalib/stdlib/la_xnor4/rtl/la_xnor4.v diff --git a/lambdalib/stdlib/la_xor2/la_xor2.py b/lambdalib/stdlib/la_xor2/la_xor2.py new file mode 100644 index 0000000..f9a813f --- /dev/null +++ b/lambdalib/stdlib/la_xor2/la_xor2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Xor2(Lambda): + def __init__(self): + name = 'la_xor2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Xor2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_xor2.v b/lambdalib/stdlib/la_xor2/rtl/la_xor2.v similarity index 100% rename from lambdalib/stdlib/rtl/la_xor2.v rename to lambdalib/stdlib/la_xor2/rtl/la_xor2.v diff --git a/lambdalib/stdlib/la_xor3/la_xor3.py b/lambdalib/stdlib/la_xor3/la_xor3.py new file mode 100644 index 0000000..2f307ef --- /dev/null +++ b/lambdalib/stdlib/la_xor3/la_xor3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Xor3(Lambda): + def __init__(self): + name = 'la_xor3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Xor3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_xor3.v b/lambdalib/stdlib/la_xor3/rtl/la_xor3.v similarity index 100% rename from lambdalib/stdlib/rtl/la_xor3.v rename to lambdalib/stdlib/la_xor3/rtl/la_xor3.v diff --git a/lambdalib/stdlib/la_xor4/la_xor4.py b/lambdalib/stdlib/la_xor4/la_xor4.py new file mode 100644 index 0000000..93fdbdf --- /dev/null +++ b/lambdalib/stdlib/la_xor4/la_xor4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Xor4(Lambda): + def __init__(self): + name = 'la_xor4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Xor4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/stdlib/rtl/la_xor4.v b/lambdalib/stdlib/la_xor4/rtl/la_xor4.v similarity index 100% rename from lambdalib/stdlib/rtl/la_xor4.v rename to lambdalib/stdlib/la_xor4/rtl/la_xor4.v diff --git a/lambdalib/veclib/__init__.py b/lambdalib/veclib/__init__.py new file mode 100644 index 0000000..ad1c1cd --- /dev/null +++ b/lambdalib/veclib/__init__.py @@ -0,0 +1,23 @@ +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_vmux2.la_vmux2b import Vmux2b +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 + +__all__ = ['Vbuf', + 'Vinv', + 'Vmux', + 'Vmux2', + 'Vmux2b', + 'Vmux3', + 'Vmux4', + 'Vmux5', + 'Vmux6', + 'Vmux7', + 'Vmux8'] diff --git a/lambdalib/veclib/la_vbuf/la_vbuf.py b/lambdalib/veclib/la_vbuf/la_vbuf.py new file mode 100644 index 0000000..6bc22ac --- /dev/null +++ b/lambdalib/veclib/la_vbuf/la_vbuf.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vbuf(Lambda): + def __init__(self): + name = 'la_vbuf' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vbuf() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/vectorlib/rtl/la_vbuf.v b/lambdalib/veclib/la_vbuf/rtl/la_vbuf.v similarity index 60% rename from lambdalib/vectorlib/rtl/la_vbuf.v rename to lambdalib/veclib/la_vbuf/rtl/la_vbuf.v index a08a1c4..6b184eb 100644 --- a/lambdalib/vectorlib/rtl/la_vbuf.v +++ b/lambdalib/veclib/la_vbuf/rtl/la_vbuf.v @@ -4,19 +4,14 @@ //# License: MIT (see LICENSE file in Lambda repository) # //############################################################################# -module la_vbuf #( - parameter N = 1, // width of data inputs - parameter PROP = "DEFAULT" // custom cell property -) ( - input [N-1:0] a, - output [N-1:0] z -); - - la_buf #( - .PROP(PROP) - ) i0[N-1:0] ( - .a(a[N-1:0]), - .z(z[N-1:0]) +module la_vbuf #(parameter W = 1, // width of data inputs + parameter PROP = "DEFAULT" // custom cell property + ) + ( + input [W-1:0] a, + output [W-1:0] z ); + assign z = a; + endmodule diff --git a/lambdalib/veclib/la_vinv/la_vinv.py b/lambdalib/veclib/la_vinv/la_vinv.py new file mode 100644 index 0000000..979d248 --- /dev/null +++ b/lambdalib/veclib/la_vinv/la_vinv.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vinv(Lambda): + def __init__(self): + name = 'la_vinv' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vinv() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/vectorlib/rtl/la_vinv.v b/lambdalib/veclib/la_vinv/rtl/la_vinv.v similarity index 60% rename from lambdalib/vectorlib/rtl/la_vinv.v rename to lambdalib/veclib/la_vinv/rtl/la_vinv.v index 3a047d5..a8e1914 100644 --- a/lambdalib/vectorlib/rtl/la_vinv.v +++ b/lambdalib/veclib/la_vinv/rtl/la_vinv.v @@ -4,19 +4,14 @@ //# License: MIT (see LICENSE file in Lambda repository) # //############################################################################# -module la_vinv #( - parameter N = 1, // width of data inputs - parameter PROP = "DEFAULT" // custom cell property -) ( - input [N-1:0] a, - output [N-1:0] z -); - - la_inv #( - .PROP(PROP) - ) i0[N-1:0] ( - .a(a[N-1:0]), - .z(z[N-1:0]) +module la_vinv #(parameter W = 1, // width of data inputs + parameter PROP = "DEFAULT" // custom cell property + ) + ( + input [W-1:0] a, + output [W-1:0] z ); + assign z = ~a; + endmodule diff --git a/lambdalib/veclib/la_vmux/la_vmux.py b/lambdalib/veclib/la_vmux/la_vmux.py new file mode 100644 index 0000000..e8233dc --- /dev/null +++ b/lambdalib/veclib/la_vmux/la_vmux.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux(Lambda): + def __init__(self): + name = 'la_vmux' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux/rtl/la_vmux.v b/lambdalib/veclib/la_vmux/rtl/la_vmux.v new file mode 100644 index 0000000..9dbffb5 --- /dev/null +++ b/lambdalib/veclib/la_vmux/rtl/la_vmux.v @@ -0,0 +1,27 @@ +//############################################################################ +//# Function: N-Input one hot mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux #(parameter N = 1, // number of ports + parameter W = 1, // data width + parameter PROP = "DEFAULT" // cell property + ) + ( + input [N-1:0] sel, // select vector + input [W*N-1:0] in, // flattened input {.., in1[W-1:0],in0[W-1:0]} + output reg [W-1:0] out // output + ); + + integer i; + always @* begin + out[W-1:0] = 'b0; + for (i = 0; i < N; i = i + 1) + out[W-1:0] = out[W-1:0] | {(W) {sel[i]}} & in[i*W+:W]; + end + + // TODO: Add One hot warning + // Add generate code to map to actual la_mux sizes.. + +endmodule diff --git a/lambdalib/veclib/la_vmux2/la_vmux2.py b/lambdalib/veclib/la_vmux2/la_vmux2.py new file mode 100644 index 0000000..a6db2ed --- /dev/null +++ b/lambdalib/veclib/la_vmux2/la_vmux2.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux2(Lambda): + def __init__(self): + name = 'la_vmux2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux2() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux2/rtl/la_vmux2.v b/lambdalib/veclib/la_vmux2/rtl/la_vmux2.v new file mode 100644 index 0000000..746c061 --- /dev/null +++ b/lambdalib/veclib/la_vmux2/rtl/la_vmux2.v @@ -0,0 +1,21 @@ +//############################################################################ +//# Function: 2-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux2 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel1, + input sel0, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out + ); + + assign out[W-1:0] = ({(W) {sel0}} & in0[W-1:0] | + {(W) {sel1}} & in1[W-1:0]); + +endmodule diff --git a/lambdalib/veclib/la_vmux2b/la_vmux2b.py b/lambdalib/veclib/la_vmux2b/la_vmux2b.py new file mode 100644 index 0000000..6d5a7fc --- /dev/null +++ b/lambdalib/veclib/la_vmux2b/la_vmux2b.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux2b(Lambda): + def __init__(self): + name = 'la_vmux2' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux2b() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux2b/rtl/la_vmux2b.v b/lambdalib/veclib/la_vmux2b/rtl/la_vmux2b.v new file mode 100644 index 0000000..3980200 --- /dev/null +++ b/lambdalib/veclib/la_vmux2b/rtl/la_vmux2b.v @@ -0,0 +1,20 @@ +//############################################################################ +//# Function: 2-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux2 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out + ); + + assign out[W-1:0] = ({(W) {~sel}} & in0[W-1:0] | + {(W) {sel}} & in1[W-1:0]); + +endmodule diff --git a/lambdalib/veclib/la_vmux3/la_vmux3.py b/lambdalib/veclib/la_vmux3/la_vmux3.py new file mode 100644 index 0000000..ee150a1 --- /dev/null +++ b/lambdalib/veclib/la_vmux3/la_vmux3.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux3(Lambda): + def __init__(self): + name = 'la_vmux3' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux3() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux3/rtl/la_vmux3.v b/lambdalib/veclib/la_vmux3/rtl/la_vmux3.v new file mode 100644 index 0000000..480e884 --- /dev/null +++ b/lambdalib/veclib/la_vmux3/rtl/la_vmux3.v @@ -0,0 +1,24 @@ +//############################################################################ +//# Function: 3-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux3 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel2, + input sel1, + input sel0, + input [W-1:0] in2, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out + ); + + assign out[W-1:0] = ({(W){sel0}} & in0[W-1:0] | + {(W){sel1}} & in1[W-1:0] | + {(W){sel2}} & in2[W-1:0]); + +endmodule diff --git a/lambdalib/veclib/la_vmux4/la_vmux4.py b/lambdalib/veclib/la_vmux4/la_vmux4.py new file mode 100644 index 0000000..9edb8ea --- /dev/null +++ b/lambdalib/veclib/la_vmux4/la_vmux4.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux4(Lambda): + def __init__(self): + name = 'la_vmux4' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux4() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux4/rtl/la_vmux4.v b/lambdalib/veclib/la_vmux4/rtl/la_vmux4.v new file mode 100644 index 0000000..6460d7d --- /dev/null +++ b/lambdalib/veclib/la_vmux4/rtl/la_vmux4.v @@ -0,0 +1,27 @@ +//############################################################################ +//# Function: 4-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux4 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel3, + input sel2, + input sel1, + input sel0, + input [W-1:0] in3, + input [W-1:0] in2, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out + ); + + assign out[W-1:0] = ({(W){sel0}} & in0[W-1:0] | + {(W){sel1}} & in1[W-1:0] | + {(W){sel2}} & in2[W-1:0] | + {(W){sel3}} & in3[W-1:0]); + +endmodule diff --git a/lambdalib/veclib/la_vmux5/la_vmux5.py b/lambdalib/veclib/la_vmux5/la_vmux5.py new file mode 100644 index 0000000..13eab8a --- /dev/null +++ b/lambdalib/veclib/la_vmux5/la_vmux5.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux5(Lambda): + def __init__(self): + name = 'la_vmux5' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux5() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux5/rtl/la_vmux5.v b/lambdalib/veclib/la_vmux5/rtl/la_vmux5.v new file mode 100644 index 0000000..1b82b6c --- /dev/null +++ b/lambdalib/veclib/la_vmux5/rtl/la_vmux5.v @@ -0,0 +1,30 @@ +//############################################################################ +//# Function: 5-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux5 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel4, + input sel3, + input sel2, + input sel1, + input sel0, + input [W-1:0] in4, + input [W-1:0] in3, + input [W-1:0] in2, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out + ); + + assign out[W-1:0] = ({(W){sel0}} & in0[W-1:0] | + {(W){sel1}} & in1[W-1:0] | + {(W){sel2}} & in2[W-1:0] | + {(W){sel3}} & in3[W-1:0] | + {(W){sel4}} & in4[W-1:0]); + +endmodule diff --git a/lambdalib/veclib/la_vmux6/la_vmux6.py b/lambdalib/veclib/la_vmux6/la_vmux6.py new file mode 100644 index 0000000..7f9112b --- /dev/null +++ b/lambdalib/veclib/la_vmux6/la_vmux6.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux6(Lambda): + def __init__(self): + name = 'la_vmux6' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux6() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux6/rtl/la_vmux6.v b/lambdalib/veclib/la_vmux6/rtl/la_vmux6.v new file mode 100644 index 0000000..4b6c955 --- /dev/null +++ b/lambdalib/veclib/la_vmux6/rtl/la_vmux6.v @@ -0,0 +1,33 @@ +//############################################################################ +//# Function: 6-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux6 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel5, + input sel4, + input sel3, + input sel2, + input sel1, + input sel0, + input [W-1:0] in5, + input [W-1:0] in4, + input [W-1:0] in3, + input [W-1:0] in2, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out //selected data output + ); + + assign out[W-1:0] = ({(W){sel0}} & in0[W-1:0] | + {(W){sel1}} & in1[W-1:0] | + {(W){sel2}} & in2[W-1:0] | + {(W){sel3}} & in3[W-1:0] | + {(W){sel4}} & in4[W-1:0] | + {(W){sel5}} & in5[W-1:0]); + +endmodule diff --git a/lambdalib/veclib/la_vmux7/la_vmux7.py b/lambdalib/veclib/la_vmux7/la_vmux7.py new file mode 100644 index 0000000..525886d --- /dev/null +++ b/lambdalib/veclib/la_vmux7/la_vmux7.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux7(Lambda): + def __init__(self): + name = 'la_vmux7' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux7() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux7/rtl/la_vmux7.v b/lambdalib/veclib/la_vmux7/rtl/la_vmux7.v new file mode 100644 index 0000000..7615ebb --- /dev/null +++ b/lambdalib/veclib/la_vmux7/rtl/la_vmux7.v @@ -0,0 +1,36 @@ +//############################################################################ +//# Function: 7-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux7 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel6, + input sel5, + input sel4, + input sel3, + input sel2, + input sel1, + input sel0, + input [W-1:0] in6, + input [W-1:0] in5, + input [W-1:0] in4, + input [W-1:0] in3, + input [W-1:0] in2, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out + ); + + assign out[W-1:0] = ({(W){sel0}} & in0[W-1:0] | + {(W){sel1}} & in1[W-1:0] | + {(W){sel2}} & in2[W-1:0] | + {(W){sel3}} & in3[W-1:0] | + {(W){sel4}} & in4[W-1:0] | + {(W){sel5}} & in5[W-1:0] | + {(W){sel6}} & in6[W-1:0]); + +endmodule diff --git a/lambdalib/veclib/la_vmux8/la_vmux8.py b/lambdalib/veclib/la_vmux8/la_vmux8.py new file mode 100644 index 0000000..4c6c110 --- /dev/null +++ b/lambdalib/veclib/la_vmux8/la_vmux8.py @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class Vmux8(Lambda): + def __init__(self): + name = 'la_vmux8' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = Vmux8() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/lambdalib/veclib/la_vmux8/rtl/la_vmux8.v b/lambdalib/veclib/la_vmux8/rtl/la_vmux8.v new file mode 100644 index 0000000..fe99464 --- /dev/null +++ b/lambdalib/veclib/la_vmux8/rtl/la_vmux8.v @@ -0,0 +1,39 @@ +//############################################################################ +//# Function: 8-Input one-hot vectorized mux # +//# Copyright: Lambda Project Authors. All rights Reserved. # +//# License: MIT (see LICENSE file in Lambda repository) # +//############################################################################ + +module la_vmux8 #(parameter W = 1, // width of mux + parameter PROP = "DEFAULT" // cell property + ) + ( + input sel7, + input sel6, + input sel5, + input sel4, + input sel3, + input sel2, + input sel1, + input sel0, + input [W-1:0] in7, + input [W-1:0] in6, + input [W-1:0] in5, + input [W-1:0] in4, + input [W-1:0] in3, + input [W-1:0] in2, + input [W-1:0] in1, + input [W-1:0] in0, + output [W-1:0] out + ); + + assign out[W-1:0] = ({(W){sel0}} & in0[W-1:0] | + {(W){sel1}} & in1[W-1:0] | + {(W){sel2}} & in2[W-1:0] | + {(W){sel3}} & in3[W-1:0] | + {(W){sel4}} & in4[W-1:0] | + {(W){sel5}} & in5[W-1:0] | + {(W){sel6}} & in6[W-1:0] | + {(W){sel7}} & in7[W-1:0]); + +endmodule diff --git a/lambdalib/vectorlib/__init__.py b/lambdalib/vectorlib/__init__.py deleted file mode 100644 index 409b4df..0000000 --- a/lambdalib/vectorlib/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -from siliconcompiler import Library -from lambdalib._common import register_data_source -from lambdalib import stdlib - - -######################## -# SiliconCompiler Setup -######################## -def setup(): - ''' - Lambdalib vectorlib - ''' - - lib = Library('lambdalib_vectorlib', package='lambdalib', auto_enable=True) - register_data_source(lib) - - lib.add('option', 'ydir', "vectorlib/rtl") - - lib.use(stdlib) - - return lib diff --git a/lambdalib/vectorlib/rtl/la_visohi.v b/lambdalib/vectorlib/rtl/la_visohi.v deleted file mode 100644 index 99a9708..0000000 --- a/lambdalib/vectorlib/rtl/la_visohi.v +++ /dev/null @@ -1,24 +0,0 @@ -//############################################################################# -//# Function: Vectorized power isolation (high) cell # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_visohi #( - parameter N = 1, // width of data inputs - parameter PROP = "DEFAULT" // custom cell property -) ( - input iso, // isolation signal - input [N-1:0] in, // input - output [N-1:0] out // out = ~iso & in -); - - la_isohi #( - .PROP(PROP) - ) i0[N-1:0] ( - .iso(iso), - .in (in[N-1:0]), - .out(out[N-1:0]) - ); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_visolo.v b/lambdalib/vectorlib/rtl/la_visolo.v deleted file mode 100644 index 9bd1aac..0000000 --- a/lambdalib/vectorlib/rtl/la_visolo.v +++ /dev/null @@ -1,24 +0,0 @@ -//############################################################################# -//# Function: Vectorized power isolation (low) cell # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_visolo #( - parameter N = 1, // width of data inputs - parameter PROP = "DEFAULT" // custom cell property -) ( - input iso, // isolation signal - input [N-1:0] in, // input - output [N-1:0] out // out = ~iso & in -); - - la_isolo #( - .PROP(PROP) - ) i0[N-1:0] ( - .iso(iso), - .in (in[N-1:0]), - .out(out[N-1:0]) - ); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux.v b/lambdalib/vectorlib/rtl/la_vmux.v deleted file mode 100644 index 75c6cb3..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux.v +++ /dev/null @@ -1,26 +0,0 @@ -//############################################################################# -//# Function: N-Input one hot mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux #( - parameter N = 1, // number of ports - parameter W = 1, // data width - parameter PROP = "DEFAULT" // cell property -) ( - input [ N-1:0] sel, // select vector - input [W*N-1:0] in, // concatenated input {..,in1[W-1:0],in0[W-1:0]} - output reg [ W-1:0] out // output -); - - integer i; - always @* begin - out[W-1:0] = 'b0; - for (i = 0; i < N; i = i + 1) out[W-1:0] = out[W-1:0] | {(W) {sel[i]}} & in[i*W+:W]; - end - - // TODO: Add One hot warning - // Add generate code to map to actual la_mux sizes.. - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux2.v b/lambdalib/vectorlib/rtl/la_vmux2.v deleted file mode 100644 index 4657162..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux2.v +++ /dev/null @@ -1,20 +0,0 @@ -//############################################################################# -//# Function: 2-Input one-hot vectorized mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux2 #( - parameter N = 1, // width of mux - parameter PROP = "DEFAULT" // cell property -) ( - input sel1, - input sel0, - input [N-1:0] in1, - input [N-1:0] in0, - output [N-1:0] out //selected data output -); - - assign out[N-1:0] = ({(N) {sel0}} & in0[N-1:0] | {(N) {sel1}} & in1[N-1:0]); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux3.v b/lambdalib/vectorlib/rtl/la_vmux3.v deleted file mode 100644 index 28a1600..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux3.v +++ /dev/null @@ -1,24 +0,0 @@ -//############################################################################# -//# Function: 3-Input one-hot vectorized mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux3 #( - parameter N = 1, // width of mux - parameter PROP = "DEFAULT" // cell property -) ( - input sel2, - input sel1, - input sel0, - input [N-1:0] in2, - input [N-1:0] in1, - input [N-1:0] in0, - output [N-1:0] out //selected data output -); - - assign out[N-1:0] = ({(N){sel0}} & in0[N-1:0] | - {(N){sel1}} & in1[N-1:0] | - {(N){sel2}} & in2[N-1:0]); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux4.v b/lambdalib/vectorlib/rtl/la_vmux4.v deleted file mode 100644 index 82b5a17..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux4.v +++ /dev/null @@ -1,27 +0,0 @@ -//############################################################################# -//# Function: 4-Input one-hot vectorized mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux4 #( - parameter N = 1, // width of mux - parameter PROP = "DEFAULT" // cell property -) ( - input sel3, - input sel2, - input sel1, - input sel0, - input [N-1:0] in3, - input [N-1:0] in2, - input [N-1:0] in1, - input [N-1:0] in0, - output [N-1:0] out //selected data output -); - - assign out[N-1:0] = ({(N){sel0}} & in0[N-1:0] | - {(N){sel1}} & in1[N-1:0] | - {(N){sel2}} & in2[N-1:0] | - {(N){sel3}} & in3[N-1:0]); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux5.v b/lambdalib/vectorlib/rtl/la_vmux5.v deleted file mode 100644 index 3e2dac3..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux5.v +++ /dev/null @@ -1,30 +0,0 @@ -//############################################################################# -//# Function: 5-Input one-hot vectorized mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux5 #( - parameter N = 1, // width of mux - parameter PROP = "DEFAULT" // cell property -) ( - input sel4, - input sel3, - input sel2, - input sel1, - input sel0, - input [N-1:0] in4, - input [N-1:0] in3, - input [N-1:0] in2, - input [N-1:0] in1, - input [N-1:0] in0, - output [N-1:0] out //selected data output -); - - assign out[N-1:0] = ({(N){sel0}} & in0[N-1:0] | - {(N){sel1}} & in1[N-1:0] | - {(N){sel2}} & in2[N-1:0] | - {(N){sel3}} & in3[N-1:0] | - {(N){sel4}} & in4[N-1:0]); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux6.v b/lambdalib/vectorlib/rtl/la_vmux6.v deleted file mode 100644 index ffcf1d5..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux6.v +++ /dev/null @@ -1,33 +0,0 @@ -//############################################################################# -//# Function: 6-Input one-hot vectorized mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux6 #( - parameter N = 1, // width of mux - parameter PROP = "DEFAULT" // cell property -) ( - input sel5, - input sel4, - input sel3, - input sel2, - input sel1, - input sel0, - input [N-1:0] in5, - input [N-1:0] in4, - input [N-1:0] in3, - input [N-1:0] in2, - input [N-1:0] in1, - input [N-1:0] in0, - output [N-1:0] out //selected data output -); - - assign out[N-1:0] = ({(N){sel0}} & in0[N-1:0] | - {(N){sel1}} & in1[N-1:0] | - {(N){sel2}} & in2[N-1:0] | - {(N){sel3}} & in3[N-1:0] | - {(N){sel4}} & in4[N-1:0] | - {(N){sel5}} & in5[N-1:0]); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux7.v b/lambdalib/vectorlib/rtl/la_vmux7.v deleted file mode 100644 index 8dcbb92..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux7.v +++ /dev/null @@ -1,36 +0,0 @@ -//############################################################################# -//# Function: 7-Input one-hot vectorized mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux7 #( - parameter N = 1, // width of mux - parameter PROP = "DEFAULT" // cell property -) ( - input sel6, - input sel5, - input sel4, - input sel3, - input sel2, - input sel1, - input sel0, - input [N-1:0] in6, - input [N-1:0] in5, - input [N-1:0] in4, - input [N-1:0] in3, - input [N-1:0] in2, - input [N-1:0] in1, - input [N-1:0] in0, - output [N-1:0] out //selected data output -); - - assign out[N-1:0] = ({(N){sel0}} & in0[N-1:0] | - {(N){sel1}} & in1[N-1:0] | - {(N){sel2}} & in2[N-1:0] | - {(N){sel3}} & in3[N-1:0] | - {(N){sel4}} & in4[N-1:0] | - {(N){sel5}} & in5[N-1:0] | - {(N){sel6}} & in6[N-1:0]); - -endmodule diff --git a/lambdalib/vectorlib/rtl/la_vmux8.v b/lambdalib/vectorlib/rtl/la_vmux8.v deleted file mode 100644 index 62d0312..0000000 --- a/lambdalib/vectorlib/rtl/la_vmux8.v +++ /dev/null @@ -1,39 +0,0 @@ -//############################################################################# -//# Function: 8-Input one-hot vectorized mux # -//# Copyright: Lambda Project Authors. All rights Reserved. # -//# License: MIT (see LICENSE file in Lambda repository) # -//############################################################################# - -module la_vmux8 #( - parameter N = 1, // width of mux - parameter PROP = "DEFAULT" // cell property -) ( - input sel7, - input sel6, - input sel5, - input sel4, - input sel3, - input sel2, - input sel1, - input sel0, - input [N-1:0] in7, - input [N-1:0] in6, - input [N-1:0] in5, - input [N-1:0] in4, - input [N-1:0] in3, - input [N-1:0] in2, - input [N-1:0] in1, - input [N-1:0] in0, - output [N-1:0] out -); - - assign out[N-1:0] = ({(N){sel0}} & in0[N-1:0] | - {(N){sel1}} & in1[N-1:0] | - {(N){sel2}} & in2[N-1:0] | - {(N){sel3}} & in3[N-1:0] | - {(N){sel4}} & in4[N-1:0] | - {(N){sel5}} & in5[N-1:0] | - {(N){sel6}} & in6[N-1:0] | - {(N){sel7}} & in7[N-1:0]); - -endmodule diff --git a/pyproject.toml b/pyproject.toml index 3565895..c0470d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,13 +20,13 @@ urls = {Homepage = "https://github.com/siliconcompiler/lambdalib"} requires-python = ">= 3.8" license = {file = "LICENSE"} dependencies = [ - "siliconcompiler >= 0.28.0", + "siliconcompiler @ git+https://github.com/siliconcompiler/siliconcompiler.git", "Jinja2 >= 3.1.3" ] dynamic = ['version'] [tool.setuptools.dynamic] -version = {attr = "lambdalib._common._version"} +version = {attr = "lambdalib.__version__"} [project.optional-dependencies] # Dev dependencies. diff --git a/scripts/gen_classes.py b/scripts/gen_classes.py new file mode 100644 index 0000000..194ce3a --- /dev/null +++ b/scripts/gen_classes.py @@ -0,0 +1,43 @@ +import argparse +import os +from jinja2 import Environment, FileSystemLoader +from pathlib import Path + + +def main(): + parser = argparse.ArgumentParser(description="""\ + Generates boiler plate lambalib design classes + """, formatter_class=argparse.RawDescriptionHelpFormatter) + + parser.add_argument("group", help="Group name") + parser.add_argument("-name", help="Design name") + + args = parser.parse_args() + + env = Environment(loader=FileSystemLoader('.')) + template = env.get_template('template.py.j2') + + lib = "../lambdalib" + + if args.name: + lb_list = [args.name] + else: + base = Path(lib) / args.group + paths = [p for p in base.iterdir() if p.is_dir()] + lb_list = [os.path.basename(item) for item in paths] + + for item in lb_list: + + context = { + 'module_name': item, + 'class_name': item[3:].capitalize() + } + output = template.render(context) + filename = f"{lib}/{args.group}/{item}/{item}.py" + with open(filename, 'w') as f: + f.write(output) + f.write("\n") + + +if __name__ == "__main__": + main() diff --git a/scripts/template.py.j2 b/scripts/template.py.j2 new file mode 100644 index 0000000..25c560c --- /dev/null +++ b/scripts/template.py.j2 @@ -0,0 +1,13 @@ +from lambdalib import Lambda + + +class {{ class_name }}(Lambda): + def __init__(self): + name = '{{ module_name }}' + sources = [f'rtl/{name}.v'] + super().__init__(name, sources, __file__) + + +if __name__ == "__main__": + d = {{ class_name }}() + d.write_fileset(f"{d.name()}.f", fileset="rtl") diff --git a/tests/test_generate.py b/tests/test_generate.py index 11c11ed..888172c 100644 --- a/tests/test_generate.py +++ b/tests/test_generate.py @@ -1,6 +1,9 @@ import os +import pytest import lambdalib +pytestmark = pytest.mark.skip(reason="Skipping until SC update finished") + def test_check(): lambdalib.copy('./lambda') diff --git a/tests/test_lint.py b/tests/test_lint.py new file mode 100644 index 0000000..578b32a --- /dev/null +++ b/tests/test_lint.py @@ -0,0 +1,53 @@ +import subprocess +import lambdalib as ll + + +def lint(design): + script = f"{design.name()}.f" + design.write_fileset(script, fileset="rtl") + cmd = ['slang', '-f', script] + return subprocess.run(cmd, + stderr=subprocess.STDOUT, + check=True) + + +def test_lint_stdlib(): + for name in ll.stdlib.__all__: + design = getattr(ll.stdlib, name) + assert lint(design()) + + +def test_lint_auxlib(): + for name in ll.auxlib.__all__: + design = getattr(ll.auxlib, name) + assert lint(design()) + + +def test_lint_ramlib(): + for name in ll.ramlib.__all__: + design = getattr(ll.ramlib, name) + assert lint(design()) + + +def test_lint_veclib(): + for name in ll.veclib.__all__: + design = getattr(ll.veclib, name) + assert lint(design()) + + +def test_lint_iolib(): + for name in ll.iolib.__all__: + design = getattr(ll.iolib, name) + assert lint(design()) + + +def test_lint_padring(): + for name in ll.padring.__all__: + design = getattr(ll.padring, name) + assert lint(design()) + + +def test_lint_fpgalib(): + for name in ll.fpgalib.__all__: + design = getattr(ll.fpgalib, name) + assert lint(design()) diff --git a/tests/test_local_detect.py b/tests/test_local_detect.py index 8bf7a2e..c5130c3 100644 --- a/tests/test_local_detect.py +++ b/tests/test_local_detect.py @@ -1,6 +1,9 @@ +import pytest from siliconcompiler import Chip from lambdalib._common import register_data_source +pytestmark = pytest.mark.skip(reason="Skipping until SC update finished") + def test_local_install_detection(): chip = Chip('') diff --git a/tests/test_paths.py b/tests/test_paths.py index 5440ff5..89060d0 100644 --- a/tests/test_paths.py +++ b/tests/test_paths.py @@ -1,7 +1,9 @@ from siliconcompiler import Chip - +import pytest import lambdalib +pytestmark = pytest.mark.skip(reason="Skipping until SC update finished") + def test_pdk_paths(): chip = Chip('') diff --git a/tests/test_rtl.py b/tests/test_rtl.py index cd27890..87ed40f 100644 --- a/tests/test_rtl.py +++ b/tests/test_rtl.py @@ -1,8 +1,11 @@ + import pytest +# import lambdalib +# from lambdalib.ramlib.la_asyncfifo.testbench import tb_la_asyncfifo -import lambdalib.ramlib.tests.tb_la_asyncfifo as ramlib_tests +pytestmark = pytest.mark.skip(reason="Skipping until SC update finished") -@pytest.mark.eda -def test_la_asyncfifo(): - ramlib_tests.test_la_asyncfifo() +# @pytest.mark.eda +# def test_la_asyncfifo(): +# tb_la_asyncfifo.test_la_asyncfifo() diff --git a/tests/test_setup.py b/tests/test_setup.py index e222ace..b5205d8 100644 --- a/tests/test_setup.py +++ b/tests/test_setup.py @@ -1,49 +1,50 @@ -import pytest -from siliconcompiler import Chip - -from lambdalib import \ - auxlib, \ - fpgalib, \ - iolib, \ - padring, \ - ramlib, \ - stdlib, \ - vectorlib -libraries = [ - auxlib, - fpgalib, - iolib, - padring, - ramlib, - stdlib, - vectorlib -] - - -@pytest.mark.parametrize('lib', libraries) -def test_setup(lib): - chip = Chip('') - chip.use(lib) - - lib_name = lib.__name__.replace('.', '_') - - assert lib_name in chip.getkeys('library') - assert len(chip.get('library', lib_name, 'option', 'ydir')) == 1 - - -@pytest.mark.parametrize( - 'lib,has_idir', - [(lib, lib == padring) for lib in libraries]) -def test_setup_with_idir(lib, has_idir): - chip = Chip('') - chip.use(lib) - - lib_name = lib.__name__.replace('.', '_') - - assert lib_name in chip.getkeys('library') - - excpect_idir = 0 - if has_idir: - excpect_idir = 1 - - assert len(chip.get('library', lib_name, 'option', 'idir')) == excpect_idir +import lambdalib as ll + + +def test_class_stdlib(): + for name in ll.stdlib.__all__: + obj = getattr(ll.stdlib, name) + instance = obj() + assert instance.check_filepaths() + + +def test_class_auxlib(): + for name in ll.auxlib.__all__: + obj = getattr(ll.auxlib, name) + instance = obj() + assert instance.check_filepaths() + + +def test_class_ramlib(): + for name in ll.ramlib.__all__: + obj = getattr(ll.ramlib, name) + instance = obj() + assert instance.check_filepaths() + + +def test_class_veclib(): + for name in ll.veclib.__all__: + obj = getattr(ll.veclib, name) + instance = obj() + assert instance.check_filepaths() + + +def test_class_iolib(): + for name in ll.iolib.__all__: + obj = getattr(ll.iolib, name) + instance = obj() + assert instance.check_filepaths() + + +def test_class_padring(): + for name in ll.padring.__all__: + obj = getattr(ll.padring, name) + instance = obj() + assert instance.check_filepaths() + + +def test_class_fpgalib(): + for name in ll.fpgalib.__all__: + obj = getattr(ll.fpgalib, name) + instance = obj() + assert instance.check_filepaths()