# Online Signature Verification Systems on a Low-Cost FPGA
## 3 Hardware Implementations  
This paper proposes the implementation of three different approaches for the signature verification system using an FPGA. The first one is an embedded system based on a 32-bit microprocessor, which includes a single-precision floating-point unit (FPU). In the second one, the FPU is substituted by a hardware accelerator especially designed for resolving calculations on floating-point vectors. The last one is a custom computing system built by means of a large set of fixed-point arithmetic circuits. Figure 1: Overview of the online signature verification algorithm. Figure 2: DET curves of the signature verification for algorithms [16; 19] (GMM Modified and GMM, respectively). The algorithm was initially developed on MATLAB where, by default, real numbers are represented by IEEE 754 double-precision format. This standard is a 64-bit floating-point format, which provides both a large dynamic range of representable data and high resolution [21]. However, arithmetic circuits based on this format are significantly complex, and usually, only 64-bit high-performance processors include double-precision FPU. Therefore, to achieve high efficiency when the algorithm is implemented on low-cost FPGAs, the double-precision data must be replaced to simplify the arithmetic circuits but without affecting the biometric performance. Moreover, the format replacement also reduces the required capacity of the involved memories. As mentioned, the systems based on the 32-bit embedded microprocessor require an IEEE 754 single-precision FPU or the hardware accelerator. However, the implementation of the customized system using the single-precision format is not practical due to the large number of required arithmetic circuits. The IEEE 754 arithmetic circuits require a large number of hardware resources and execution clock cycles due to denormalization, normalization and rounding steps that are not carried out on integer arithmetic circuits. Alternatively, real numbers can be represented by binary fixed-point formats, which are basically integers scaled by a constant factor. Consequently, the implementation of arithmetic circuits in such format is much simpler and faster than their floating-point counterparts. However, the number of bits in the fixed-point format must be properly adjusted to avoid overflow or underflow problems that would affect the algorithm performance. As the algorithm includes several stages that require different ranges and precisions, a variable fixed-point format is chosen. Using the Q-format [22] and the notation \(\text{Qm}_{\text{k}}.\text{n}_{\text{k}}\) to represent a format, \(\text{m}_{\text{k}}\) and \(\text{n}_{\text{k}}\) stands for the number of bits for the integer and fractional parts, respectively. If K is the total number of computations involved in the whole algorithm, the \(\text{m}_{\text{k}}\) and \(\text{n}_{\text{k}}\) values in the k-th computation are selected according to the methodology shown in Figure 3. Note as \(\text{m}_{\text{k}}\) can be easily calculated by logging the range of results to avoid overflow errors. On the other hand, \(\text{n}_{\text{k}}\) is selected as the minimum value that does not provide excessive error due to lack of precision. The algorithm is initially executed in double-precision and single-precision formats to record results and verify that both versions provide the same biometric performance. The final distance scores (\(\text{r}_{\text{double-precision}}\), \(\text{r}_{\text{Single-precision}}\)) are used to calculate the maximum error criterium for the fixed-point version. Then, the methodology continues executing the  
Figure 3: Methodology used to adjust the fixed-point formats on MATLAB. fixed-point version of the algorithm, obtaining \(\mathrm{m_{k}}\) from the logged results and incrementing \(\mathrm{n_{k}}\) until the distance score (\(\mathrm{r_{Qm,n}}\)) meets the error criterium at each computation on the entire signature database, according to the following equation.