目录
当前,FPGA设计在很多场合得到了广泛的应用,如集成电路设计、SoC开发等领域。常规的设计方法采用硬件描述语言或高级综合的方式对功能进行描述,优点是设计周期较短,便于调试,然而难以满足对性能要求较高的场合。因此,笔者尝试采用纯硬件电路的方式,针对基本的数学运算进行设计。本文为采用硬件电路实现最大公约数的求取算法。
一、设计需求
已知最大公约数的求取算法如下:A,B为非零正整数,A-B=C,C也是非零正整数,则A,B的最大公约数等于B,C的最大公约数。按照全定制FPGA的设计思路,不使用硬件描述语言或高级综合,直接设计实现该算法的硬件电路。(字长:32_bit)
二、设计工具及版本
Quartus II 8.1
三、设计原理及结构方案
最直接的想法是利用电路反复做减法。当A>B时,令A=A-B;当A<B时,令B=B-A;当A=B时,输出A或者输出B为A,B的最大公约数。
然而,如果反复做减法,当A,B当中至少一个远大于它们的最大公约数时,减法运算会消耗大量的时间,所以必须使用优化的算法。考虑将A-B改为A-kB,取足够大的k,使A-kB的结果尽可能小,即将减数相同的多次减法改成求余运算A=A mod B。由此,得到优化的算法:轮流执行A=A mod B和B=B mod A,直到A,B两者当中有且只有一个为零,则A,B的最大公约数即为A,B当中不为零的那个数。
输入信号:
AIN,BIN:输入的两个数,32_bit;
EN:输入允许,将AIN,BIN的值赋给AOUT,BOUT,高电平有效;
CLK:时钟。
输出信号:
AOUT,BOUT::每步运算的输出,32_bit;
DONE_L:指示是否得到最大公约数,判断依据是AOUT和BOUT与运算的结果是否为零,低电平有效;
GCDOUT:最大公约数,为AOUT和BOUT各位或运算的结果。
由下表设计总体结构方案,如下图所示。
EN |
CLK |
AOUT* |
BOUT* |
---|---|---|---|
1 |
↑ |
AIN |
BOUT |