-import time
-
-# project module imports
-from interface_decl import *
-from interface_def import *
-from params import *
-from wire_def import *
-from actual_pinmux import *
-
-if not os.path.exists("bsv_src"):
- os.makedirs("bsv_src")
-
-bsv_file = open("./bsv_src/pinmux.bsv", "w")
-
-
-header = '''
-/*
- This BSV file has been generated by the PinMux tool available at:
- https://bitbucket.org/casl/pinmux.
-
- Authors: Neel Gala, Luke
- Date of generation: ''' + time.strftime("%c") + '''
-*/
-package pinmux;
-
- typedef struct{
- Bit#(1) outputval; // output from core to pad bit7
- Bit#(1) output_en; // output enable from core to pad bit6
- Bit#(1) input_en; // input enable from core to io_cell bit5
- Bit#(1) pullup_en; // pullup enable from core to io_cell bit4
- Bit#(1) pulldown_en; // pulldown enable from core to io_cell bit3
- Bit#(1) drivestrength; // drivestrength from core to io_cell bit2
- Bit#(1) pushpull_en; // pushpull enable from core to io_cell bit1
- Bit#(1) opendrain_en; // opendrain enable form core to io_cell bit0
- } GenericIOType deriving(Eq,Bits,FShow);
-
- interface Ifc_pinmux;
-'''
-footer = '''
- endmodule
-endpackage
-'''
-# ============================================#
-# ==== populating the file with the code =====#
-# ============================================#
-
-# package and interface declaration followed by the generic io_cell definition
-bsv_file.write(header)
-
-bsv_file.write('''
-
- // declare the method which will capture the user pin-mux
- // selection values.The width of the input is dependent on the number
- // of muxes happening per IO. For now we have a generalized width
- // where each IO will have the same number of muxes.''')
-
-for cell in muxed_cells:
- bsv_file.write(mux_interface.format(cell[0], len(cell) - 1))
-
-bsv_file.write('''
-
- // declare the interface to the IO cells.
- // Each IO cell will have 8 input field (output from pin mux
- // and on output field (input to pinmux)''')
-for i in range(0, N_IO):
- bsv_file.write('''\n // interface for IO CEll-{0}''')
- bsv_file.write(io_interface.format(i))
-# ==============================================================
-
-# == create method definitions for all peripheral interfaces ==#
-for i in range(0, N_UART):
- bsv_file.write('''
- // interface declaration between UART-{0} and pinmux'''.format(i))
- bsv_file.write(uartinterface_decl.format(i))
-
-for i in range(0, N_SPI):
- bsv_file.write('''
- // interface declaration between SPI-{0} and pinmux'''.format(i))
- bsv_file.write(spiinterface_decl.format(i))
-
-for i in range(0, N_TWI):
- bsv_file.write('''
- // interface declaration between TWI-{0} and pinmux'''.format(i))
- bsv_file.write(twiinterface_decl.format(i))
-# ==============================================================
-
-# ===== finish interface definition and start module definition=======
-bsv_file.write('''
- endinterface
- (*synthesize*)
- module mkpinmux(Ifc_pinmux);
-''')
-# ====================================================================
-
-# ======================= create wire and registers =================#
-bsv_file.write('''
- // the followins wires capture the pin-mux selection
- // values for each mux assigned to a CELL
+import json
+from spec import modules, specgen, dummytest
+from spec.ifaceprint import create_sv, temp_create_sv
+import jsoncreate
+
+def printhelp():
+ print ('''pinmux_generator.py [-o outputdir] [-v|--validate] [-h|--help]
+ [-t outputtype] [-s|--spec spec]
+ -s | spec : generate from spec (python module)
+ -t | outputtype : outputtype, defaults to bsv
+ -o outputdir : defaults to bsv_src. also location for reading pinmux.txt
+ interfaces.txt and *.txt
+ -v | --validate : runs some validation on the pinmux
+ -h | --help : this help message