基于FPGA的光纤光栅传感器实时波长数据存储的方法与流程

文档序号:13483483阅读:277来源:国知局

本发明提供一种基于现场可编程门阵列(即field-programmablegatearray,以下简称fpga)的光纤光栅传感器实时波长数据存储的方法,它是一种基于fpga的光纤光栅传感器数据实时存储的实现方法。它将经过模拟数字采集模块转化的光纤光栅传感器的实际波长数字信号通过fpga的逻辑控制存储到安全数码卡(即securedigitalmemorycard,以下简称sd)接口上的sd卡里,能够对数据进行实时存储,属于数据存储技术领域。



背景技术:

光纤光栅具有重量轻、耐腐蚀等优点,目前已在石油产业、电力行业、航空航天等多个领域进行应用。在光纤光栅的应用过程中存储波长的实时数据是其他操作的基础,需要存储一定量的数据后才能进行光纤光栅传感器的数据处理、数据解调。存储波长的实时数据还能在外部设备通信时进行差错检测。

在以往的数据存储系统中,往往采用微处理器arm(即acornriscmachine,以下简称arm)操作数据存储,受限于中央处理器(即centralprocessingunit,以下简称cpu)“取指-译码-执行”的流水线特点的指令执行机制,需要cpu一条一条地读取指令,顺序执行指令来实现功能,这种串行式的工作方式很大程度上限制了sd卡读写驱动的性能提升。基于以上现状和问题,本发明提出一种基于fpga的光纤光栅传感器波长数据存储的方法。



技术实现要素:

(一)本发明的目的是:

针对以往的基于arm实现的光纤光栅传感器数据存储系统并发性低、吞吐量小的问题,本发明的目的是实现将经过模拟数字采集模块转化的光纤光栅传感器的实际波长数字信号实时存储到存储介质中,提高系统的并发性处理,进而提高系统的吞吐量。同时利用模块化的封装,简化系统设计、调试等操作,为之后的光纤光栅数据处理、数据解调做好准备。

(二)其具体技术方案如下:

本发明一种基于fpga的光纤光栅传感器实时波长数据存储的方法,其步骤如下:

步骤一,搭建光纤光栅波长数据存储的硬件平台,确定硬件系统所使用的开发板、存储媒介和软件开发使用的编程语言;

步骤二,设计存储介质的初始化、读取、写入的时序图,根据时序图设计初始化程序、读取程序、写入程序,最终封装成初始化模块、读取模块、写入模块;

步骤三,设计顶层模块,将初始化模块、读取模块、写入模块应用到顶层模块中,实现顶层模块对初始化模块、读取模块、写入模块的调用;

步骤四,将存储介质第一扇区作为记录地址index所用扇区,用初始化模块对存储介质进行初始化操作;

步骤五,读取存储介质的第一扇区获取index,如果index大于最大扇区则清除第一扇区,并向第一扇区写入1,否则将地址偏移到index;

步骤六,将波长数据进行高速模数转换(即analogtodigital,以下简称ad)转换得到数字信号,fpga中用写入模块将数字信号写入到index指向的扇区,如果写入成功,清除第一扇区内容,将index+1写入到第一扇区;如果index大于最大扇区,结束操作。

其中,在步骤一中所述的“光纤光栅波长数据存储的硬件平台”,是指使用型号为xc7z020-1clg484i的集成开发板miz702(南京米联电子),该集成开发板采用fpga和arm处理器相结合的平台,并采用版本为“vivado2015.4”的开发软件用verilog语言进行硬件系统的开发,存储介质选用遵循sd卡2.0协议的sd卡。

其中,在步骤二中所述的“初始化程序”里,第一步向sd卡发送cmd0命令,第二步向sd卡发送cmd1命令,第三步向sd卡发送cmd8命令,第四步向sd卡发送cmd55命令,最后向sd卡发送acmd41命令,其状态机见附图2所示,通过该程序可以将sd卡进行初始化操作;所述的“读取程序”里,先等待sd卡的初始化操作完成,再向sd卡发送cmd17命令,根据sd卡的回应信号读取数据,其状态机见附图3所示,通过该程序可以将sd卡的指定扇区块里存储的数据读取出来;所述的“写入程序”里先等待sd卡的初始化操作完成,再向sd卡发送cmd25命令,等待sd卡回应,如果回应正确则开始发送数据,如果sd卡忙状态结束,则写入完成,其状态机见附图4所示,通过该程序可以将数据写入到sd卡的指定地址中;所述的“初始化模块”是指将“初始化程序”添加到关键词module和关键词endmodule之间,并且将输入时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号添加到模块输入输出信号处;所述的“读取模块”是指将“读取程序”添加到关键词module和关键词endmodule之间,并且将输入时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号、读取到的数据信号、读取完一次数据的标志信号myvalid_o添加到模块输入输出信号处;所述的“写入模块”是指将“写入程序”添加到关键词module和关键词endmodule之间,并且将输入时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号、要写入的数据信号添加到模块输入输出信号处。

其中,在步骤三中所述的“设计顶层模块,将初始化模块、读取模块、写入模块应用到顶层模块中,实现顶层模块对初始化模块、读取模块、写入模块的调用”,其作法如下:新建一个顶层模块top,在“顶层模块”中添加fpga内部时钟输入信号、输出给sd卡的时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号、要写入的数据信号、读取到的数据信号;将fpga内部时钟输入信号设置为50mhz,将输出给sd卡的时钟信号连接到fpga内部时钟信号的二分频信号上;实例化一个可以将sd卡进行初始化操作的“初始化模块”,连接“顶层模块”与“初始化模块”里相同的信号线;实例化一个可以将sd卡的指定扇区块里存储的数据读取出来的“读取模块”,连接“顶层模块”与“读取模块”里相同的信号线;实例化一个可以将数据写入到sd卡的指定地址中的“写入模块”,连接“顶层模块”与“写入模块”里相同的信号线。

其中,在步骤四中所述的“index”变量,用于记录当前写入的sd卡扇区;所述的“将存储介质第一扇区作为记录地址index所用扇区,用初始化模块对存储介质进行初始化操作”,其作法如下:在步骤三中的“顶层模块”里调用已经实例化的“初始化模块”,它会自动调用步骤二中的“初始化程序”,将sd卡进行初始化。

其中,在步骤六中所述的“将波长数据进行高速ad转换得到数字信号”是指采用型号为ad9244的高速ad采集芯片进行数据采集,采样频率为2mhz。

通过以上步骤,实现了基于fpga的光纤光栅传感器实时波长数据存储的方法,经过模块化的封装,简化了系统设计、调试。

(三)本发明的优点在于:

基于fpga的光纤光栅传感器波长数据存储能够实时存储光纤光栅的波长数据,与基于arm实现的光纤光栅传感器数据存储系统相比,该方法提高了系统的并发性处理,提高了系统的吞吐量。选用sd卡作为存储介质,具有文件系统的sd卡操作方法不能使用文件系统表头所使用的扇区,避免破坏文件系统;而本方法不需要sd卡具有文件系统,可以利用文件系统表头所使用的扇区进行读写操作,变相地增大了sd卡的存储空间。

本方法将数据存储为二进制形式,如果将二进制数据转换成assi码代表的数值数据量会很大地增加,从而会使sd卡只能存储更少量的信息;而将数据保存为二进制形式,不仅在存储数据时少了解析数据的操作,加强了数据存储速度,而且在同等存储空间里能够存储更多的信息。

本发明对实时波长数据存储的实现方式简单,适用性和可操作性强,并且进行了模块化封装,简化了系统设计、调试,可以很好地移植到类似平台。

附图说明

图1硬件平台模型。

图2初始化模块状态机。

图3读取模块状态机。

图4写入模块状态机。

图5本发明所述方法流程图。

图6存储结果显示图。

图中序号、符号、代号说明如下:

图2中:

init:上电完成状态

idle:初始状态

send_wait_cmd0:向sd卡发送cmd0命令并等待sd卡的回应

wait_after_cmd0:准备进行初始化

send_wait_cmd8:向sd卡发送cmd8命令并等待sd卡的回应

send_wait_cmd55:向sd卡发送cmd55命令并等待sd卡的回应

send_wait_acmd41:向sd卡发送acmd41命令并等待sd卡的回应

init_done:初始化成功

init_fail:初始化失败

图3中:

init:初始化状态

idle:空闲状态

send_wait_cmd17:向sd卡发送cmd17命令并等待sd卡的回应

read_wait:等待数据包的数据头读取

read_data:开始读取数据包的数据

read_tail:等待数据包的数据尾部读取

read_done:读取完成

read_fail:读取失败

图4中:

init:初始化状态

idle:空闲状态

send_wait_cmd25:向sd卡发送cmd25命令并等待sd卡的回应

send_data:发送数据包

write_isright:sd卡回应数据

write_busy:sd卡写数据

write_ok:发送停止写数据标志

write_done:发送完成

write_fail:发送失败

图5中:index是记录当前写入的扇区的变量。

具体实施方式

本发明一种基于fpga的光纤光栅传感器实时波长数据存储的方法,操作流程见图5所示,其具体步骤如下:

步骤一,搭建光纤光栅波长数据存储的硬件平台,硬件平台模型如图1所示,使用型号为xc7z020-1clg484i的集成开发板miz702(南京米联电子),采用版本为“vivado2015.4”的开发软件用verilog语言进行硬件系统的开发,存储介质选用遵循sd卡2.0协议的sd卡。

步骤二,设计存储介质的初始化时序图,根据时序图设计初始化程序,在初始化程序中第一步向sd卡发送cmd0命令,第二步向sd卡发送cmd1命令,第三步向sd卡发送cmd8命令,第四步向sd卡发送cmd55命令,最后向sd卡发送acmd41命令,其状态机见附图2所示,通过该程序可以将sd卡进行初始化操作,将初始化程序添加到关键词module和关键词endmodule之间,并且将输入时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号添加到模块输入输出信号处用于封装成初始化模块;设计存储介质的读取时序图,根据时序图设计读取程序,在读取程序中先等待sd卡的初始化操作完成,再向sd卡发送cmd17命令,根据sd卡的回应信号读取数据,其状态机见附图3所示,通过该程序可以将sd卡的指定扇区块里存储的数据读取出来,将读取程序添加到关键词module和关键词endmodule之间,并且将输入时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号、读取到的数据信号、读取完一次数据的标志信号myvalid_o添加到模块输入输出信号处处用于封装成读取模块;设计存储介质的写入时序图,根据时序图设计写入程序,在写入程序中先等待sd卡的初始化操作完成,再向sd卡发送cmd25命令,等待sd卡回应,如果回应正确则开始发送数据,如果sd卡忙状态结束,则写入完成,其状态机见附图4所示,通过该程序可以将数据写入到sd卡的指定地址中,将写入程序添加到关键词module和关键词endmodule之间,并且将输入时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号、要写入的数据信号添加到模块输入输出信号处用于处用于封装成写入模块。

步骤三,新建一个顶层模块top,在顶层模块中添加fpga内部时钟输入信号、输出给sd卡的时钟信号、代表sd卡dataout端口的输出信号、输出给sd卡cs端口的信号、输出给sd卡datain端口的信号、要写入的数据信号、读取到的数据信号;将fpga内部时钟输入信号设置为50mhz,将输出给sd卡的时钟信号连接到fpga内部时钟信号的二分频信号上;实例化一个可以将sd卡进行初始化操作的初始化模块,连接顶层模块与初始化模块里相同的信号线;实例化一个可以将sd卡的指定扇区块里存储的数据读取出来的读取模块,连接顶层模块与读取模块里相同的信号线;实例化一个可以将数据写入到sd卡的指定地址中的写入模块,连接顶层模块与写入模块里相同的信号线;

步骤四,定义一个index变量,用于记录当前写入的sd卡扇区,将存储介质第一扇区作为记录地址index所用扇区。用初始化模块对存储介质进行初始化操作:在步骤三中的顶层模块里调用已经实例化的初始化模块,它会自动调用步骤二中的初始化程序,将sd卡进行初始化。

步骤五,读取存储介质的第一扇区获取index,如果index大于最大扇区则清除第一扇区,并向第一扇区写入1,否则将地址偏移到index。

步骤六,使用ad9244的高速ad采集芯片采样频率为2mhz进行数据采集,硬件平台模型如图1所示。将波长数据进行高速ad转换得到数字信号,fpga中用写入模块将数字信号写入到index指向的扇区。如果写入成功,清除第一扇区内容,将index+1写入到第一扇区;如果写入失败则点亮led灯;如果index大于最大扇区,结束操作,闪烁led灯。存储结果见图6。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1