本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页
最热资讯


Hello! 大家好,我是本次《来实战》项目第六期的执行官,小曹同学,本次项目主题是“基于FPGA的ECG信号采集与处理系统设计”,与众多STM32或Arduino等单片机直接利用软件编程调用库函数不同,本项目以底层逻辑为切入点进行数字电路设计,更加关注电路底层的细节,包括基础模块的划分、接口信号的定义、verilog代码设计、仿真验证以及板级调试,在满足性能要求下,同时会评估资源消耗问题,希望大家能和我一起一步一步的完成此次工程项目,而不是简单的copy。其中难免有错误,希望各位指正。
引言:
FPGA开发和数字IC设计十分相似,而两者最基础是verilog代码设计,verilog是硬件描述语言,实现的数字电路具备硬件并行处理的优点,所以verilog设计思想与基于软件的编程语言是有很大不同的,复杂的verilog代码设计不是随随便便直接在板子上调试成功的。
本项目侧重对设计代码的仿真验证,而不是简简单单对代码 “搬运工”,达到所谓“快速”入门的假现象。在FPGA开发中,每一行verilog代码已经决定了电路的性能和功能,仿真是对verilog代码设计的有效验证方法,因为代码存在的bug在仿真中会一一被定位出来,“速成”FPGA开发都是假的,不能一行一行代码看懂和敲出来,verilog学习的时长都是无用功,正确设计方法+动手练习是FPGA开发/数字电路设计的正确打开方法。以下是我个人设计的方法:
首先根据你的硬件条件包括FPGA板型和其他硬件(AD、VGA、LCD、舵机、摄像头等等),确定一个硬件的详细设计方案;
接着根据需求和参考资料将整体划分到各个小模块,并确定各个模块接口之间的数据信号和控制信号;画时序图主要是根据数据信号走向需要哪些控制信号,而控制信号主要实现方式就是cnt、enable、flag等等;
其次按照图纸就可以敲代码了,而verilog代码语法不是很难,主要是算术运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、位运算符以及移位拼接等,一般设计会这些足够了,而往往多数初学者觉FPGA设计很简单啊,大概指的这部分语法简单,但是在敲代码过程中还要考虑到组合逻辑以及时序逻辑中常用的模块,{组合逻辑主要包括常用逻辑门(与门、或门、非门、异或等)、比较器、半加器、全加器、乘法器、数据选择器、三态门,时序逻辑主要包括D触发器、两级D触发器、带异步复位的D触发器、带异步复位同步清零的D触发器、移位寄存器、单口RAM、伪双口RAM、真双口RAM、单口ROM、有限状态机等}。而这些基本单元在写代码过程做到心中有数,因为这些决定了设计的PPA(Performance,Power,Area);
最后再通过仿真工具对设计的代码进行验证,首先是功能仿真也就是RTL行为级仿真,主要是检查代码中的语法错误以及代码行为的正确性,但是不包括延时信息,验证之前“模块划分与接口定义”阶段。其次是后仿真也就是时序仿真,在设计布局布线后提供一个时序仿真模型,验证之前“画接口信号时序”阶段。
目的意义:
在我国,随着生活节奏加快,心血管疾病的发病率有逐年递增的趋势;同时由于人们生活水平和健康意识的不断提高,对心脏类疾病进行实时监护的需求也不断增加。但是,心血管疾病本身具有无症状性(病人在发生心肌缺血时并没有胸痛、心绞痛等常见症状)和间歇性。
选择这个主题主要原因之一是开发一种可以帮主人们日常生活的非侵入性设备—基于FPGA的ECG信号采集与处理。市场上有许多ECG信号检测产品可以提高效率(尺寸较小,将数据保存在云中等等),但是其中任何一件产品都很少涉及到复杂信号处理,并没有与数据库进行比对。
内容及结构安排:
本文基于Xilinx公司的Artix-7系列芯片xc7a35tcpg236-1和AD83232采集板搭建一套硬件平台用以异常ECG信号检测系统。使用Vivado和ModelSim设计和仿真各个系统模块的功能,本系统主要有AD8232信号采集,FPGA存储和处理,C#GUI显示及matlab处理。其中FPGA处理是核心部分,由以下模块构成:AD模块、RAM模块、UART模块及滤波模块。本文采用Verilog HDL硬件描述语言进行编程,XADC具有两个专用的差分输入引脚Vp和Vn,可用于采样模拟信号,通过ADC模块完成100 MHz到360 Hz的数据采样,同时采用低通滤波器消除共模噪声;在所有存储单元中存满ECG的样本数据后,将生成一个脉冲以触发向PC的传输。UART模块将接收一个信号,该信号使用TX模块进行发送,当接收UART检测到起始位时,它将开始以称为波特率的特定频率读取输入位。
本项目主要有以下方面:
1.FPGA学习流程。编写项目详细设计方案,主要包括数据通路和控制通路的设计,模块划分与接口信号的定义,数据通路原理图以及控制通路时序图,verilog代码的具体设计,以及仿真验证,下载到FPGA开发板调试。在verilog代码设计过程会描述时序图,用到IP核,数据通路的寄存器消耗资源进行评估。
2.用到的滤波处理。在信号处理中,数字滤波器是一种对采样的离散时间信号执行数学运算以减少或增强该信号某些方面的系统。数字滤波器系统通常由一个模数转换器对输入信号进行采样,使用FPGA或ASIC代替通用微处理器或具有特定并行架构的专用DSP,以加快诸如过滤之类的操作。
3.基础能力锻炼。根据IP开发文档,掌握XADC使用、RAM写读、UART数据传输以及状态机verilog代码设计。
项目简介:
包含四大部分:AD采集模块、RAM存储模块、滤波处理模块、UART模块。
首先,AD8232放大器输出是一个介于0至3.3V之间的模拟值,ADC模块的输入应为1V,因此需要进行分压。放置在放大器的输出和FPGA板的输入(Vp引脚)之间,AD模块包括PLL和XADC 完成100 MHz到360 Hz的数据采样。
其次,我们利用RAM模块存储通过ADC采集的样本。模块具有2个命令模式:读取和写入。这两种状态由启用写模式时为高电平和禁用写模式时为低电平的信号控制。
接着,尽管XADC也可以完成滤波作用,为了便于学习本项目通过Digital filter模块完成低通滤波过程。
最后,UART模块将接收脉冲信号后,等到信号指示灯的跳变,读出一帧数据,由于ADC只有12位,而UART只有8位,所以我们需要传输2组数据。
开发计划:
图1:整体计划表
Step1: 确定整个设计思路,ECG信号检测的总体框图,确定程序流程框图
Step2: AD模块、包括XADC和分频时钟接口定义,进行具体verilog代码设计和仿真验证
Step3: RAM读写模块、根据状态机进行接口定义,进行具体verilog代码设计和仿真验证
Step4: Digital filter模块、UART模块接口定义,进行具体verilog代码设计和仿真验证
Step5: 进行功能扩展,并将以上所有模块集成在一起,并且做整个仿真验证以及板级调试,通过在C#GUI中显示及保存为.csv文件,利用MATLAB进行相关算法处理,整理打包完整的开源方案所有资料(设计源码、参考资料)
图2:项目整体流程图
图3:项目整体介绍
好啦,第一期就唠嗑到这里啦,接下来,我将陆续分享“基于FPGA的ECG信号采集与处理系统设计”项目的各个步骤的内容,如果对这个项目感兴趣,想深入了解和沟通,请在右栏浮动模块中扫码申请加入“来实战技术交流群”(Q群)。
欢迎点击下方【收藏按钮】收藏本项目,持续更新中,敬请关注...