【再说FPGA】基于In-System Sources and Probes Editor的AD采集
0赞基于In-System Sources and Probes Editor的AD采集
1概述
该实例用FPGA的内部逻辑设计一个实时AD采样控制功能,该模块一方面不断的通过SPI接口采集AD芯片TLC549的模拟电压值,另一方面我们例化一个In-System Sources and Probes Editor用于在PC端查看当前采样值。
该实验的硬件平台为特权同学的SF-CY3核心板和SF-BASE板。
SF-CY3 FPGA Cyclone III开发板套件
http://item.taobao.com/item.htm?spm=686.1000925.1000774.16.mTv0ft&id=22439872377
SF-BASE FPGA套件子板
http://item.taobao.com/item.htm?spm=686.1000925.1000774.6.mTv0ft&id=18922263863
2 AD采样控制原理
AD芯片TLC549的控制使用了比较简化(单向数据传输)的SPI接口,接口上只需要片选信号adc_cs_n、时钟信号adc_clk和输入数据信号adc_data。控制时序如图所示,只要每次片选有效后产生8个时钟周期依次读取AD采样数据即可。在片选信号拉低后大约1.4us(Tsu)第一个采样数据出现在adc_data上,此时时钟adc_clk上升沿可以采样数据,时钟信号adc_clk的最高频率可以达到1.1MHz。两次数据采样间隔必须大于17us(Twh)。
逻辑实现上,使用了三段式状态机。状态TSUDL和START拉低片选信号并等待第一个转换数据出现在数据信号adc_data上;状态DTRAN进行8个串行输入数据的采样;状态STOP完成一次采样;状态TWHDL延时等待至少17us,保证两次数据采样有足够的时间间隔。
3 In-System Sources and Probes Editor例化
因为In-System Sources and Probes Editor是Quartus II中的一个IP核,所以我们需要先对其进行设置添加,然后例化到我们的代码中。
点击菜单栏ToolsàMegaWizard Plug-In Manager。
选择Create a new custom megafunction variation。
在MegaWizard Plug-In Manager中,做如图所示的设置,注意在What name do you want for the output file中,需要输入一个该代码的文件名,如这里在工程目录ex8后面命名mydebug。最后点击Next进入下一步。
如图所示,我们需要在In-System Sources and Probes Editor配置页面中,设置probe port为8bits,source port为0bits。Probe的功能是读出(对于工程设计为输出)我们的FPGA设计中的某些寄存器,而source则是写数据(对于工程设计为输入)到FPGA设计中。本实例是要实时监控查看输出的AD采样值,所以选择probe。完成设置选择Next。
第二步EDA不需要做设置,我们来到Summary配置页面,注意要勾选mydebug_inst.v文件,这个文件里面有In-System Sources and Probes Editor的例化模板。完成这些设置后,点击Finish完成所有配置。
回到Quartus II界面,我们点击Open File快捷按钮,找到工程目录ex8下的mydebug_inst.v文件,打开它。
我们可以看到如下的代码,可以将它复制到工程源码中,对括号内的信号做相应的映射更改。
mydebugmydebug_inst (
.probe ( probe_sig ),
.source ( source_sig )
);
3调试
在将前面的IP集成到工程源代码以后,完成其他相关的步骤,最后进行全编译。最后使用In-System Sources and Probes Editor进行调试,如图点击菜单栏的ToolsàIn-System Sources and Probes Editor。
In-System Sources and Probes Editor的主界面如图所示。
如果还未使用Programmer执行过下载操作,可以如图所示在In-System Sources and Probes Editor界面中执行。
在实时数据监控窗口里,我们看到前面设置的所有的Probe的8个位都列出来了,为了后面便于观察,我们可以在最下方实时监控数据的窗口右键单击,选择Select All。
Name下面的所有位都变蓝表示选中,接着右击选择Group。
此时所有的8bit都成为一组里,我们再次右键单击然后选择Bus Display FormatàUngigned Decimal。这个设置将这个group显示的8bit数据设为无符号十进制,便于后续的观察。
最后,我们设置监控数组为32(当然也可以更大,这个设置就是监控窗口中显示出来的数据个数),点击持续监控的按钮,开始数据捕获。如图所示,我们连续的旋动SF-BASE板的可变电阻R24,改变输入模拟值,对应的8bit采集电压值也持续的变化了。