基于fpgaad数据采集存储处理报告(含verilog源代码)

上传人:Bod****ee 文档编号:47561340 上传时间:2018-07-02 格式:DOCX 页数:28 大小:2.15MB
返回 下载 相关 举报
基于fpgaad数据采集存储处理报告(含verilog源代码)_第1页
第1页 / 共28页
基于fpgaad数据采集存储处理报告(含verilog源代码)_第2页
第2页 / 共28页
基于fpgaad数据采集存储处理报告(含verilog源代码)_第3页
第3页 / 共28页
基于fpgaad数据采集存储处理报告(含verilog源代码)_第4页
第4页 / 共28页
基于fpgaad数据采集存储处理报告(含verilog源代码)_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《基于fpgaad数据采集存储处理报告(含verilog源代码)》由会员分享,可在线阅读,更多相关《基于fpgaad数据采集存储处理报告(含verilog源代码)(28页珍藏版)》请在金锄头文库上搜索。

1、1基于基于 FPGA AD 数据采集存储处理项目报告数据采集存储处理项目报告(XILINX ALTEARA 都可用) 组员:华、文、杰1 1、实验目的实验目的本次实验利用 Basys2 开发板完成一个开发小项目,即开发 AD 数据采集存 储处理系统,旨在掌握 FPGA 开发基本方法以及锻炼解决开发过程中出现问题的 能力。2 2、关键词关键词Basys2、FPGA、AD 转换、RAM、串口通信、MATLAB 处理3 3、方案设计方案设计要实现本次项目,首先确定器件,其次根据器件时序写出模块的使用程序, 最后综合成一个工程,然后进行仿真,上板实验。 本次实验的器件:32M8 位模数转换器、Basy

2、s2 开发板、串口转 RS232cp2102 模块、基于三极管的电平转换电路。 选择好器件后,根据器件的时序完成模块的代码书写。 写好 AD 模块、串口通信模块后,现在就需要处理采样速率与串口通讯速率 不匹配的问题了。根据香农采样定理,采样频率得高于信号频率的两倍才能完 成信号复现,我们这里使用 25M 的高速采样频率,而串口 dps9600 传送一个位 104us 明显比采样慢许多。所以这里需要解决速率不匹配的问题。我们想到可 以利用 FPGA 的 RAM 先存储采样来的数据,然后再提取数据经过串口通信送至 PC 经由 MATLAB 处理。 本次小项目最为关键的是控制好采样与串口通信的时序问

3、题。关于时序的 控制,留到模块介绍里面说明。 方案小结:本次实验基于片内 RAM 存储 AD 采样过来的数据,然后待采样完 成后提取数据串口通信至 PC,最后经由 matlab 处理。4 4、模块介绍模块介绍1. Verilog 开发程序介绍 如下给出基于 QuartusII 绘制出的 Block Diagram 图,涵盖了所有的模 块以及模块之间的连线。2图 4.1 综合模块图 如下给出程序目录(txt 格式):现在分别介绍各个模块的端口以及功能。 AD 外设:电路图、实物图、接口这个外设提供最大 32M 采样速率,包括一个模拟信号输入和一个采样时钟 输入以及八个数字信号输出。在每个采样时钟

4、的上升沿输出相应的采样数字信 号。 Basys2 开发板:串口通讯模块外设:3这个模块旨在把 Basys2 输出的 LVTTL 转换成 RS232 的负逻辑高电平,实现 串口与 PC 的通信。 它有五个引脚:GND、3.3V、5V、TXD、RXD。在使用中,只使用 RXD 和 GND。 需要注意的是,倘若 GND 不与 FPGA 串口的 GND 连接,那么串口输出的电平, 此模块无法识别,这就是数字地需要共地的重要性。 这里的 RXD 接 Basys 的串口输出 C6(这是分配的 tx 输出管脚) 。 接线当然用杜邦线的公母线连接。 TOP 模块:TOP 模块命名为 TEST 是当时自己写的非

5、最终版程序用来测试正确性, 最后测试正确后也没修改过来,但是对仿真没影响。 clk 是系统时钟输入,用来作为全局时钟并且为调用后面四个子模块提 供时钟基础,设置为 50M。 rst_n 是系统复位设置,复位到初始状态,这里大家都熟悉,不用多说。input7:0datain 是 AD 外设的 8 位数字信号输入,这个数字信号随着 AD 采样时钟(clk_25M)变化,在后面 CLK 模块里面会说明。 output clk_25M 为调用 CLK 模块后输出的 AD 采样时钟,这个输出用来 接 AD 外设的时钟输入,提供采样时钟。 output tx 为调用 uart 模块后,与 PC 通信的“桥

6、梁” ,即携带数据的 信号吧。 CLK 模块:4这里模块名字设置为 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,这里的写速率要和采样速率匹配才可以保证采样再存储的

7、正确性。 Input rd_clk 为读时钟输入,这里接 dps9600,符合串口协议。 Input rst_n 为系统复位,低电平有效。 Output reg wren 为写使能输出,当 wren 为高时,写有效,即表明 AD 的八 位数字信号写进 RAM。 Output reg 8:0wraddress 为写地址,写地址在写时钟下降沿完成加一, 保证每次写完后都是新的地址存储数据保证了 ram 能够存储 512 个正确数据。 Output reg rden 为读使能输出,当 rden 为高时,读有效,即表明 RAM 里 面对应地址的信号读出。 Output reg 8:0rdaddress

8、 为读地址,在每个读信号的下降沿完成加一, 保证每次读完一个数据后地址指向新的内容,保证读出的 512 个数据的正确性。Output reg wrsig 为发送给串口的发送信号,上升沿有效。每一上升沿使 串口开始发送送到串口的数据给 PC。 RAM 模块:5Input wr_clk 为 RAM 的写时钟,上升沿有效在相应地址写入数据。 Input wren 为 RAM 写使能信号,高电平有效,有效时配合 wraddress 和 wrclk 进行写操作。 Input 8:0wraddress 为写地址,在每个 wr 时钟下降沿完成加一操作,确 保每次写入的地址正确性。 Input rd_clk

9、为 RAM 的读时钟,上升沿有效,在相应的地址读出数据。 Input 8:0rdaddress 为读地址,同写地址功能。 Input rden,同 wren。 Output dataout 是读出的数据,送至 UART 模块通信给 PC。 UART 模块:Input clk 为 CLK 模块的 clk_dps9600,用于配合这个模块打成波特率为 9600 的串口输出。 Input rst_n 为复位,低电平有效。 Input 7:0datain 接 RAM 模块的数据输出。 Input wrsig 上升沿有效,开启串口发送,接 ENCON 模块 wrsig。 Output reg idle

10、为串口工作状态说明,为高表明正在发送数据。 Output tx 为发送的串口信号,接至上面的串口通讯外设模块 RXD。介绍完所有模块后,现在给出仿真波形以及 testbench 的设置。 TOP 程序以及子程序调用:6Testbench:7对应的仿真波形:可见,CLK25M 输出正确。可见,tx 的输出也满足设计的 10101010B 然后验证每个位的时间,大概为 104us,满足通信要求仿真通过。 2. Matlab 处理程序介绍: 程序:8串口调试小助手软件以及工作界面:这个程序提取串口通信至 PC 的数据(经由串口调试小助手输出) ,然后 将十六进制转换成十进制最后绘图输出。5 5、关键

11、问题分析处理关键问题分析处理我们小组在代码编写编译过程、仿真过程以及上板过程中出了不少错误, 但最终都及时纠正了。在这个发现问题与解决问题的两周里,我们小组对 出现的部分问题做了分析与记录有些还自行设计了实验验证。如下列出了 一些关键问题的分析处理。 :模块的购置问题与电平是否兼容的处理:模块的购置问题与电平是否兼容的处理 我们的小项目设计到两个外设,一个是 AD 转换模块一个是串口转 RS232 通 信模块。在购置模块时需要考虑引脚电平是否与 FPGA 电平(我们这里使用的是 LVTTL 3.3V 引脚电平)兼容,所需要的引脚空间 Basys2 是否有足够的提供, 还需要考虑成本以及模块的时

12、序问题。9本实验过程中,我们购置了兼容 LVTTL 八位 AD 转换模块和兼容 TTL 的串口 通信模块。成本很低,串口模块加上 AD 模块在几十块以内。 网购的模块到了之后,我们开始测试各模块的电平值。 经测试,AD 输出高 3.34V 低 0V,符合 LVTTL3.3V 电平逻辑 经测试,串口模块 txd 输出高 5v,低 0V。基于这里,我们通过串 口 txd 接自己的 rxd 实现了串口模块是否损坏的测试,测试通过,串口 是好的。由于在测量电平时,我们没有完成上板工作,所以我们只好假 设串口模块 rxd 需要接 TTL5V 逻辑才可正常工作,因此我们组利用两个 三极管搭建了一个电平转换

13、电路,实现了电平转换。 其实到后面的上板工作之后,发现 3.3V 的输出接到 RXD,也能正常 工作。 :源代码的借鉴与部分时序代码设计问题:源代码的借鉴与部分时序代码设计问题 我们程序需要 Verilog 串口通信模块,为了节省时间,我们在网上 寻找了若干串口通信例程,在掌握了例程的原理后,我们自行又编写了 自己的串口模块和分时模块还有存储模块以及时序控制模块。其中,最 为困难的是采集速率和通信速率不匹配怎么解决的问题。我们采取利用 ram 存储并且提取数据以及设计了合理的存储提取时序控制模块解决这 个问题。然而其中困难重重,由于网上资源有限,对 ISEramip 核理解 不够,我们花了很多

14、时间思考怎么实现这个速率匹配。最终利用ram语 句构成的模块实现了 ram 存取功能。之后时序控制也顺利设计出来。 :分模块调试:分模块调试 在完成了各个模块的基本书写后,分模块调试是必须的,不然当各 个模块整合到主程序之后除了问题,都不好分析。 这里的调试当然还是基于 testbench 的仿真调试。 :子程序直接的衔接:子程序直接的衔接 在主程序里调用子程序的过程中,我们出现了变量格式不匹配的问 题,即上个子程序的输出需要用 wire 型去构成下个子程序的输入。而 最开始,缺少经验的我们用的是 reg 型变量来衔接子程序。仔细想想两 个变量类型就知道,子程序就当作是一个黑盒子,只有输入输出

15、,输出 的变量类型就是 wire 型。在这个变量类型的选择上,我们组在这里跌 了大坑,不过最终还是成功解决。顺利完成编译工作。 :主程序里子程序的分块调试:主程序里子程序的分块调试 完成编译工作之后,并不代表仿真就可以通过。我们组就遇到了这 样的问题。我们在 testbench 里设计了7:0datain 的激励输入,结 果得到的 tx 输出既有高阻态也有红线不确定值输出。简而言之,仿真 出错。 所以我们开始在主程序里面执行程序的分块调试。考虑到我们程序 的时序逻辑。我们由输入一个个分块仿真一直到最后输出。即先在主程 序仿真 CLK 模块,注释掉其他模块并做做适当修改(比如在主 module

16、里面添加时钟输出) ,验证好 CLK 模块之后,再在主程序里面仿真 CLK+ENCON 模块,然后再方向很 CLK+ENCON+RAM 模块,最后在全部仿真。经过上述主程序里的分块调试,我们成功完成了软件仿真工作。 :串口调试软件的熟悉:串口调试软件的熟悉10我们的项目需要利用到一个软件,串口调试小助手。这个软件我们 不是很熟悉,我们自己单独设计了一个串口通信工程,并且利用我们购 置的串口通信模块完成这个熟悉过程。 主要是通过修改数据长度、校验选择、停止位长度,来熟悉他们之 间的通信协议。最终大家都对这个软件的应用有了深入了解。 :上板调试:上板调试 我们组花了两个下午和三个晚上在南一楼完成调试工作,期间出了诸多 问题。但是我们冷静的分析问题,并且根据问题的现象给出做出假设,并 给出试探性的解决方案。这样一步一步,大概处理了七八个问题之后,我 们上板终于通过了。 :最重要的数字地共地问题:最重要的数字地共地问题 这是本次上板实验过程中,出现的最大的问题! 为什么要共地?因为我们需要一个标准去衡量数字电路中的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号