基于FPGA ad数据采集存储处理报告(含Verilog源代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于FPGA AD数据采集存储处理项目报告

(XILINX ALTEARA 都可用)

组员:华、文、杰

一、实验目的

本次实验利用Basys2开发板完成一个开发小项目,即开发AD数据采集存储处理系统,旨在掌握FPGA开发基本方法以及锻炼解决开发过程中出现问题的能力。

二、关键词

Basys2、FPGA、AD转换、RAM、串口通信、MATLAB处理

三、方案设计

要实现本次项目,首先确定器件,其次根据器件时序写出模块的使用程序,最后综合成一个工程,然后进行仿真,上板实验。

本次实验的器件:32M8位模数转换器、Basys2开发板、串口转RS232cp2102模块、基于三极管的电平转换电路。

选择好器件后,根据器件的时序完成模块的代码书写。

写好AD模块、串口通信模块后,现在就需要处理采样速率与串口通讯速率不匹配的问题了。根据香农采样定理,采样频率得高于信号频率的两倍才能完成信号复现,我们这里使用25M的高速采样频率,而串口dps9600传送一个位104us 明显比采样慢许多。所以这里需要解决速率不匹配的问题。我们想到可以利用FPGA的RAM先存储采样来的数据,然后再提取数据经过串口通信送至PC经由MATLAB处理。

本次小项目最为关键的是控制好采样与串口通信的时序问题。关于时序的控制,留到模块介绍里面说明。

方案小结:本次实验基于片内RAM存储AD采样过来的数据,然后待采样完成后提取数据串口通信至PC,最后经由matlab处理。

四、模块介绍

1.Verilog开发程序介绍

如下给出基于QuartusII绘制出的Block Diagram图,涵盖了所有的模块以及模块之间的连线。

图4.1 综合模块图

如下给出程序目录(txt格式):

现在分别介绍各个模块的端口以及功能。

AD外设:电路图、实物图、接口

这个外设提供最大32M采样速率,包括一个模拟信号输入和一个采样时钟输入以及八个数字信号输出。在每个采样时钟的上升沿输出相应的采样数字信号。Basys2开发板:

串口通讯模块外设:

这个模块旨在把Basys2输出的LVTTL转换成RS232的负逻辑高电平,实现串口与PC的通信。

它有五个引脚:GND、3.3V、5V、TXD、RXD。在使用中,只使用RXD和GND。

需要注意的是,倘若GND不与FPGA串口的GND连接,那么串口输出的电平,此模块无法识别,这就是数字地需要共地的重要性。

这里的RXD接Basys的串口输出C6(这是分配的tx输出管脚)。

接线当然用杜邦线的公母线连接。

TOP模块:

TOP模块命名为TEST是当时自己写的非最终版程序用来测试正确性,最后测试正确后也没修改过来,但是对仿真没影响。

clk是系统时钟输入,用来作为全局时钟并且为调用后面四个子模块提供时钟基础,设置为50M。

rst_n是系统复位设置,复位到初始状态,这里大家都熟悉,不用多说。

input[7:0]datain是AD外设的8位数字信号输入,这个数字信号随着AD采样时钟(clk_25M)变化,在后面CLK模块里面会说明。

output clk_25M为调用CLK模块后输出的AD采样时钟,这个输出用来接AD外设的时钟输入,提供采样时钟。

output tx为调用uart模块后,与PC通信的“桥梁”,即携带数据的信号吧。

CLK模块:

这里模块名字设置为AD_2CLK,旨在表明输出两个CLK,用来AD采样和串口通信。

input clk为系统时钟50Mhz。

Input reset_n为系统复位,低电平有效。

Output reg clk_25M为AD采样时钟,之前做过说明。

Output reg dps9600为输出给uart模块的时钟。

ENCON模块:

这个模块是整个程序的控制核心,下面介绍端口说明。

Input wr_clk为写时钟输入,这里我们接的当然就是AD写入的时钟CLK_25M,这里的写速率要和采样速率匹配才可以保证采样再存储的正确性。

Input rd_clk为读时钟输入,这里接dps9600,符合串口协议。

Input rst_n为系统复位,低电平有效。

Output reg wren为写使能输出,当wren为高时,写有效,即表明AD的八位数字信号写进RAM。

Output reg [8:0]wraddress为写地址,写地址在写时钟下降沿完成加一,保证每次写完后都是新的地址存储数据保证了ram能够存储512个正确数据。

Output reg rden为读使能输出,当rden为高时,读有效,即表明RAM里面对应地址的信号读出。

Output reg [8:0]rdaddress为读地址,在每个读信号的下降沿完成加一,保证每次读完一个数据后地址指向新的内容,保证读出的512个数据的正确性。

Output reg wrsig 为发送给串口的发送信号,上升沿有效。每一上升沿使串口开始发送送到串口的数据给PC。

RAM模块:

Input wr_clk为RAM的写时钟,上升沿有效在相应地址写入数据。

Input wren为RAM写使能信号,高电平有效,有效时配合wraddress和wrclk 进行写操作。

Input [8:0]wraddress为写地址,在每个wr时钟下降沿完成加一操作,确保每次写入的地址正确性。

Input rd_clk为RAM的读时钟,上升沿有效,在相应的地址读出数据。

Input [8:0]rdaddress为读地址,同写地址功能。

Input rden,同wren。

Output dataout是读出的数据,送至UART模块通信给PC。

UART模块:

Input clk为CLK模块的clk_dps9600,用于配合这个模块打成波特率为9600的串口输出。

Input rst_n为复位,低电平有效。

Input [7:0]datain接RAM模块的数据输出。

Input wrsig上升沿有效,开启串口发送,接ENCON模块wrsig。

Output reg idle 为串口工作状态说明,为高表明正在发送数据。

Output tx为发送的串口信号,接至上面的串口通讯外设模块RXD。

介绍完所有模块后,现在给出仿真波形以及testbench的设置。

TOP程序以及子程序调用:

相关文档
最新文档