The keypad was an alphanumeric, 4x4 grid. There were four pins for the rows and four pins for the columns. To know which key was pressed, we treated the rows as inputs and the columns as outputs. We would alternate which row was being driven high at any given time and when a key was pressed it would complete a circuit and we read the column that goes high as a result. Based on which row is being driven and which column is high at any given time allow us to know which of the sixteen buttons are being pressed. The system is done in both hardware and software. It is set up so the keypad is controlled with a wrapper connected to the APB. The state of which row you want to be driven is performed by writing to the wrapper and then reading the wrapper to check which columns are high. By putting this piece of software in a loop we constantly monitor the state of the keypad. We struggled with the design for a long time because we kept getting a netlist error. It turns out, this was a result of the tools optimizing away our inputs because they didn't have any effect on the outputs (they shouldn't have). We were eventually able to fix this and it was mostly smooth sailing from then on, although we did use the oscilloscope for some debugging.