X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fpinmux_generator.py;h=55795c9dba586002c3fd70ce41d022bb372ddf97;hb=7a1f6b39c90d52c8b22c5699ba4ded51ac667d9b;hp=dbea8d5609ebd274dc64e9c4a267a81b7713c5e4;hpb=b810d8d4e7fb0eb4f68b84692ce75c63bc016e64;p=pinmux.git diff --git a/src/pinmux_generator.py b/src/pinmux_generator.py index dbea8d5..55795c9 100644 --- a/src/pinmux_generator.py +++ b/src/pinmux_generator.py @@ -19,11 +19,12 @@ import os import sys import time +import math # project module imports from interface_decl import * from interface_def import * -from params import * +from parse import * from wire_def import * from actual_pinmux import * @@ -31,6 +32,8 @@ 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: @@ -52,9 +55,10 @@ package pinmux; Bit#(1) opendrain_en; // opendrain enable form core to io_cell bit0 } GenericIOType deriving(Eq,Bits,FShow); - interface Ifc_pinmux; + interface MuxSelectionLines; ''' footer = ''' + endinterface; endmodule endpackage ''' @@ -72,11 +76,14 @@ bsv_file.write(''' // of muxes happening per IO. For now we have a generalized width // where each IO will have the same number of muxes.''') -for i in range(0, N_IO): - bsv_file.write(mux_interface.format(i)) +for cell in muxed_cells: + bsv_file.write(mux_interface.format(cell[0], + int(math.log(len(cell) - 1, 2)))) bsv_file.write(''' + endinterface + interface PeripheralSide; // 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)''') @@ -100,11 +107,26 @@ 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)) + +for i in range(0, N_SD): + bsv_file.write(''' + // interface declaration between SD-{0} and pinmux'''.format(i)) + bsv_file.write(sdinterface_decl.format(i)) + +for i in range(0, N_JTAG): + bsv_file.write(''' + // interface declaration between JTAG-{0} and pinmux'''.format(i)) + bsv_file.write(jtaginterface_decl.format(i)) # ============================================================== # ===== finish interface definition and start module definition======= bsv_file.write(''' endinterface + + interface Ifc_pinmux; + interface MuxSelectionLines mux_lines; + interface PeripheralSide peripheral_side; + endinterface (*synthesize*) module mkpinmux(Ifc_pinmux); ''') @@ -115,8 +137,8 @@ bsv_file.write(''' // the followins wires capture the pin-mux selection // values for each mux assigned to a CELL ''') -for i in range(0, N_IO): - bsv_file.write(muxwire.format(i)) +for cell in muxed_cells: + bsv_file.write(muxwire.format(cell[0], int(math.log(len(cell) - 1, 2)))) bsv_file.write( @@ -141,6 +163,18 @@ for i in range(0, N_TWI): '''\n // following wires capture signals to IO CELL if twi-{0} is // allotted to it'''.format(i)) bsv_file.write(twiwires.format(i)) + +for i in range(0, N_SD): + bsv_file.write( + '''\n // following wires capture signals to IO CELL if sd-{0} is + // allotted to it'''.format(i)) + bsv_file.write(sdwires.format(i)) + +for i in range(0, N_JTAG): + bsv_file.write( + '''\n // following wires capture signals to IO CELL if jtag-{0} is + // allotted to it'''.format(i)) + bsv_file.write(jtagwires.format(i)) bsv_file.write("\n") # ==================================================================== # ========================= Actual pinmuxing ========================# @@ -153,8 +187,16 @@ bsv_file.write(''' ''') # ==================================================================== # ================= interface definitions for each method =============# -for i in range(0, N_IO): - bsv_file.write(mux_interface_def.format(i)) +bsv_file.write(''' + interface mux_lines = interface MuxSelectionLines +''') +for cell in muxed_cells: + bsv_file.write(mux_interface_def.format(cell[0], + int(math.log(len(cell) - 1, 2)))) +bsv_file.write(''' + endinterface; + interface peripheral_side = interface PeripheralSide +''') for i in range(0, N_IO): bsv_file.write(io_interface_def.format(i)) for i in range(0, N_UART): @@ -163,6 +205,27 @@ for i in range(0, N_SPI): bsv_file.write(spiinterface_def.format(i)) for i in range(0, N_TWI): bsv_file.write(twiinterface_def.format(i)) +for i in range(0, N_SD): + bsv_file.write(sdinterface_def.format(i)) +for i in range(0, N_JTAG): + bsv_file.write(jtaginterface_def.format(i)) bsv_file.write(footer) print("BSV file successfully generated: bsv_src/pinmux.bsv") # ====================================================================== +bsv_file.close() + +bsv_file = open('bsv_src/PinTop.bsv','w') +bsv_file.write(''' +package PinTop; + import pinmux::*; + interface Ifc_PintTop; + interface PeripheralSide peripheral_side; + endinterface + + module mkPinTop(Ifc_PintTop); + Ifc_pinmux pinmux <-mkpinmux; + interface peripheral_side=pinmux.peripheral_side; + endmodule +endpackage +''') +bsv_file.close