\end{center}
}
+\frame{\frametitle{Pin Configuration, input and output}
+
+ \begin{itemize}
+ \item Standard Mux design {\bf cannot deal with many-to-one inputs}\\
+ (SiFive IOF source code from Freedom U310 cannot, either)
+ \vspace{4pt}
+ \item I/O pad configuration conflated with Muxer conflated with GPIO
+ conflated with EINT
+ \vspace{4pt}
+ \item Need to separate all of these out
+ \vspace{4pt}
+ \item EINTs to be separate FNs (managed by RISC-V PLIC)
+ \vspace{4pt}
+ \item GPIO In/Out/Direction treated just like any other FN
+ \vspace{4pt}
+ \item Pad configuration separated and given one-to-one Registers
+ \end{itemize}
+}
\frame{\frametitle{Register-to-pad "control" settings}
\begin{center}
\frametitle{Register key-value CSR table decoding pseudocode}
\begin{semiverbatim}
-struct vectorised fp\_vec[32], int\_vec[32]; // 64 in future
+struct vectorised fp\_vec[32], int\_vec[32];
for (i = 0; i < 16; i++) // 16 CSRs?
tb = int\_vec if CSRvec[i].type == 0 else fp\_vec
idx = CSRvec[i].regkey // INT/FP src/dst reg in opcode
tb[idx].elwidth = CSRvec[i].elwidth
tb[idx].regidx = CSRvec[i].regidx // indirection
+ tb[idx].regidx += CSRvec[i].bank << 5 // 0 (1=rsvd)
tb[idx].isvector = CSRvec[i].isvector
tb[idx].packed = CSRvec[i].packed // SIMD or not
- tb[idx].bank = CSRvec[i].bank // 0 (1=rsvd)
tb[idx].enabled = true
\end{semiverbatim}
\frametitle{Predication key-value CSR table decoding pseudocode}
\begin{semiverbatim}
-struct pred fp\_pred[32], int\_pred[32]; // 64 in future
+struct pred fp\_pred[32], int\_pred[32];
for (i = 0; i < 16; i++) // 16 CSRs?
tb = int\_pred if CSRpred[i].type == 0 else fp\_pred
idx = CSRpred[i].regkey
tb[idx].zero = CSRpred[i].zero // zeroing
tb[idx].inv = CSRpred[i].inv // inverted
tb[idx].predidx = CSRpred[i].predidx // actual reg
- tb[idx].bank = CSRpred[i].bank // 0 for now
+ tb[idx].predidx += CSRvec[i].bank << 5 // 0 (1=rsvd)
tb[idx].enabled = true
\end{semiverbatim}