// 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))
+ bsv_file.write(io_interface.ifacefmt(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))
+ bsv_file.write(uartinterface_decl.ifacefmt(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))
+ bsv_file.write(spiinterface_decl.ifacefmt(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))
+ bsv_file.write(twiinterface_decl.ifacefmt(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))
+ bsv_file.write(sdinterface_decl.ifacefmt(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))
+ bsv_file.write(jtaginterface_decl.ifacefmt(i))
for i in range(0, N_PWM):
bsv_file.write('''
// interface declaration between PWM-{0} and pinmux'''.format(i))
- bsv_file.write(pwminterface_decl.format(i))
+ bsv_file.write(pwminterface_decl.ifacefmt(i))
# ==============================================================
# ===== finish interface definition and start module definition=======
bsv_file.write(
'''\n // following wires capture signals to IO CELL if twi-{0} is
// allotted to it'''.format(i))
- bsv_file.write(twiwires.format(i))
+ bsv_file.write(twiwires.format(i))
for i in range(0, N_SD):
bsv_file.write(
interface peripheral_side = interface PeripheralSide
''')
for i in range(0, N_IO):
- bsv_file.write(io_interface_def.format(i))
+ bsv_file.write(io_interface.ifacedef(i))
for i in range(0, N_UART):
bsv_file.write(uartinterface_def.format(i))
for i in range(0, N_SPI):
print("BSV file successfully generated: bsv_src/pinmux.bsv")
# ======================================================================
-bsv_file = open('bsv_src/PinTop.bsv', 'w')
-bsv_file.write(copyright+'''
+with open('bsv_src/PinTop.bsv', 'w') as bsv_file:
+ bsv_file.write(copyright+'''
package PinTop;
import pinmux::*;
interface Ifc_PintTop;
// declare the registers which will be used to mux the IOs
'''.format(ADDR_WIDTH, DATA_WIDTH))
-for cell in muxed_cells:
- bsv_file.write('''
- Reg#(Bit#({0})) rg_muxio_{1} <-mkReg(0);'''.format(
- int(math.log(len(cell) - 1, 2)), cell[0]))
+ for cell in muxed_cells:
+ bsv_file.write('''
+ Reg#(Bit#({0})) rg_muxio_{1} <-mkReg(0);'''.format(
+ int(math.log(len(cell) - 1, 2)), cell[0]))
-bsv_file.write('''
+ bsv_file.write('''
// rule to connect the registers to the selection lines of the
// pin-mux module
rule connect_selection_registers;''')
-for cell in muxed_cells:
- bsv_file.write('''
+ for cell in muxed_cells:
+ bsv_file.write('''
pinmux.mux_lines.cell{0}_mux(rg_muxio_{0});'''.format(cell[0]))
-bsv_file.write('''
+ bsv_file.write('''
endrule
// method definitions for the write user interface
method ActionValue#(Bool) write(Bit#({2}) addr, Bit#({3}) data);
Bool err=False;
case (addr[{0}:{1}])'''.format(upper_offset, lower_offset,
ADDR_WIDTH, DATA_WIDTH))
-index = 0
-for cell in muxed_cells:
- bsv_file.write('''
+ index = 0
+ for cell in muxed_cells:
+ bsv_file.write('''
{0}: rg_muxio_{1}<=truncate(data);'''.format(index, cell[0]))
- index = index + 1
+ index = index + 1
-bsv_file.write('''
+ bsv_file.write('''
default: err=True;
endcase
return err;
endmethod''')
-bsv_file.write('''
+ bsv_file.write('''
// method definitions for the read user interface
method Tuple2#(Bool,Bit#({3})) read(Bit#({2}) addr);
Bool err=False;
Bit#(32) data=0;
case (addr[{0}:{1}])'''.format(upper_offset, lower_offset,
ADDR_WIDTH, DATA_WIDTH))
-index = 0
-for cell in muxed_cells:
- bsv_file.write('''
+ index = 0
+ for cell in muxed_cells:
+ bsv_file.write('''
{0}: data=zeroExtend(rg_muxio_{1});'''.format(index, cell[0]))
- index = index + 1
+ index = index + 1
-bsv_file.write('''
+ bsv_file.write('''
default:err=True;
endcase
return tuple2(err,data);
endmodule
endpackage
''')
-bsv_file.close
+
# ######## Generate bus transactors ################
-bsv_file = open('bsv_src/bus.bsv', 'w')
-bsv_file.write(axi4_lite.format(ADDR_WIDTH, DATA_WIDTH))
-bsv_file.close
+with open('bsv_src/bus.bsv', 'w') as bsv_file:
+ bsv_file.write(axi4_lite.format(ADDR_WIDTH, DATA_WIDTH))
# ##################################################
+