Il simulatore PLA è scritto in Python 2.7-3.7 ed è mantenuto sotto CVS (Concurrent Versions System).
Il simulatore è distribuito in forma open source, sotto la GNU GENERAL PUBLIC LICENSE.
La
documentazione di riferimento
(disponibile anche in versione pdf).
è la base di
partenza per sviluppatori interessati ad ampliare e/o modificare il progetto.
Essa è generata mediante
Epydoc, che
raccoglie e formatta le docstrings di Python.
Per tale motivo i commenti in docstrings aderiscono alla sintassi
Epytext Markup Language;
poiché Epydoc specifica nei file HTML la relativa codifica, non è necessatio usare
notazioni particolari per rappresentare correttamente le vocali italiano accentate.
I commenti iniziati invece con il
simbolo # non sono prelevati per la documentazione e possono quindi
essere liberi.
Per rigenerare la documentazione di riferimento in un sistema UNIX basta posizionarsi
nella directory della distribuzione, e scrivere la seguente riga di comando:
doc/make_epy.sh
Qualora si ottenesse il messaggio di errore:
doc/make_epy.sh: Permission denied.
Esguire il comando:
chmod +x doc/make_epy.sh && doc/make_epy.sh
La sezione del codice preliminarmente predisposta per ampliamenti, anche da
parte di chi non sia programmatore in Python, è la libreria di circuiti logici,
che può essere personalizzata a piacimento, per scopi didattici o altro.
Il modulo da modificare è circuits.py. La sua sezione fuori dalla
classe Circuit è una collezione di istanze, ciascuna può essere usata
come template per nuovi circuiti. La programmazione è facilitata dalla
flessibile sintassi delle slice del Python nelle matrici NumPy, per
esempio l'espressione:
circ_a.and_matrix[ 4, 1 : 4 : 2 ] = 1
ha l'effetto di rendere connessi i fusibili della matrice tra ingresso e porte
AND, per tutta la quinta riga, nelle seconda e quarta colonna, mentre:
circ_a.and_matrix[ 6, 1 : : 4 ] = 1
connette tutti i fusibili della settima riga, per ogni colonna a partire dalla
seconda fino all'ultima, in passi di quattro. Notare che, siccome nella pratica
per la maggior parte dei circuiti le matrici sono piuttosto sparse, il
procedimento utilizzato per la libreria è quello opposto rispetto alla
programmazione logica manuale del simulatore: si inizia da matrici con tutti i
fusibili scollegati, e si specificano, con sintassi come quelle mostrate sopra,
i nodi che vanno connessi.
Per creare nuovi circuiti a partire da una funzione logica è possibile utilizzare
una delle seguenti funzioni:
generate_code(name, description, function, input_names, output_names)
generate_obj(description, function, input_names, output_names)
la prima stampa a schermo il codice da inserire nell'apposito modulo, la seconda
(da richiamare nel modulo stesso) restituisce un oggetto di tipo Circuit.
La funzione logica da passare ai due metodi sopra citati deve prendere in input
n_i parametri booleani e restituire una tupla di n_o booleani.
I parametri input_names e output_names devono essere tuple o liste
contenti rispettivamente n_i stringhe e n_o stringhe.
Notare che ogni circuito nuovo, perché sia visibile e utilizzabile nel simulatore, deve essere aggiunto alla lista circs, nell'ultima istruzione del modulo circuits.py.
Per segnalazioni e contatti scrivere a Alice Plebe, autore della prima versione, o a Matteo Cavallaro, autore della presente versione.