2 FPGA中各模块的电路组成及工作原理
2.1 波形变换电路
由比较器获得的方波心率脉冲还不能直接用于心率测量,因为脉冲宽度太大。要进行正确的心率测量,必须对这个方波脉冲进行微分,将其宽度调整为一个时钟周期宽。微分电路如图3所示。用VHDL语言编程时,可用一个时钟进程实现这个微分电路。图3中各点波形如图4所示。
2.2 心率计算电路
根据瞬时心率计算公式及图1,瞬时心率的计算应以1kHz的时钟频率作为时间基准,测量相邻两次心跳之间的时间,然后做除法运算。因此,瞬时心率计算电路应包括一个12位的二进制计数器和一个16位的二进制除法电路。平均心率的计算应根据测量结束前最后测得的16次心率值求平均,因此心率计算电路还应包括一个能完成12位二时制数加法的电路和一个能完成12位二进制数除法的电路,这个除法运算可通过移位寄存器右移四次来实现。计数器、加法器和移位寄存器在FPGA中用VHDL语言实现都很容易。下面主要讨论测量的实现方法。
瞬时心率计算公式是一个抛物线函数,分母中计数值N是一个变量,这个除法运算不能通过简单的移位寄存器来实现;而设计16位二进制除法运算电路,无论采用组合电路还是采用时序电路,都将耗费很多的芯片资源。另一方面,人的正常心率为60~120跳/分钟,即使心率出现异常,也不会超过20~200跳/分钟,因此所测量的心率值只有有限个数据。这样,可根据每一个可能出现的心率值,预先求出N的变化范围,制作一张表,存入ROM中。实际测量时,再根据测到的N值,选择相应的心率数据。假设心率的变化范围为20~200,则N的变化范围为3077~300。瞬时心率值IHR与计数值N的关系如表1所示。
计算电路除了完成上述功能外,还要将瞬时心率值和平均心率值转换为七段显示代码,再送入LED显示器进行数字显示。