\chapter[Progetto hardware e pinout]{Progetto hardware e mappa dei segnali} \label{ch:hw} \begin{fnnote}[Stato del pinout --- assegnato e verificato] Esiste ora un \code{.lpf} reale (\code{synth/ecp5/spi\_neuron\_top.lpf}) con i \textbf{57 segnali} del top-level assegnati a ball CABGA381 concrete, \textbf{verificato da un place\&route \code{nextpnr-ecp5} completo a 0 errori} (non più \code{-{}-lpf-allow-unconstrained}). Le ball derivano dal database di dispositivo di Project~Trellis (\code{iodb.json}, lo stesso che usa nextpnr) e sono state validate in modo indipendente contro la §4.3.2 del datasheet Lattice ufficiale (conteggi GPIO per banco: coincidenza esatta su 6 banchi su 7, scostamento di 1 ball sul banco 3, irrilevante perché nessun segnale assegnato lo usa). \code{TRELLIS\_IO}: 57/245 (23\%). Fmax del build corrente (sistema completo incl. sottosistema flash con bus SPI indipendente, Fase F7, 2026-09-04) \textbf{67.91~MHz}, percorso critico confermato ancora sulla catena di accumulo di \code{neuron\_parallel}, invariato rispetto alle build precedenti (cap.~\ref{ch:impl}). Sunto pin-per-pin a inizio documento (pagg.~2--3). Le ball di config-SPI di boot e JTAG non compaiono qui perché sono pin dedicati a funzione fissa, senza porta RTL corrispondente: nextpnr non le richiede mai (0 errori), contano solo per lo schematic PCB. \end{fnnote} \section{Dispositivo target} \begin{tabularx}{\textwidth}{L{4.2cm}Y} \toprule \rowh \thd{Parametro} & \thd{Valore} \\ \midrule Dispositivo & Lattice ECP5 \code{LFE5U-45F-8BG381C} \\ \rowa Package & CABGA381 (381 ball) \\ Speed grade & $-8$ (il più veloce della famiglia ECP5) \\ \rowa Risorse & $\approx$44k LUT/FF, 72$\times$\code{MULT18X18D}, block RAM \code{DP16KD} \\ I/O utilizzabili & $\approx$232 ball su 381 (resto: alimentazione/massa/NC) \\ \bottomrule \end{tabularx} \section{Budget dei pin} Il progetto richiede circa 60 segnali su $\approx$232 I/O utilizzabili: ampio margine ($>$170 pin liberi), quindi la scheda non è pin-constrained. \begin{tabularx}{\textwidth}{Y C{2.2cm}} \toprule \rowh \thd{Funzione} & \thd{Pin} \\ \midrule PSRAM (indirizzi 22, dati 16, controllo 6) & fino a 44 \\ \rowa SPI applicativo (\code{sclk/mosi/miso/cs\_n}) & 4 \\ Clock, reset & 2 \\ \rowa Pin attenzione host (\code{irq\_n}, \code{data\_ready\_n}) & 2 \\ Bus SPI flash runtime (\code{flash\_sclk/flash\_mosi/flash\_miso/flash\_cs\_n}, GPIO ordinario, bus indipendente --- Fase F7) & 4 \\ \rowa JTAG (bring-up / debug, consigliato) & 4 \\ \midrule \rowh \thd{Totale} & \thd{$\approx$60} \\ \bottomrule \end{tabularx} \section{Mappa dei segnali (top-level \texttt{spi\_neuron\_top}) --- ball reali} Assegnazione reale dei 57 segnali del top-level, verificata da place\&route, \textbf{ball individuale per ogni bit} (mai un intervallo di bus). Standard I/O: LVCMOS33 (alimentazione I/O a 3.3~V). Le ball provengono dal \code{.lpf} reale place\&route-verified. Sunto compatto della stessa tabella anche a inizio documento (pagg.~2--3). \renewcommand{\arraystretch}{1.1} \begin{tabularx}{\textwidth}{L{3.0cm} C{1.0cm} C{1.9cm} C{1.0cm} Y} \toprule \rowh \thd{Segnale} & \thd{Dir} & \thd{Ball} & \thd{Banco} & \thd{Funzione} \\ \midrule \multicolumn{5}{l}{\textit{\color{fnDark}Clock e reset (banco 7, lato sinistro)}}\\ \code{clk} & IN & H5 & 7 & Clock di sistema su pad \code{GR\_PCLK7\_0} (clock globale dedicato). \\ \rowa \code{rst} & IN & B4 & 7 & Reset globale sincrono, attivo alto. \\ \multicolumn{5}{l}{\textit{\color{fnDark}SPI applicativo (banco 7, opposto al bus PSRAM)}}\\ \code{sclk} & IN & B5 & 7 & SPI clock (CPOL=0, CPHA=0). \\ \rowa \code{mosi} & IN & C5 & 7 & Master-Out Slave-In. \\ \code{miso} & OUT & A3 & 7 & Master-In Slave-Out (pilotato sul fronte di discesa). \\ \rowa \code{cs\_n} & IN & B3 & 7 & Chip-select attivo basso. \\ \multicolumn{5}{l}{\textit{\color{fnDark}Pin di attenzione host (banco 7, attivi bassi, di livello)}}\\ \code{data\_ready\_n} & OUT & C3 & 7 & Basso finché un risultato attende lettura (specchio di \code{STATUS.done}, clear su lettura STATUS). \\ \rowa \code{irq\_n} & OUT & C4 & 7 & Basso se il guard load-time del grafo è scattato (specchio di \code{STATUS.err}); si azzera solo su \code{RESET} o nuovo \code{run\_start}, \emph{non} su lettura STATUS. \\ \multicolumn{5}{l}{\textit{\color{fnDark}Flash subsystem --- SPI verso W25Q128JV onboard, bus indipendente (banco 7, Fasi F1-F7)}}\\ \code{flash\_sclk} & OUT & E3 & 7 & SPI clock verso la flash --- GPIO ordinario, nessuna primitiva di config coinvolta (Fase F7). \\ \rowa \code{flash\_mosi} & OUT & D3 & 7 & Master-Out Slave-In verso la flash. \\ \code{flash\_miso} & IN & D5 & 7 & Master-In Slave-Out dalla flash. \\ \rowa \code{flash\_cs\_n} & OUT & E4 & 7 & Chip-select flash, attivo basso. \\ \multicolumn{5}{l}{\textit{\color{fnDark}Bus PSRAM indirizzi \code{psram\_a[21:0]} --- 22 ball individuali (banco 2)}}\\ \code{psram\_a[0]} & OUT & E16 & 2 & PSRAM A0 \\ \rowa \code{psram\_a[1]} & OUT & F16 & 2 & PSRAM A1 \\ \code{psram\_a[2]} & OUT & D18 & 2 & PSRAM A2 \\ \rowa \code{psram\_a[3]} & OUT & E17 & 2 & PSRAM A3 \\ \code{psram\_a[4]} & OUT & E18 & 2 & PSRAM A4 \\ \rowa \code{psram\_a[5]} & OUT & F18 & 2 & PSRAM A5 \\ \code{psram\_a[6]} & OUT & F17 & 2 & PSRAM A6 \\ \rowa \code{psram\_a[7]} & OUT & G16 & 2 & PSRAM A7 \\ \code{psram\_a[8]} & OUT & G18 & 2 & PSRAM A8 \\ \rowa \code{psram\_a[9]} & OUT & H16 & 2 & PSRAM A9 \\ \code{psram\_a[10]} & OUT & H17 & 2 & PSRAM A10 \\ \rowa \code{psram\_a[11]} & OUT & H18 & 2 & PSRAM A11 \\ \code{psram\_a[12]} & OUT & J16 & 2 & PSRAM A12 \\ \rowa \code{psram\_a[13]} & OUT & J17 & 2 & PSRAM A13 \\ \code{psram\_a[14]} & OUT & C20 & 2 & PSRAM A14 \\ \rowa \code{psram\_a[15]} & OUT & D19 & 2 & PSRAM A15 \\ \code{psram\_a[16]} & OUT & E19 & 2 & PSRAM A16 \\ \rowa \code{psram\_a[17]} & OUT & E20 & 2 & PSRAM A17 \\ \code{psram\_a[18]} & OUT & F19 & 2 & PSRAM A18 \\ \rowa \code{psram\_a[19]} & OUT & F20 & 2 & PSRAM A19 \\ \code{psram\_a[20]} & OUT & G20 & 2 & PSRAM A20 \\ \rowa \code{psram\_a[21]} & OUT & H20 & 2 & PSRAM A21 \\ \code{psram\_a[22]} & OUT & P18 & 3 & Sempre 0 (shift byte$\to$word): NC sulla scheda. \\ \multicolumn{5}{l}{\textit{\color{fnDark}Bus PSRAM dati \code{psram\_dq[15:0]} --- 16 ball individuali (banchi 2 e 3)}}\\ \rowa \code{psram\_dq[0]} & IO & K18 & 2 & PSRAM DQ0 \\ \code{psram\_dq[1]} & IO & C18 & 2 & PSRAM DQ1 (dual-function, usata come GPIO ordinario). \\ \rowa \code{psram\_dq[2]} & IO & D17 & 2 & PSRAM DQ2 \\ \code{psram\_dq[3]} & IO & D20 & 2 & PSRAM DQ3 \\ \rowa \code{psram\_dq[4]} & IO & G19 & 2 & PSRAM DQ4 \\ \code{psram\_dq[5]} & IO & J18 & 2 & PSRAM DQ5 \\ \rowa \code{psram\_dq[6]} & IO & J19 & 2 & PSRAM DQ6 \\ \code{psram\_dq[7]} & IO & J20 & 2 & PSRAM DQ7 \\ \rowa \code{psram\_dq[8]} & IO & K19 & 2 & PSRAM DQ8 \\ \code{psram\_dq[9]} & IO & K20 & 2 & PSRAM DQ9 \\ \rowa \code{psram\_dq[10]} & IO & L17 & 3 & PSRAM DQ10 \\ \code{psram\_dq[11]} & IO & M18 & 3 & PSRAM DQ11 \\ \rowa \code{psram\_dq[12]} & IO & M17 & 3 & PSRAM DQ12 \\ \code{psram\_dq[13]} & IO & N16 & 3 & PSRAM DQ13 \\ \rowa \code{psram\_dq[14]} & IO & N18 & 3 & PSRAM DQ14 \\ \code{psram\_dq[15]} & IO & P17 & 3 & PSRAM DQ15 (bus dati bidirezionale tri-state, \code{dq\_oe} = direzione). \\ \multicolumn{5}{l}{\textit{\color{fnDark}Controllo PSRAM (banco 3)}}\\ \rowa \code{psram\_ce\_n} & OUT & N17 & 3 & Chip enable, attivo basso. \\ \code{psram\_oe\_n} & OUT & R16 & 3 & Output enable (lettura). \\ \rowa \code{psram\_we\_n} & OUT & R17 & 3 & Write enable (scrittura). \\ \code{psram\_lb\_n} & OUT & T16 & 3 & Lower-byte enable (DQ[7:0]). \\ \rowa \code{psram\_ub\_n} & OUT & N19 & 3 & Upper-byte enable (DQ[15:8]). \\ \code{psram\_zz\_n} & OUT & N20 & 3 & Sleep/snooze (inattivo=alto in funzionamento). \\ \bottomrule \end{tabularx} \renewcommand{\arraystretch}{1.25} \begin{fnnote}[Segnali di scheda non esposti come porte RTL] Non sono porte di \code{spi\_neuron\_top} ma vanno previsti a livello di scheda: le linee di \textbf{SPI di configurazione} verso la flash NOR onboard (\code{PROGRAMN}/\code{INITN}/ \code{DONE}/\code{CCLK}\ldots, i ``Miscellaneous Dedicated Pins'' del datasheet) e le 4 linee \textbf{JTAG} (\code{TCK}/\code{TMS}/\code{TDI}/\code{TDO}), l'\textbf{oscillatore} sul pad \code{PCLK}, le \textbf{alimentazioni}. I loro numeri di ball non sono nel datasheet Lattice (file separato) ma non servono qui: sono pin dedicati senza porta RTL, nextpnr non li richiede mai (0 errori), contano solo per lo schematic PCB. \end{fnnote} \begin{fnwarn}[SPI applicativo separato dallo SPI di configurazione] L'SPI applicativo (\code{sclk/mosi/miso/cs\_n}) deve cadere su I/O ordinarie, \textbf{mai} sui pin dell'SPI di configurazione: il pin di clock della config-SPI non è riutilizzabile come ingresso generico dopo la configurazione senza workaround a livello di scheda. Tenerli fisicamente separati evita quel problema. \end{fnwarn} \section{Allocazione per banchi (geometria reale del die)} La collocazione segue la geometria dei bordi del die (da \code{globals.json} di Trellis, ball~$\to$~(col,row)~$\to$~banco): i banchi \textbf{2 e 3} sono contigui lungo il bordo \textbf{destro} del chip e ospitano insieme l'intero bus PSRAM (44+1 segnali) --- esattamente gli ``uno o due banchi adiacenti'' raccomandati. Il banco \textbf{7} (bordo \textbf{sinistro}, fisicamente opposto al bus PSRAM) ospita SPI applicativo e clock/reset, deliberatamente sul lato opposto per non far incrociare i due bus. \code{clk} è sul pad dedicato \code{H5} (\code{GR\_PCLK7\_0}). Dove un banco esauriva le ball ``plain'' (parte di \code{psram\_dq}), è stata usata la ball dual-function successiva come GPIO ordinario, confermata utilizzabile dal place\&route reale. \begin{tabularx}{\textwidth}{Y C{1.6cm} L{4.4cm}} \toprule \rowh \thd{Gruppo di segnali} & \thd{N. pin} & \thd{Banco (reale)} \\ \midrule Indirizzi PSRAM \code{psram\_a[21:0]} & 22 & banco 2 (bordo destro) \\ \rowa Dati PSRAM \code{psram\_dq[15:0]} & 16 & banchi 2 + 3 (adiacenti) \\ Controllo PSRAM (ce/oe/we/lb/ub/zz) & 6 & banco 3 \\ \rowa SPI applicativo & 4 & banco 7 (bordo sinistro) \\ Pin attenzione host (\code{irq\_n}, \code{data\_ready\_n}) & 2 & banco 7 \\ \rowa Bus SPI flash indipendente (\code{flash\_sclk/flash\_mosi/flash\_miso/flash\_cs\_n}) & 4 & banco 7 \\ Clock / reset & 2 & banco 7, \code{clk} su \code{GR\_PCLK7\_0} \\ \rowa Config SPI boot / JTAG & --- & pin dedicati (fuori RTL, solo PCB) \\ \bottomrule \end{tabularx} \section{Sottosistema PSRAM} Il controller \code{psram\_controller.v} implementa un'interfaccia \textbf{parallela asincrona} (bus indirizzi, dati 16-bit, \code{ce\_n/oe\_n/we\_n} e byte-lane \code{lb\_n/ub\_n}, più \code{zz\_n}) con latenza di accesso \textbf{70~ns} cablata come $\lceil 70\,\text{ns}\times f_{clk}\rceil$. È un bus in stile SRAM asincrona, non QSPI. \begin{tabularx}{\textwidth}{L{3.0cm}Y} \toprule \rowh \thd{Ruolo} & \thd{Componente} \\ \midrule Memoria di lavoro & ISSI \code{IS66WVE4M16EBLL-70BLI} --- PSRAM parallela 64\,Mbit (4M$\times$16, 8~MB), async, 70~ns, corrispondente esatto alla temporizzazione del controller. \\ \rowa Fallback & ISSI \code{IS61WV6416DBLL} / \code{IS61WV102416BLL} (SRAM async vera, drop-in sugli stessi segnali, \code{zz\_n} inattivo, $\sim$10~ns, densità minore). \\ Storage persistente & Winbond \code{W25Q128JV} --- flash NOR SPI 16~MB per bitstream, pesi, bias, metadati di rete. \\ \bottomrule \end{tabularx} \subsection{Collegamento PSRAM (esclusivo della FPGA)} La PSRAM è pilotata \textbf{esclusivamente dalla FPGA} tramite \code{psram\_controller.v}: nessun master esterno accede al bus. L'host esterno (RPi/ESP32/MCU) parla solo SPI con la FPGA e non tocca mai queste linee. Collegamento pin-per-pin FPGA~$\leftrightarrow$~ISSI \code{IS66WVE4M16EBLL-70BLI}: \begin{tabularx}{\textwidth}{L{3.6cm} L{3.0cm} Y} \toprule \rowh \thd{Segnale FPGA} & \thd{Pin PSRAM} & \thd{Funzione} \\ \midrule \code{psram\_a[21:0]} & A0--A21 & Bus indirizzi (22 linee, 8~MB word address). \\ \rowa \code{psram\_dq[15:0]} & DQ0--DQ15 & Bus dati bidirezionale (tri-state, \code{dq\_oe}=direzione). \\ \code{psram\_ce\_n} & CE\# & Chip enable (attivo basso). \\ \rowa \code{psram\_oe\_n} & OE\# & Output enable (lettura). \\ \code{psram\_we\_n} & WE\# & Write enable (scrittura). \\ \rowa \code{psram\_lb\_n} & LB\# & Lower-byte enable (DQ[7:0]). \\ \code{psram\_ub\_n} & UB\# & Upper-byte enable (DQ[15:8]). \\ \rowa \code{psram\_zz\_n} & ZZ\# & Sleep/snooze (tenuto alto in funzionamento). \\ \bottomrule \end{tabularx} Alimentazione PSRAM: \textbf{3.3~V} (variante BLL), sullo stesso rail I/O dei banchi 2/3 a cui è cablata (cap.~\ref{ch:hw}, ball reali). Disaccoppiamento per pin di alimentazione secondo il datasheet ISSI. \section{Clock} \label{sec:clock} Non esiste ancora alcun PLL nell'RTL: \code{CLK\_FREQ\_MHZ} è un \emph{parametro di temporizzazione} (alimenta le formule di accesso PSRAM), non un generatore di clock. L'oscillatore montato pilota \code{clk} direttamente. Raccomandazione: oscillatore MEMS 16~MHz (famiglia SiTime SiT2001B), ben al di sotto dei 67.91~MHz di Fmax del sistema integrato completo (incl. sottosistema flash, cap.~\ref{ch:impl}). \code{CLK\_FREQ\_MHZ} deve essere impostato al valore reale dell'oscillatore montato, altrimenti la temporizzazione PSRAM risulta errata. \section{Alimentazione} Albero a \textbf{tre rail} (la sezione SERDES dell'eval board Lattice non serve e va omessa: niente \code{VCCA}/\code{VCCHTX} a 1.2~V): \begin{tabularx}{\textwidth}{L{3.4cm} C{2.0cm} Y} \toprule \rowh \thd{Rail} & \thd{Tensione} & \thd{Alimenta / regolatore} \\ \midrule \code{VCC} (core) & 1.1~V & Core logico FPGA. Buck \code{TLV62568}, $\geq$600~mA. \\ \rowa \code{VCCIO0/2/3/6/7} & 3.3~V & I/O di tutti i banchi usati + PSRAM. Buck \code{TLV62568}, 1~A. \\ \code{VCCAUX} & 2.5~V & Ausiliario FPGA. LDO \code{TLV73325}, 10~mA. \\ \bottomrule \end{tabularx} Disaccoppiamento: almeno un condensatore per pin di alimentazione + bulk per rail, secondo la checklist hardware ECP5 Lattice. Ingresso: 12~V esterno (o adatta i buck alla sorgente). \section{Configurazione e programmazione} \label{sec:config} La ``scrittura della mappa'' dell'FPGA (bitstream) avviene tramite pin dedicati del silicio, \textbf{non} porte del top-level RTL. Modo di default: \textbf{MSPI} --- boot automatico dalla flash NOR all'accensione (prodotto standalone); JTAG disponibile per lo sviluppo. \subsection{JTAG (sviluppo / debug)} \begin{tabularx}{\textwidth}{L{3.0cm} C{2.2cm} Y} \toprule \rowh \thd{Segnale} & \thd{Ball\textsuperscript{$\dagger$}} & \thd{Funzione} \\ \midrule \code{TCK} & T5 & Test clock. \\ \rowa \code{TDI} & R5 & Test data in. \\ \code{TDO} & V4 & Test data out. \\ \rowa \code{TMS} & U5 & Test mode select. \\ \bottomrule \end{tabularx} \subsection{Config-SPI verso boot flash} La FPGA carica il bitstream dalla \textbf{Winbond \code{W25Q128JV}} (128~Mbit SPI NOR, Quad read) all'accensione. Il sottosistema flash (\code{rtl/flash\_slot\_manager.v}, Fasi F1-F7, cap.~\ref{ch:impl}) usa la \textbf{stessa flash fisica} per pesi/bias/metadati di rete a runtime, accesso esclusivo della FPGA: dopo la configurazione, la FPGA riprende il controllo del chip via un bus SPI a 4 fili completamente indipendente, \code{flash\_sclk/flash\_mosi/flash\_miso/flash\_cs\_n} (tutti GPIO ordinario, pagg.~2--3 e §``Mappa dei segnali'' --- nessuna primitiva di configurazione ECP5 coinvolta, Fase F7) --- implica comunque un doppio collegamento a livello di scheda (DI/DO/CS/CLK della flash cablati sia ai pin dedicati di boot sotto sia a queste 4 ball ordinarie, poiché è lo stesso chip fisico a svolgere entrambi i ruoli), non ancora riportato in uno schematico (nessuno esiste ancora, vedi checklist sotto). \begin{tabularx}{\textwidth}{L{3.4cm} C{2.2cm} Y} \toprule \rowh \thd{Segnale} & \thd{Ball\textsuperscript{$\dagger$}} & \thd{Funzione} \\ \midrule \code{CCLK/MCLK/SCK} & U3 & Clock di configurazione. \\ \rowa \code{DQ0\_MOSI} & W2 & Dato config (MOSI). \\ \code{DQ1\_MISO} & V2 & Dato config (MISO). \\ \rowa \code{BUSY\_CSSPIN} & R2 & Chip-select flash. \\ \code{DQ2 / DQ3} & Y2 / W1 & Linee per Quad read. \\ \rowa \code{PROGRAMN} & W3 & Avvia riconfigurazione (pulsante, attivo basso). \\ \code{INITN} & V3 & Init / errore di configurazione (LED). \\ \rowa \code{DONE} & Y3 & Configurazione completata (LED). \\ \code{CFGMDN[2:0]} & R4/T4/U4 & Selezione modo (vedi sotto). \\ \bottomrule \end{tabularx} \subsection{Modi di configurazione (\texttt{CFGMDN})} \begin{tabularx}{\textwidth}{L{4.0cm} C{4.0cm} Y} \toprule \rowh \thd{Modo} & \thd{CFGMDN[2:0]} & \thd{Uso} \\ \midrule MSPI (boot da flash) & \code{010} & \textbf{Default} --- standalone. \\ \rowa SSPI (slave SPI) & \code{001} & Config da host esterno. \\ SCM (slave serial) & \code{101} & Config seriale. \\ \rowa SPCM (slave parallel) & \code{111} & Config parallela 8-bit. \\ \bottomrule \end{tabularx} \begin{fnwarn}[Ball di configurazione da verificare sul 45F] \textsuperscript{$\dagger$}Le ball di JTAG e config-SPI qui riportate sono il \emph{riferimento} dell'eval board Lattice (device 85F). JTAG e config-SPI sono pin dedicati e in gran parte fissi nella famiglia ECP5, ma le posizioni esatte sul target \code{LFE5U-45F-8BG381C} vanno confermate sul file pinout Lattice del 45F (Diamond/Radiant o database Trellis) prima di committarle nello schematico, come già fatto per i segnali applicativi (cap.~\ref{ch:hw}). \end{fnwarn} \section{Attività aperte prima della cattura schematica} \begin{itemize} \item[\OK] \code{ADDR\_WIDTH}=23 (8~MB pieni) su tutti i moduli e testbench. \item[\OK] \code{.lpf} reale con l'assegnazione ball CABGA381, place\&route-verified a 0 errori (\code{synth/ecp5/spi\_neuron\_top.lpf}, 57 segnali incl. sottosistema flash). \item[\OK] Sottosistema flash boot/persistenza (Fasi F1-F7): SPI master, copy engine, catalogo a slot con CRC32, bus SPI a 4 fili indipendente (nessuna primitiva di configurazione condivisa), sintesi reale a 0 errori, Fmax 67.91~MHz (\code{WORKLOG.md}). \item[$\square$] Confermare signal integrity PSRAM/SPI al clock effettivamente montato. \item[$\square$] Schema di doppio collegamento DI/DO/CS/CLK della flash (pin dedicati di boot + le 4 ball ordinarie del sottosistema flash) --- non ancora catturato a schematico. \item[$\square$] Scelta del footprint del connettore JTAG. \item[$\square$] Cattura schematica (KiCad o altro): nessuno schema esiste ancora per questa combinazione dispositivo/package. \end{itemize}