基于高速串行BCD码除法的数字频率计的设计
式中,ω[j]为第j步的余数,ω[0]为被除数;d为除数;qj+1为第j+1步所得的商;r为与移位步长有关的常数,在此取为16。
除法运算循环图表如图3所
示。
循环步骤如下:
·将ω[j]左移四位,构成rω[j]。
·通过多次BCD码减法运算,求得部分商qJ+1,得到部分余数。
·部分余数、部分商移位,准备下次循环。
高速串行BCD码除法是建立在BCD码减法运算基础上的循环运算。用被除数减除数得到部分余数的BCD码,如果够减,则使商加1;否则,余数和商同时左移四位,并记录移位的次数m,根据对有效位数的不同要求,可以对m进行赋值,如果要求保留8位有效数字,则m=8。
在这种循环除法运算中,减少循环的次数是提高运算速度比较有效的方法。在一般循环式除法运算中,是从低位开始进行循环相减,循环次数等于商。如果是8位除法运行,则得到一个8位的商,要进行8位次的BCD码减法循环,例如:56895230/8=7111903.8,要进行7111903.8次循环,计算的速度可想而知。
在本设计中借鉴了一般十进制除法的运算方法,从高位开始相减,大大减少了循环次数。下面以一个例子说明它的原理:
·将被除数和除数移位,使其第一位BCD码不为0000,并记录移位的次数P(例如:56895230/80000000,p=8)。
·比较最高位的大小,如果除数的最高位大于被除数的最高位,则将除数右移4位,同时将P减1(即:56895230/08000000,且p=7)。
·得到的数卢为小数点的位置(F:7说明小数点的位置在第七位数后)。
·循环相减。当部分余数小于08000000,再将部分余数左移四位,继续进行相减。循环m次后即可得到m个有效数字的结果,然后根据p可以确定小数点的位置。
使用这种方法计算一个8位数的除法运算,循环减法次数最大为80次,每次循环使用时间为8个时钟周期。如果工作频率为100MHz,则最长的运算时间为6.4μs,运算速度大大提高。
图4
3 设计实现
采用VHL语言设计一个复杂的电路系统,运用自顶向下的设计思想[2],将系统按功能逐层分割的层次化设计方法进行设计。在顶层对内部各功能块的连接关系和对外的接口关系进行了描述,而功能块的逻辑功能和具体实现形式则由下一层模块来描述。根据频率计的系统原理框图(图1),运用自顶向下的设计思想,设计的系统顶层电路图如图4所示。各功能模块采用VHDL语言来描述。
在计数模块中,通过译码完成的信号COMP和标准信号计数器的溢出信号ov2对门控信号CL进行控制。可以根据不同的情况选择门控信号的时间范围,使设计具有一定的灵活性。采用门控信号CL和被测信号BSN对两个8位十进制计数器进行同步控制[3]。根据D触发器的边沿触发的特点,可以将输入的门控信号CL作为D触发器的输入信号,而将被测信号BSN作为D触发器的脉冲控制信号,使触发器的输出端只有在被测信号BSN上升沿时才发生变化,实现了对使能信号的双重控制。
本设计比较重要的一部分是运算单元。由于在运算单元中采用的是串行运算,因此其工作频率必须足够高。在FPGA中实现时,如何提高串行BCD码除法运算的速度是比较关键的问题。
BCD码减法运算采用行波进位方法,因此必须尽量减小进位逻辑上的延迟。ACEX 1K系列的每个LE中都提供了一个专用的进位链和级联链,充分利用这些资源可以提高多位串行BCD码减法的性能。根据ACEX1K系列周期约束,其延时为:
Tclk=Tco+B+Tsu-(E-C)
《基于高速串行BCD码除法的数字频率计的设计(第2页)》